Linguagem Algol

Grupo responsável:

  • Gabriel Barros de Paula
  • Walter Breno Theves

Tudo sobre a Linguagem Algol :-)

História

Algol é uma das muitas linguagens de alto nível desenvolvidas especificamente para programas científicos. Ela começou a ser desenvolvida em 1957 por um comitê internacional na Europa, e através de um documento foi definida como ALGOL 58, e tardiamente evoluiu para ALGOL 60 e ALGOL 68. Para desenvolver o Algol 58, John Backus desenvolveu a Forma Normal de Backus, método este que foi revisado e exandido por Peter Naur. A Forma agora passava a chamar-se Forma de Backus-Naur.

A independência da máquina pelo ALGOL permitiu que os designers fossem mais criativos, porém tornou sua implementação muito mais difícil. Embora o ALGOL nunca atingiu o nível de popularidade de FORTRAN e COBOL, é considerada a linguagem mais importante de sua era em termos de influência em futuras linguagens. As estruturas léxicas e sintáticas do ALGOL tornaram-se tão populares que quase todas as linguagens desenvolvidas posteriormente eram referidas como “tipo ALGOL”.

A definição do ALGOL 60 foi um evento-chave na história das linguagens de programação. Foi a primeira linguagem de Programação estruturada.

Perspectiva histórica

O ALGOL 60 foi o resultado de esforços para projetar uma linguagem universal para aplicações científicas. O Fortran se tornou uma realidade em 1957, e diversas outras linguagens de alto nível haviam sido desenvolvidas. A proliferação de linguagens fez com que a comunicação entre usuários se tornasse difícil. Além disso, as novas linguagens estavam crescendo em torno de arquiteturas únicas, algumas para os computadores UNIVAC, outras para as máquinas da série IBM 700. Em resposta a essa proliferação de linguagens, diversos dos principais usuários de computadores nos Estados Unidos, incluindo o SHARE ( o grupo de usuários científicos da IBM ) e o USE (UNIVAC Scientific Exchange, o grupo de grande escala de usuários científicos da UNIVAC), submeteu uma petição à ACM (Association for Computing Machinery) em 10 de maio de 1957, para formar um comitê para estudar e recomendar ações para uma linguagem de programação científica independente de linguagem de programação. Apesar de o Fortran poder ser tal candidato, ele não se tornaria uma linguagem universal, já que era de propriedade única da IBM.

Previamente, em 1955, a GAMM (SOciedade de Matemática e Mecânica Aplicada, na sigla em alemão) formou um comitê para projetar uma linguagem algorítmica universal, independente de máquina. O desejo por essa nova linguagem era em parte devido ao medo dos europeus de serem dominados pela IBM. No final de 1957, entretanto, a aparição de diversas linguagens de alto nível nos Estados Unidos convenceu o subcomitê da GAMM de que seus esforços precisavam ser ampliados para incluir os americanos, e uma carta convite foi enviada à ACM. Em abril de 1958, após Fritz Bauer, da GAMM, apresentar uma proposta formal à ACM, os dois grupos concordaram oficialmente em desenvolver uma linguagem conjunta.

Processo do projeto inicial

A GAMM e a ACM enviaram cada uma quatro membros para a primeira reunião de projeto. A reunião, realizada em Zurique de 27 de maio a 1º de junho de 1958, começou com os seguintes objetivos para a nova linguagem:

  • A sintaxe da linguagem deve ser o mais próxima possível da notação padrão matemática e os programas devem ser legíveis, com poucas explicações adicionais.
  • Deve ser possível usar a linguagem para a descrição de algoritmos em publicações.
  • Programas na nova linguagem devem ser mecanicamente traduzíveis em código de máquina.

O primeiro objetivo indica que a nova linguagem seria usada para programação científica, a principal área da aplicação de computadores na época. O segundo era algo inteiramente novo nos negócios em computação. O último é uma necessidade [obvia para qualquer linguagem de programação.

A reunião de Zurique foi bem-sucedida em produzir uma linguagem que atendesse os objetivos levantados, mas o processo do projeto necessitava de inúmeros comprometimentos, tanto entre indivíduos quanto entre os dois lados do Atlântico. Em alguns casos, não era tanto em torno de grandes questões, mas em termos de esferas de influência. A questão de usar uma vírgula (o método europeu) ou um ponto (o método americano) para um ponto decimal é um exemplo.

Visão geral do ALGOL 58

A linguagem projetada na reunião em Zurique foi nomeada de Linguagem Algorítmica Internacional (IAL - International Algorithmic Language). Foi sugerido durante o projeto que ela se chame ALGOL, do inglês ALGOrithmic Language, mas o nome foi rejeitado porque ele não refletia o escopo internacional do comitê. Durante o ano seguinte, entretanto, o nome foi mudado para ALGOL, e a linguagem ficou conhecida como ALGOL 58.

De muitas formas, o ALGOL 58 era um descendente do Fortran, o que é bastante natural. Ele generalizou muitos dos recursos do Fortran e adicionou novas construções e conceitos. Algumas das generalizações eram relativas ao objetivo de não amarrar a linguagem a nenhuma máquina em particular e outras eram tentativas de tornar a linguagem mais flexível e poderosa. Uma rara combinação de simplicidade e elegância emergiu desse esforço.

O ALGOL 58 formalizou o conceito de tipo de dados, apesar de apenas variáveis que não fossem de ponto flutuante precisarem ser explicitamente declaradas. Ela adicionou a ideia de sentenças compostas, que a maioria das linguagens subsequente incorporou. Alguns dos recursos do Fortran que foram generalizados são: os identificadores podem ter qualquer tamanho, em oposição à restrição do Fortran I de nomes de identificadores com até seis caracteres; qualquer número de dimensões de um vetor era permitido, diferentemente da limitação do Fortran I de até três dimensões; o limite inferior dos vetores podia ser especificado pelo programador, enquanto no Fortran ele era implicitamente igual a 1; sentenças de seleção aninhadas eram permitidas, o que não era o caso no Fortran I.

O ALGOL 58 adquiriu o operador de atribuição de uma maneira um tanto usual. Zuse usava o formato

expressão ⇒ variável

para a sentença de atribuição em Plankalkül. Apesar de Plankalkül não ter sido ainda publicada, alguns dos membros europeus do comitê do ALGOL 58 estavam familiarizados com a linguagem. O comitê se interessou com a forma de atribuição em Plankalkül, mas devido aos argumentos sobre limitações do conjunto de caracteres, o símbolo maior foi trocado pelo sinal de dois pontos. Então, em grande parte por causa da insitência dos americanos, toda a sentença foi modificada para ser equivalente ao formato do Fortran

variável := expressão

Os europeus preferiam a forma oposta, mas isso seria o inverso do Fortran.

Recepção do relatório do ALGOL 58

A publicação do relatório do ALGOL 58 (Perlis e Samelson, 1958), em dezembro de 1958, foi recebida com uma boa dose de entusiasmo. Nos Estados Unidos, a nova linguagem foi vista mais como uma coleção de ideias para o projeto de linguagens de programação do que uma linguagem padrão universal. Na verdade, o relatório do ALGOL 58 não pretendia ser um produto finalizado, mas um documento preliminar para discussão internacional. Independentemente disso, três grandes esforços de projeto e implementação foram feitos usando o relatório como base. Na Universidade de Michigan, a linguagem MAD nasceu (Arden et al., 1961). O Grupo de Eletrônica Naval dos Estados Unidos produziu a linguagem NELIAC (Huskey et al., 1963). Na System Development Corporation, a linguagem JOVIAL foi projetada e implementada (Shaw, 1963). JOVIAL, um acrônimo para Jules' Own Version of the International Algebraic Language (Versão de Jules para a Linguagem Internacional Algébrica), representa a única linguagem baseada no ALGOL 58 a atingir um amplo uso. (Jules era Jules I. Schwartz, um dos projetistas de JOVIAL). JOVIAL se tornou bastante usada porque foia a linguagem científica oficial para a Força Aérea Americana por um quarto de século.

O resto da comunidade da computação nos Estados Unidos não estava tão gentil com a nova linguagem. Em um primeiro momento, tanto a IBM quanto seu maior grupo de usuários científicos, o SHARE, pareciam ter abraçado o ALGOL 58. A IBM começou uma implementação logo após o relatório ter sido publicado, e o SHARE formou um subcomitê, SHAREL IAL, para estudar a linguagem. Logo a seguir, o subcomitê recomendou que a ACM padronizasse o ALGOL 58 e que a IBM o implementasse para toda a série de computadores IBM 700. O entusiasmo durou pouco. Na primavera de 1959, tanto a IBM quanto o SHARE, com sua experiência com o Fortran, já haviam tido sofrimento e despesas sificientes para iniciar uma nova linguagem, tanto em termos de desenvolver e usar os compiladores de primeira geração quanto de treinar os usuários na nova linguagem e persuadi-los a usá-la. Na metade de 1959, tanto a IBM quanto o SHARE haviam desenvolvido um interesse próprio pelo Fortran, levando a decisão de mantê-lo como a linguagem científica para as máquinas IBM da série 700, abandonando o ALGOL 58.

O processo do projeto do ALGOL 60

Durante 1959, o ALGOL 58 foi debatido intensamente tanto na Europa quanto nos Estados Unidos. Um grande número de modificações e adições foi publicado no ALGOL Bulletin europeu e na Communications of the ACM. Um dos eventos mais importantes de 1959 foi a apresentação do trabalho do comitê de Zurique na Conferência Internacional de Processamento de Informação, na qual Backus introduziu sua notação para descrever a sintaxe de linguagens de programação, posteriormente conhecida como BNF (do inglês - Backus-Naur Form).

Em janeiro de 1960, a segunda reunião do ALGOL foi realizada, dessa vez em Paris, com o objetivo de debater as 80 sugestões submetidas para consideração. Peter Naur da Dinamarca havia se envolvido enormemente no desenvolvimento do ALGOL, apesar de não ser um membro do grupo de Zurique. Foi Naur que criou e publicou o ALGOL Bulletin. Ele gastou bastante de tempo estudando o artigo de Backus que introduzia a BNF e decidiu que ela deveria ser usada para descrever formalmente os resultados da reunião de 1960. Após ter feito algumas mudanças relativamente pequenas à BNF, ele escreveu uma descrição da nova linguagem proposta em BNF e entregou para os membros do grupo de 1960 no início da reunião.

Visão geral do ALGOL 60

Apesar de a reunião de 1960 ter durado apenas seis dias, as modificações feitas no ALGOL 58 foram drásticas. Dentre os mais importantes avanços, estavam:

  • O conceitos de estruturas de bloco foi introduzido, o que permitia ao programador localizar partes do programa introduzindo novos ambientes ou escopos de dados.
  • Duas formas diferentes de passagem de parâmetros a subprogramas foram permitidas: por valor e por nome.
  • Foi permitido aos procedimentos serem recursivos. A descrição do ALGOL 58 não era clara em relação a essa questão. Note que, apesar de essa recursão ser nova para as linguagens imperativas, LISP já fornecia funções recursivas em 1959.
  • Vetores dinâmicos na pilha eram permitidos. Um vetor dinâmico na pilha é um no qual a faixa ou faixas de índices são especificados por variáveis, de forma que seu tamanho é determinado no momento em que o armazenamento é alocado, o que acontece quando a declaração é alcançada durante a execução.

Diversos recursos que poderiam ter gerado um grande impacto no sucesso ou na falha da linguagem foram propostos, mas rejeitados. O mais importante deles eram sentenças de entrada e saída com formatação, omitidas porque se pensava que seriam muito dependentes da máquina.

O relatório do ALGOL 60 foi publicado em maio de 1960 (Naur, 1960). Algumas ambiguidades ainda permaneceram na descrição da linguagem, e uma terceira reunião foi marcada para abril de 1962, em Roma, para resolver esses problemas. Nessa reunião, o grupo tratou apenas dos problemas; nenhuma adição a linguagem foi permitida. Os resultados foram publicados sob o título 'Revised Report on the Algorithmic Language ALGOL 60 (Backus et al., 1963)'.

Avaliação

De algumas formas, o ALGOL 60 foi um grande sucesso. De outras, um imenso fracasso. Foi bem- sucedido em se tornar, quase imediatamente, a única maneira formal aceitável de comunicar algoritmos na literatura em computação - e permaneceu assim por mais de 20 anos. Todas as linguagens de programação imperativas desde 1960 devem algo ao ALGOL 60. De fato, muitas são descendentes diretos ou indiretos, como PL/I, SIMULA 67, ALGOL 68, C, Pascal, Ada, C++ e Java.

O esforço de projeto do ALGOL 58/ALGOL 60 incluiu uma longa lista de primeiras vezes. Foi a primeira vez que um grupo internacional tentou projetar uma linguagem de programação, a primeira linguagem projetada para ser independente de máquina e também a primeira cuja sintaxe foi formalmente descrita. O sucesso do uso do formalismo BNF iniciou diversos campos importantes na ciência da computação: linguagens formais, teoria de análise sintática e projeto de compilador baseado em BNF. Finalmente, a estrutura do ALGOL 60 afetou as arquiteturas de máquina. No efeito mais contundente disso, uma extensão foi usada como a linguagem de sistema de uma série de computadores de grande escala, as máquinas Borroughs B5000, B6000 e B7000, projetadas com uma pilha de hardware para implementar eficientemente a estrutura de bloco e os subprogramas recursivos da linguagem.

Do outro lado da moeda, o ALGOL 60 nunca atingiu um uso disseminado nos Estados Unidos. Mesmo na Europa, onde era mais popular, nunca se tornou a linguagem dominante. Existem diversas razões para sua falta de aceitação. Por um lado, alguns dos recursos se mostraram muito flexíveis - fizeram com que o entendimento da linguagem fosse mais difícil e a implementação ineficiente. O melhor exemplo disso é o método de passagem de parâmetros por nome para os subprogramas. As dificuldades para implementar o ALGOL 60 foram evidenciadas por Rutishauser em 1967, que disse que poucas implementações (se é que alguma) incluíam a linguagem ALGOL 60 completa (Rutishauser, 1967, p.8).

A falta de sentenças de entrada e saída na linguagem era outra razão para sua falta de aceitação. A entrada e saída dependente de implementação fez os programas terem uma portabilidade ruim para outros computadores.

Uma das mais importantes contribuições à ciência da computação associada ao ALGOL, a BNF, também foi um fator. Apesar de a BNF ser agora considerada uma maneira simples e elgante de descrição de sintaxe, para o mundo de 1960 ela parecia estranha e complicada.

Finalmente, apesar de haver muitos outros problemas, o forte estabelecimento do Fortran entre os usuários e a falta de suporte da IBM foram provavelmente os fatores mais importantes na falha do ALGOL 60 em ter seu uso disseminado.

O esforço do ALGOL 60 nunca foi realmente completo, no sentido de que ambiguidades e obscuridades sempre fizeram parte da descrição da linguagem (Knuth, 1967).

A seguir, é mostrado um exemplo de um programa em ALGOL:

 
algol-1-trabalho.txt · Last modified: 2012/03/19 22:22 by clp · [Old revisions]