ALGOL 60 - 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 ; 61 anos atrás (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 begine endpara 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):

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  [ fr ] IBM 7090
ALGOL 60 1965 Claude Pair  [ fr ] 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 :

  • ALPHA
  • ARRAY
  • BEGIN
  • BOOLEAN
  • COMMENT
  • CONTINUE
  • DIRECT
  • DO
  • DOUBLE
  • ELSE
  • END
  • EVENT
  • FALSE
  • FILE
  • FOR
  • FORMAT
  • GO
  • IF
  • INTEGER
  • LABEL
  • LIST
  • LONG
  • OWN
  • POINTER
  • PROCEDURE
  • REAL
  • STEP
  • SWITCH
  • TASK
  • THEN
  • TRUE
  • UNTIL
  • VALUE
  • WHILE
  • ZIP

Existem 71 desses identificadores restritos na sublinguagem de grandes sistemas Burroughs padrão:

  • ACCEPT
  • AND
  • ATTACH
  • BY
  • CALL
  • CASE
  • CAUSE
  • CLOSE
  • DEALLOCATE
  • DEFINE
  • DETACH
  • DISABLE
  • DISPLAY
  • DIV
  • DUMP
  • ENABLE
  • EQL
  • EQV
  • EXCHANGE
  • EXTERNAL
  • FILL
  • FORWARD
  • GEQ
  • GTR
  • IMP
  • IN
  • INTERRUPT
  • IS
  • LB
  • LEQ
  • LIBERATE
  • LINE
  • LOCK
  • LSS
  • MERGE
  • MOD
  • MONITOR
  • MUX
  • NEQ
  • NO
  • NOT
  • ON
  • OPEN
  • OR
  • OUT
  • PICTURE
  • PROCESS
  • PROCURE
  • PROGRAMDUMP
  • RB
  • READ
  • RELEASE
  • REPLACE
  • RESET
  • RESIZE
  • REWIND
  • RUN
  • SCAN
  • SEEK
  • SET
  • SKIP
  • SORT
  • SPACE
  • SWAP
  • THRU
  • TIMES
  • TO
  • WAIT
  • WHEN
  • WITH
  • WRITE

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

links externos