GOTO é portável? [RESOLVIDO]

13. Re: GOTO é portável? [RESOLVIDO]

Paulo
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).

EDIT: Antes que eu esqueça: programação com GOTO desordenado chama-se PROGRAMAÇÃO ESPAGUETE.
https://pt.wikipedia.org/wiki/C%C3%B3digo_espaguete


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?


  


14. Re: GOTO é portável? [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 11/02/2016 - 12:29h

Ótimo tópico! Ocorreu uma discussão saudável, vimos a importância do goto e ninguém saiu ferido [rsrs].

Prefere seu espaguete à bolonhesa, calabresa, quatro-queijos, ou carbonara?


Com calabresa, por gentilesa ;)

[]'s

T+

--

Att,

Thiago Henrique Hüpner

(Mensagem scaneada pelo antivírus........ops! não precisa, afinal eu uso Linux!)



15. Re: GOTO é portável? [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 11/02/2016 - 23:40h

Vou conferir a opção A do SAVE.

O meu é com quatro queijos.

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden




01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts