ALGOL 60 - ALGOL 60
Paradigmas | procedimental , imperativo , estruturado |
---|---|
Família | ALGOL |
Projetado por | Backus , Bauer , Green , Katz , McCarthy , Naur , Perlis , Rutishauser , Samelson , van Wijngaarden , Vauquois , Wegstein , Woodger |
Apareceu pela primeira vez | 1960 |
Disciplina de digitação | Estático , forte |
Alcance | Lexical |
Influenciado por | |
ALGOL 58 | |
Influenciado | |
A maioria das linguagens imperativas subsequentes (as chamadas linguagens semelhantes a ALGOL ), por exemplo , Simula , CPL , Pascal , Ada , C |
ALGOL 60 (abreviação de Algorithmic Language 1960 ) é um membro da família ALGOL de linguagens de programação de computador. Ele seguiu em frente com o ALGOL 58, que introduziu blocos de código e os pares begin
e end
para delimitá-los, representando um avanço fundamental no surgimento da programação estruturada . ALGOL 60 foi a primeira linguagem a implementar definições de funções aninhadas com escopo léxico . Deu origem a muitas outras linguagens de programação, incluindo CPL , Simula , BCPL , B , Pascal e C . Praticamente todos os computadores da época tinham uma linguagem de programação de sistemas baseada nos conceitos do ALGOL 60.
Niklaus Wirth baseou seu próprio ALGOL W no ALGOL 60 antes de começar a desenvolver o Pascal . Algol-W foi planejado para ser o ALGOL de próxima geração, mas o comitê do ALGOL 68 decidiu por um design que era mais complexo e avançado, em vez de um ALGOL 60 simplificado e limpo. As versões oficiais do ALGOL são nomeadas de acordo com o ano em que foram publicadas pela primeira vez. Algol 68 é substancialmente diferente do Algol 60 e foi parcialmente criticado por ser assim, de modo que em geral "Algol" se refere aos dialetos de Algol 60.
estandardização
ALGOL 60 - com COBOL - foram as primeiras linguagens a buscar padronização.
- Linguagens de programação ISO 1538: 1984 - Algol 60 (estabilizado)
- ISO / TR 1672: 1977 Representação de hardware dos símbolos básicos do ALGOL ... (agora retirado)
História
ALGOL 60 foi usado principalmente por cientistas da computação de pesquisa nos Estados Unidos e na Europa. Seu uso em aplicações comerciais foi dificultado pela ausência de recursos padrão de entrada / saída em sua descrição e pela falta de interesse na linguagem por grandes fornecedores de computadores. O ALGOL 60, entretanto, se tornou o padrão para a publicação de algoritmos e teve um efeito profundo no desenvolvimento futuro da linguagem.
John Backus desenvolveu o método de forma normal Backus para descrever linguagens de programação especificamente para ALGOL 58. Ele foi revisado e expandido por Peter Naur para ALGOL 60 e, por sugestão de Donald Knuth , renomeado para forma Backus-Naur .
Peter Naur: "Como editor do Boletim ALGOL, fui atraído para as discussões internacionais da língua e fui selecionado para ser membro do grupo europeu de design de linguagem em novembro de 1959. Nessa qualidade, fui o editor do relatório ALGOL 60, produzido como resultado da reunião ALGOL 60 em Paris em janeiro de 1960. "
As seguintes pessoas participaram da reunião em Paris (de 11 a 16 de janeiro):
- Friedrich L. Bauer , Peter Naur , Heinz Rutishauser , Klaus Samelson , Bernard Vauquois , Adriaan van Wijngaarden e Michael Woodger (da Europa)
- John W. Backus , Julien Green , Charles Katz , John McCarthy , Alan J. Perlis e Joseph Henry Wegstein (dos EUA).
Alan Perlis deu uma descrição vívida da reunião: "As reuniões foram exaustivas, intermináveis e estimulantes. A química de o 13 foi excelente. "
A linguagem originalmente não incluía recursão . Foi inserido no caderno de especificações à última hora, contra a vontade de alguns membros da comissão.
ALGOL 60 inspirou muitos idiomas que o seguiram. Tony Hoare observou: "Esta é uma linguagem tão à frente de seu tempo que não foi apenas um aprimoramento de suas predecessoras, mas também de quase todos os seus sucessores."
Cronograma de implementações do ALGOL 60
Até o momento, houve pelo menos 70 acréscimos, extensões, derivações e sublinguagens do Algol 60.
Nome | Ano | Autor | Estado | Descrição | CPU alvo | ||
---|---|---|---|---|---|---|---|
X1 ALGOL 60 | Agosto 1960 | Edsger W. Dijkstra e Jaap A. Zonneveld | Holanda | Primeira implementação do ALGOL 60 | Electrologica X1 | ||
Algol | 1960 | Edgar T. Irons | EUA | Algol 60 | CDC 1604 | ||
Burroughs Algol (várias variantes) |
1961 | Burroughs Corporation (com participação de Hoare, Dijkstra e outros) | EUA | Base dos computadores Burroughs (e agora baseados em MCP da Unisys ) |
Grandes sistemas Burroughs e seus médios também. |
||
Caso ALGOL | 1961 | EUA | Simula foi originalmente contratado como uma extensão de simulação do Case ALGOL | UNIVAC 1107 | |||
GOGOL | 1961 | William M. McKeeman | EUA | Para sistema de compartilhamento de tempo ODIN | PDP-1 | ||
DASK ALGOL | 1961 | Peter Naur , Jørn Jensen | Dinamarca | Algol 60 | DASK em Regnecentralen | ||
SMIL ALGOL | 1962 | Torgil Ekman , Carl-Erik Fröberg | Suécia | Algol 60 | SMIL na Lund University | ||
GIER ALGOL | 1962 | Peter Naur , Jørn Jensen | Dinamarca | Algol 60 | GIER em Regnecentralen | ||
Dartmouth ALGOL 30 | 1962 | Thomas Eugene Kurtz et al. | EUA | LGP-30 | |||
Alcor Mainz 2002 | 1962 | Ursula Hill-Samelson, Hans Langmaack | Alemanha | Siemens 2002 | |||
ALCOR-ILLINOIS 7090 | 1962 |
Manfred Paul, Hans Rüdiger Wiehle, David Gries e Rudolf Bayer | EUA, Alemanha Ocidental |
Algol 60 implementado em Illinois e TH München , 1962-1964 |
IBM 7090 | ||
USS 90 Algol | 1962 | L. Petrone | Itália | ||||
Elliott ALGOL | 1962 | CAR Hoare | Reino Unido | Discutido em sua palestra sobre o Prêmio Turing de 1980 | Elliott 803 e Elliott 503 | ||
Algol 60 | 1962 | Roland Strobel | Alemanha Oriental | Implementado pelo Instituto de Matemática Aplicada, Academia Alemã de Ciências de Berlim | Zeiss-Rechenautomat ZRA 1 | ||
Algol Translator | 1962 | G. van der Mey e WL van der Poel | Holanda | Staatsbedrijf der Posterijen, Telegrafie en Telefonie | ZEBRA | ||
Kidsgrove Algol | 1963 | FG Duncan | Reino Unido | Companhia Elétrica Inglesa KDF9 | |||
VALGOL | 1963 | Val Schorre | EUA | Um teste do compilador do compilador META II | |||
FP6000 Algol | 1963 | Roger Moore | Canadá | escrito para Saskatchewan Power Corp | FP6000 | ||
Pedra de amolar | 1964 | Brian Randell e Lawford John Russell | Reino Unido | Divisão de Energia Atômica da English Electric Company. Precursor para implementações Ferranti Pegasus , National Physical Laboratories ACE e English Electric DEUCE . | Companhia Elétrica Inglesa KDF9 | ||
ALGOL 60 | 1964 | Jean-Claude Boussard | França | Institut d'informatique et mathématiques appliquées de Grenoble | IBM 7090 | ||
ALGOL 60 | 1965 | Claude Pair | França | Centre de calcul de la Faculté des Sciences de Nancy | IBM 1620 | ||
NU ALGOL | 1965 | Noruega | UNIVAC | ||||
Algol 60 | 1965 | FEJ Kruseman Aretz | Holanda | Compilador MC para EL-X8 | Electrologica X8 | ||
ALGEK | 1965 | URSS | Minsk-22 | АЛГЭК, baseado no suporte ALGOL-60 e COBOL , para tarefas econômicas | |||
MALGOL | 1966 | publ. A. Viil, M Kotli & M. Rakhendi, | SSR da Estônia | Minsk-22 | |||
ALGAMS | 1967 | Grupo GAMS (ГАМС, группа автоматизации программирования для машин среднего класса), cooperação de Comecon Academies of Science | Comecon | Minsk-22 , posteriormente ES EVM , BESM | |||
ALGOL / ZAM | 1967 | Polônia | Computador ZAM polonês | ||||
Algol Chinês | 1972 | China | Caracteres chineses, expressos por meio do sistema Symbol | ||||
DG / L | 1972 | EUA | Família de computadores DG Eclipse | ||||
NASE | 1990 | Erik Schoenfelder | Alemanha | Intérprete | Linux e MS Windows | ||
MARST | 2000 | Andrew Makhorin | Rússia | Tradutor Algol-60 para C | Todas as CPUs suportadas pela GNU Compiler Collection; MARST faz parte do projeto GNU |
Os dialetos de Burroughs incluíam dialetos de programação de sistema especiais, como ESPOL e NEWP .
Propriedades
O ALGOL 60, conforme definido oficialmente, não tinha recursos de E / S; as implementações definiam suas próprias de maneiras que raramente eram compatíveis umas com as outras. Em contraste, o ALGOL 68 ofereceu uma extensa biblioteca de recursos de transput (linguagem ALGOL 68 para entrada / saída).
ALGOL 60 forneceu duas estratégias de avaliação para passagem de parâmetro : a chamada por valor comum e chamada por nome . A declaração de procedimento especificada, para cada parâmetro formal, que deveria ser usado: valor especificado para chamada por valor e omitido para chamada por nome. Chamada por nome tem certos efeitos em contraste com chamada por referência . Por exemplo, sem especificar os parâmetros como valor ou referência , é impossível desenvolver um procedimento que troque os valores de dois parâmetros se os parâmetros reais passados forem uma variável inteira e uma matriz indexada por essa mesma variável inteira . Pense em passar um ponteiro para trocar (i, A [i]) em uma função. Agora que toda vez que o swap é referenciado, ele é reavaliado. Diga i: = 1 e A [i]: = 2, então toda vez que o swap for referenciado, ele retornará a outra combinação dos valores ([1,2], [2,1], [1,2] e assim sobre). Uma situação semelhante ocorre com uma função aleatória passada como argumento real.
Chamada por nome é conhecida por muitos designers de compiladores pelos " thunks " interessantes que são usados para implementá-la. Donald Knuth desenvolveu o " teste man ou menino " para separar compiladores que implementaram corretamente "referências de recursão e não locais". Este teste contém um exemplo de chamada por nome.
ALGOL 60 Palavras reservadas e identificadores restritos
Existem 35 palavras reservadas no sub-idioma padrão dos grandes sistemas da Burroughs :
|
|
|
|
|
Existem 71 desses identificadores restritos na sublinguagem de grandes sistemas Burroughs padrão:
|
|
|
|
|
e também os nomes de todas as funções intrínsecas.
Operadores padrão
Prioridade | Operador | |
---|---|---|
primeira aritmética |
primeiro | ↑ (potência) |
segundo | ×, / (real), ÷ (inteiro) | |
terceiro | +, - | |
segundo | <, ≤, =, ≥,>, ≠ | |
terceiro | ¬ (não) | |
quarto | ∧ (e) | |
quinto | ∨ (ou) | |
sexto | ⊃ (implicação) | |
sétimo | ≡ (equivalência) |
Exemplos e problemas de portabilidade
Comparações de amostra de código
ALGOL 60
procedure Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k); value n, m; array a; integer n, m, i, k; real y; comment The absolute greatest element of the matrix a, of size n by m, is transferred to y, and the subscripts of this element to i and k; begin integer p, q; y := 0; i := k := 1; for p := 1 step 1 until n do for q := 1 step 1 until m do if abs(a[p, q]) > y then begin y := abs(a[p, q]); i := p; k := q end end Absmax
As implementações diferem em como o texto em negrito deve ser escrito. A palavra 'INTEGER', incluindo as aspas, deve ser usada em algumas implementações no lugar do inteiro , acima, designando -o assim como uma palavra-chave especial.
A seguir está um exemplo de como produzir uma tabela usando Elliott 803 ALGOL:
FLOATING POINT ALGOL TEST' BEGIN REAL A,B,C,D' READ D' FOR A:= 0.0 STEP D UNTIL 6.3 DO BEGIN PRINT PUNCH(3),££L??' B := SIN(A)' C := COS(A)' PRINT PUNCH(3),SAMELINE,ALIGNED(1,6),A,B,C' END' END'
Família ALGOL 60
Como o ALGOL 60 não tinha recursos de E / S, não há um programa portátil hello world no ALGOL. O programa a seguir pode (e ainda irá) compilar e rodar em uma implementação ALGOL para um mainframe Unisys A-Series e é uma simplificação direta do código tirado do The Language Guide da University of Michigan -Dearborn Computer and Information Science Department Hello world ! Página do programa de exemplo ALGOL.
BEGIN FILE F(KIND=REMOTE); EBCDIC ARRAY E[0:11]; REPLACE E BY "HELLO WORLD!"; WRITE(F, *, E); END.
Um programa mais simples usando um formato embutido:
BEGIN
FILE F(KIND=REMOTE);
WRITE(F, <"HELLO WORLD!">);
END.
Um programa ainda mais simples usando a instrução Display:
BEGIN DISPLAY("HELLO WORLD!") END.
Um exemplo alternativo, usando E / S Elliott Algol é o seguinte. Elliott Algol usou caracteres diferentes para "aspas de string aberta" e "aspas de string fechada", representados aqui por ' e ' .
program HiFolks;
begin
print ‘Hello world’
end;
Aqui está uma versão para o Elliott 803 Algol (A104) O Elliott 803 padrão usava fita de papel de 5 furos e, portanto, só tinha letras maiúsculas. O código não tinha caracteres de aspas, então £ (sinal de libra) foi usado para aspas abertas e ? (ponto de interrogação) para citação próxima. Seqüências especiais foram colocadas entre aspas (por exemplo, £ £ L ?? produziu uma nova linha no teleimpressor).
HIFOLKS' BEGIN PRINT £HELLO WORLD£L??' END'
A versão I / O Algol da série ICT 1900 permitia a entrada de fita de papel ou cartão perfurado. O modo 'cheio' de fita de papel permite letras minúsculas. A saída foi para uma impressora de linha. Observe o uso de '(', ')' e%.
'PROGRAM' (HELLO) 'BEGIN' 'COMMENT' OPEN QUOTE IS '(', CLOSE IS ')', PRINTABLE SPACE HAS TO BE WRITTEN AS % BECAUSE SPACES ARE IGNORED; WRITE TEXT('('HELLO%WORLD')'); 'END' 'FINISH'
Veja também
Referências
Leitura adicional
- Dijkstra, Edsger W. (1961). "Tradução do ALGOL 60: Um tradutor do ALGOL 60 para o X1 e fazendo um tradutor para o ALGOL 60 (PDF) (Relatório técnico). Amsterdam: Mathematisch Centrum. 35.
- Randell, Brian ; Russell, Lawford John (1964). Implementação do ALGOL 60: A tradução e uso de programas do ALGOL 60 em um computador . Academic Press. OCLC 526731 .O design do Whetstone Compiler . Uma das primeiras descrições publicadas de implementação de um compilador. Veja os documentos relacionados: Whetstone Algol Revisited e The Whetstone KDF9 Algol Translator por Brian Randell
links externos
- Relatório revisado sobre o Algorithmic Language Algol 60 por Peter Naur, et al. Definição ALGOL
- Um resumo da sintaxe BNF do ALGOL 60
- "The Emperor's Old Clothes" - discurso de Hoare no Prêmio ACM Turing de 1980, que discute a história do ALGOL e seu envolvimento
- MARST , um tradutor gratuito de Algol para C
- Uma implementação do ALGOL 60 para o FP6000 Arquivado em 2020-07-25 na Wayback Machine Discussão de alguns problemas de implementação.
- Naur, Peter (agosto de 1978). "O lado europeu da última fase de desenvolvimento do ALGOL 60" . Avisos ACM SIGPLAN . 13 (8): 15–44. doi : 10.1145 / 960118.808370 . S2CID 15552479 .
- A Universidade de Edimburgo escreveu compiladores para Algol60 (posteriormente atualizados para Algol60M) com base em seus compiladores Atlas Autocode inicialmente inicializados do Atlas para o KDF-9. Os compiladores de Edimburgo geraram código para o ICL1900, o ICL4 / 75 (um clone do IBM360) e o ICL2900. Aqui está o BNF para Algol60 Arquivado em 2020-05-15 na Máquina Wayback e a fonte do compilador ICL2900 Arquivado em 2020-05-15 na Máquina Wayback , documentação da biblioteca Arquivada em 2020-05-15 na Máquina Wayback e um conjunto de testes considerável Arquivado em 2020-05-15 na Wayback Machine, incluindo os testes de Brian Wichmann. Arquivado em 2020-05-15 na Wayback Machine Também há um tradutor de nível de fonte Algol60 para Atlas Autocode bastante superficial. Arquivado em 2020-05-15 na Wayback Machine .
- Eric S. Raymond 's Retrocomputing Museu , entre outros, um link para o intérprete NASE Algol-60 escrito em C.
- O intérprete NASE
- Histórias do B5000 e das pessoas que estavam lá: um computador ALGOL dedicado [1] , [2]
-
Hermann Bottenbruch (1961). “Estrutura e Uso do ALGOL 60” . doi : 10.2172 / 4020495 . Cite journal requires
|journal=
(help) - NUMAL Uma biblioteca de procedimentos numéricos no ALGOL 60 desenvolvida no The Stichting Centrum Wiskunde & Informatica (sucessor legal do Stichting Mathematisch Centrum) proprietário legal .
- Recursos do Algol 60: tradutores, documentação, programas
- Algol-60 incluído no Racket.