paulo1205
(usa Ubuntu)
Enviado em 10/02/2016 - 15:01h
listeiro_037 escreveu:
Eu li uma vez que C tem exceções, mas é algo implementado artificialmente.
Usa-se umas funções daquelas em que o protótipo vem com três pontinhos.
Se eu lembrar eu coloco.
Você provavelmente está falando de
setjmp()/
longjmp() (e também
sigsetjmp()/
siglongjmp(), no mundo UNIX).
De fato, trata-se de um mecanismo primário de exceções. Mas primário mesmo, porque restaura a pilha, mas não conta com a possibilidade de chamar destrutores nem mesmo dos objetos que tenham sido criados na própria pilha -- até porque a linguagem não possui objetos nem muito menos destrutores que sobre eles se pudessem chamar.
Agora uma coisa em que GOTO aparecia muito eram aqueles programas BASIC antigos.
O GOTO era usado para se desviar para linha tal. E tinha também o comando GOSUB.
E também um comando ON ... GOTO ... se não me engano.
Sim, já usei muito esse negócio, antes de conhecer C, Pascal e BASIC estruturado (Turbo BASIC, Quick BASIC, QBASIC). Mas acho que usei mais ainda AppleSoft BASIC (do Apple II) e um pouco de MBASIC (Microsoft BASIC -- escrito originalmente pelo Bill Gates em pessoa --, na época do CP/M-80, e do qual o GW-BASIC é um descendente, já no mundo dos PCs com Intel de 16 bits e MS-DOS).
Tem um site chamado gwbasic.com com download para o velho GWBASIC que roda no DOSBOX ou no DOSEMU.
Mas ele salva em formato binário. Sem chance de formato ASCII.
Como assim? Tiraram deliberadamente a opção “
,A” do comando
SAVE? Ela existia desde o MBASIC para forçar o salvamento em formato ASCII, e era inclusive o meio pelo qual se podia imprimir o programa numa porta serial ou outra porta de impressão que não a padrão (pois o comando LLIST só gerava a listagem para a impressora padrão do sistema).
De fato, muitas vezes o código ficava mesmo terrível de se ler. Contudo, era o que se tinha, e a gente fazia coisas interessantes com isso.
E olhe que GW-BASIC e, antes dele, já o MBASIC, ainda eram melhorzinhos, porque pelo menos tinham
WHILE/
WEND como estrutura de controle, bem como um
IF que aceitava a cláusula
ELSE. Pior era o AppleSoft, que não tinha nem isso -- se alguém precisasse de um
loop que não desse para fazer com
FOR, usar
GOTO era obrigatório.
Mas veja: “pior” (já explico a razão das aspas) do que o BASIC ainda era o FORTRAN (que eu nunca usei diretamente, mas já tive de ler um bocado, e já ajudei um primo a dar manutenção num programa que havia sido feito trinta anos antes), que além de usar e abusar de
GO TO, ainda tinha coisas como
computed GO TO e
GO TO para valor de variável. Era mesmo como disse o Dijkstra: você olha o programa, e não tem ideia de o que ele pode fazer.
Lembre-se, porém, que, no fim das contas, saltos como os de
goto são uma das coisas mais comuns em linguagem de máquina e Assembly. Tendo isso em vista, uma primeira observação é que todos dependemos, mesmo sem saber, de muita coisa escrita em Assembly -- e eu não falo do SO dos nossos micros, mas de software crítico que está nos nossos carros, nos aviões, em sistemas de controle dos mais diversos aparelhos de serviço público (como energia e telefonia), bem como de vários dos nossos eletrodomésticos.
Outro ponto é que todas as nossas construções bonitas usando
if/
else,
for,
while,
do/
while e
switch, mesmo sem contar com as cláusulas
break e
continue, viram saltos em linguagem de máquina, tanto saltos imediatos quanto condicionais, diretos e indiretos. Ou seja, tudo aquilo que apavorava o Dijkstra em FORTRAN. Não por acaso, qualquer pessoa que pare para pensar um pouquinho vê logo que o FORTRAN era do jeito que era justamente para mapear quase que 1:1 com o Assembly dos velhos mainframes IBM. Não é à toa que, até hoje, grande parte do mundo de HPC prefere usar FORTRAN, alegando que ele é compilado para código objeto mais eficiente do que seria o equivalente em C.
Por fim, relendo a documentação do GW-BASIC, vi que o
switch do C se parece muito mais com o
ON ... GOTO do BASIC do que com o
case do Pascal ou o
SELECT CASE do BASIC estruturado.
Prefere seu espaguete à bolonhesa, calabresa, quatro-queijos, ou carbonara?