stringtranslate.com

ALGOL 60

ALGOL 60 (abreviatura de Algorithmic Language 1960 ) es un miembro de la familia ALGOL de lenguajes de programación informática . Fue la continuación de ALGOL 58, que había introducido bloques de código y los beginpares endy para delimitarlos, lo que representó un avance clave en el auge de la programación estructurada . ALGOL 60 fue uno de los primeros lenguajes que implementó definiciones de funciones (que podían invocarse de forma recursiva). Las definiciones de funciones de ALGOL 60 podían anidarse unas dentro de otras (lo que fue introducido por primera vez por cualquier lenguaje de programación), con alcance léxico . Dio lugar a muchos otros lenguajes, incluidos CPL , PL/I , Simula , BCPL , B , Pascal y C. Prácticamente todos los ordenadores de la época tenían un lenguaje de programación de sistemas basado en los conceptos de ALGOL 60.

Niklaus Wirth basó su propio ALGOL W en ALGOL 60 antes de pasar a desarrollar Pascal . Algol-W estaba destinado a ser la próxima generación de ALGOL, pero el comité de ALGOL 68 decidió un diseño más complejo y avanzado en lugar de un ALGOL 60 simplificado y depurado. Las versiones oficiales de ALGOL reciben su nombre del año en que se publicaron por primera vez. ALGOL 68 es sustancialmente diferente de ALGOL 60 y fue criticado en parte por serlo, por lo que en general "ALGOL" se refiere a dialectos de ALGOL 60.

Normalización

ALGOL 60 – junto con COBOL – fueron los primeros lenguajes en buscar la estandarización.

Historia

ALGOL 60 fue utilizado principalmente por científicos informáticos de investigación en Estados Unidos y Europa. Su uso en aplicaciones comerciales se vio obstaculizado por la ausencia de facilidades de entrada/salida estándar en su descripción y la falta de interés en el lenguaje por parte de los grandes fabricantes de computadoras. Sin embargo, ALGOL 60 se convirtió en el estándar para la publicación de algoritmos y tuvo un profundo efecto en el desarrollo futuro de los lenguajes.

John Backus desarrolló el método de forma normal de Backus para describir lenguajes de programación específicamente para ALGOL 58. Fue revisado y ampliado por Peter Naur para ALGOL 60 y, por sugerencia de Donald Knuth, renombrado como forma Backus–Naur . [1]

Peter Naur: "Como editor del Boletín ALGOL, me involucré en los debates internacionales sobre el lenguaje y fui seleccionado para ser miembro del grupo de diseño del lenguaje europeo en noviembre de 1959. En esta función, fui el editor del informe ALGOL 60, elaborado como resultado de la reunión ALGOL 60 en París en enero de 1960". [2]

A la reunión en París (del 11 al 16 de enero) asistieron las siguientes personas:

Alan Perlis describió con gran viveza la reunión: "Las reuniones eran agotadoras, interminables y estimulantes. Uno se enfadaba cuando sus buenas ideas eran descartadas junto con las malas de los demás. Sin embargo, la diligencia persistió durante todo el período. La química entre los 13 era excelente".

El lenguaje originalmente no incluía la recursión . Se insertó en la especificación en el último momento, en contra de los deseos de algunos miembros del comité. [3]

ALGOL 60 inspiró a muchos lenguajes que lo siguieron. Tony Hoare comentó: "He aquí un lenguaje tan adelantado a su tiempo que no sólo fue una mejora respecto de sus predecesores sino también respecto de casi todos sus sucesores". [4] [5]

Cronología de la implementación de ALGOL 60

Hasta la fecha ha habido al menos 70 ampliaciones, extensiones, derivaciones y sublenguajes de ALGOL 60. [6]

Los dialectos de Burroughs incluían dialectos de programación de sistemas especiales como ESPOL y NEWP .

Propiedades

ALGOL 60, tal como se definió oficialmente, no tenía funciones de E/S; las implementaciones definían las suyas de maneras que rara vez eran compatibles entre sí. Por el contrario, ALGOL 68 ofrecía una amplia biblioteca de funciones de transput (término de ALGOL 68 para entrada/salida).

ALGOL 60 proporcionó dos estrategias de evaluación para el paso de parámetros : la llamada común por valor y la llamada por nombre . La declaración del procedimiento especificaba, para cada parámetro formal, cuál se iba a utilizar: valor especificado para la llamada por valor y omitido para la llamada por nombre. La llamada por nombre tiene ciertos efectos en contraste con la llamada por referencia . Por ejemplo, sin especificar los parámetros como valor o referencia , es imposible desarrollar un procedimiento que intercambie los valores de dos parámetros si los parámetros reales que se pasan son una variable entera y una matriz que está indexada por esa misma variable entera. [19] Piense en pasar un puntero a swap(i, A[i]) en una función. Ahora que cada vez que se hace referencia a swap, se reevalúa. Digamos i := 1 y A[i] := 2, por lo que cada vez que se hace referencia a swap devolverá la otra combinación de los valores ([1,2], [2,1], [1,2] y así sucesivamente). Una situación similar ocurre con una función aleatoria pasada como argumento real.

Muchos diseñadores de compiladores conocen la llamada por nombre por los interesantes " procesadores " que se utilizan para implementarla. Donald Knuth ideó la " prueba man or boy " para separar los compiladores que implementaban correctamente la " recursión y las referencias no locales". Esta prueba contiene un ejemplo de llamada por nombre.

ALGOL 60 Palabras reservadas e identificadores restringidos

Hay 35 palabras reservadas de este tipo en el sublenguaje estándar de Burroughs Large Systems :

Hay 71 identificadores restringidos de este tipo en el sublenguaje estándar Burroughs Large Systems:

y también los nombres de todas las funciones intrínsecas.

Operadores estándar

Ejemplos y problemas de portabilidad

Comparaciones de ejemplos de código

ALGOL 60

procedimiento Absmax(a) Tamaño:(n, m) Resultado:(y) Subíndices:(i, k); valor n, m; matriz a; entero n, m, i, k; real y; comentario El mayor elemento absoluto de la matriz a, de tamaño n por m, se copia a y, y los subíndices de este elemento a i y k;comienza  entero p, q; y := 0; i := k := 1; para p := 1 paso 1 hasta n hacer  para q := 1 paso 1 hasta m hacer  si abs(a[p, q]) > y entonces  comenzar y := abs(a[p, q]); yo := p; k := q Fin Fin Absmax

Las implementaciones difieren en la forma en que se debe escribir el texto en negrita. La palabra 'INTEGER', incluidas las comillas, se debe utilizar en algunas implementaciones en lugar de entero , como se indica arriba, lo que la designa como una palabra clave especial.

A continuación se muestra un ejemplo de cómo producir una tabla utilizando Elliott 803 ALGOL: [20]

'PRUEBA DE ALGOL DE PUNTA FLOTANTE' COMIENZA REAL A,B,C,D' LEER D' PARA A:= 0.0 PASO D HASTA 6.3 HACER COMENZAR PERFORADORA DE IMPRESIÓN(3) ,££L??' B := SEÑADO(A)' C := COS(A)' PERFORADORA DE IMPRESIÓN (3) , MISMA LINEA , ALINEADA (1,6) , A, B, C' FIN' FIN'

Familia ALGOL 60

Como ALGOL 60 no tenía funciones de E/S, no existe un programa de Hola mundo portable en ALGOL. El siguiente programa podría (y aún lo hará) compilarse y ejecutarse en una implementación de ALGOL para un mainframe Unisys A-Series, y es una simplificación directa del código tomado de The Language Guide [21] en la página del programa de ejemplo de ALGOL ¡Hola mundo! del Departamento de Ciencias de la Información y Computación de la Universidad de Michigan - Dearborn. [22]

COMENZAR ARCHIVO F(TIPO=REMOTO); MATRIZ EBCDIC E[0:11]; REEMPLAZA E POR "¡HOLA MUNDO!"; ESCRIBIR(F, *, E);FIN.

Donde * etc. representa una especificación de formato como la utilizada en FORTRAN, p. ej. [23]

Un programa más simple que utiliza un formato en línea:

 INICIO  ARCHIVO  F ( TIPO = REMOTO );  ESCRIBIR ( F ,  < "HOLA MUNDO!" > );  FIN .

Un programa aún más simple que utiliza la declaración Display:

INICIO  PANTALLA ( "¡HOLA MUNDO!" )  FIN .

Un ejemplo alternativo, que utiliza la entrada/salida de Elliott Algol, es el siguiente. Elliott Algol utilizó caracteres diferentes para "abrir-cadena-comillas" y "cerrar-cadena-comillas", representados aquí por  ' y  ' .

 programa HiFolks ; comenzar imprimir ' Hola mundo ' fin ;      

Aquí hay una versión para el Elliott 803 Algol (A104). El Elliott 803 estándar usaba cinta de papel de 5 agujeros y, por lo tanto, solo tenía mayúsculas. El código carecía de caracteres de comillas, por lo que se usaba £ (signo de almohadilla) para las comillas de apertura y ? (signo de interrogación) para las comillas de cierre. Las secuencias especiales se colocaban entre comillas dobles (por ejemplo, £L?? producía una nueva línea en el teleimpresor).

 Gente de alta sociedad COMENZAR IMPRIMIR £HOLA MUNDO£L??' FIN'

La versión de E/S de Algol de la serie ICT 1900 permitía la entrada desde cinta de papel o tarjeta perforada. El modo "completo" de cinta de papel permitía el uso de minúsculas. La salida se realizaba a una impresora de línea. Nótese el uso de '(', ')' y %. [24]

 'PROGRAMA' (HOLA) 'COMENZAR' 'COMENTARIO' ABRIR COMILLA ES '(', CERRAR ES ')', EL ESPACIO IMPRIMIBLE TIENE QUE SE ESCRIBE COMO % PORQUE SE IGNORARON LOS ESPACIOS; ESCRIBIR TEXTO('('HOLA%MUNDO')'); 'FIN' 'FINALIZAR'

SALTO

LEAP es una extensión del lenguaje de programación ALGOL 60 que proporciona una memoria asociativa de triples. Los tres elementos de un triple indican la asociación de un atributo de un objeto con un valor específico. LEAP fue creado por Jerome Feldman (Universidad de California, Berkeley) y Paul Rovner (MIT Lincoln Lab) en 1967. LEAP también se implementó en SAIL.

Véase también

Referencias

  1. ^ Knuth, Donald E. (diciembre de 1964). "Forma normal de Backus frente a forma de Backus Naur". Comunicaciones de la ACM . 7 (12): 735–6. doi : 10.1145/355588.365140 . S2CID  47537431.
  2. ^ Mención del premio ACM / Peter Naur, 2005
  3. ^ van Emden, Maarten (2014). "Cómo la recursión llegó a la programación: una historia de intriga, traición y semántica avanzada de lenguajes de programación". El lugar de un programador .
  4. ^ Hoare, CAR (diciembre de 1973). "Consejos sobre el diseño de lenguajes de programación" (PDF) . pág. 27.(Esta afirmación a veces se atribuye erróneamente a Edsger W. Dijkstra , también involucrado en la implementación del primer compilador ALGOL 60 ).
  5. ^ Abelson, Hal ; Dybvig, RK ; et al. Rees, Jonathan; Clinger, William (eds.). "Informe revisado (3) sobre el esquema de lenguaje algorítmico (dedicado a la memoria de ALGOL 60)" . Consultado el 20 de octubre de 2009 .
  6. ^ La enciclopedia de lenguajes informáticos Archivado el 27 de septiembre de 2011 en Wayback Machine .
  7. ^ Daylight, EG (2011). "El grito de guerra de Dijkstra en favor de la generalización: el advenimiento del procedimiento recursivo, finales de los años 1950 y principios de los años 1960". The Computer Journal . 54 (11): 1756–1772. doi :10.1093/comjnl/bxr002.
  8. ^ Kruseman Aretz, FEJ (30 de junio de 2003). "El compilador Dijkstra-Zonneveld ALGOL 60 para Electrologica X1" (PDF) . Ingeniería de software . Historia de la informática. Ámsterdam: Centrum Wiskunde & Informatica. ISSN  1386-3711. Archivado desde el original (PDF) el 17 de enero de 2004.
  9. ^ Irons, Edgar T., Un compilador dirigido por sintaxis para ALGOL 60, Communications of the ACM, vol. 4, pág. 51. (enero de 1961)
  10. ^ Kurtz, Thomas E. (1978). "BASIC". Historia de los lenguajes de programación . págs. 515–537. doi : 10.1145/800025.1198404 . ISBN . 0127450408.
  11. ^ Gries, D.; Paul, M.; Wiehle, H. R (1965). "Algunas técnicas utilizadas en el ALCOR Illinois 7090". Comunicaciones de la ACM . 8 (8): 496–500. doi : 10.1145/365474.365511 . S2CID  18365024.
  12. ^ Bayer, R.; Gries, D.; Paul, M.; Wiehle, HR (1967). "El vertedero post mortem de ALCOR Illinois 7090/7094". Comunicaciones de la ACM . 10 (12): 804–808. doi : 10.1145/363848.363866 . S2CID  3783605.
  13. ^ Rechenautomaten mit Trommelspeicher, Förderverein der Technischen Sammlung Dresden
  14. ^ Mounier-Kuhn, Pierre (2014). "Algol en Francia: del proyecto universal a la cultura integrada". IEEE Annals of the History of Computing . 36 (4): 6. ISSN  1058-6180.
  15. ^ Kurtz, op. cit. , página 517.
  16. ^ Boussard, Jean-Claude (junio de 1964). Etude et réalisation d'un compilateur Algol60 sur calculador éléctronique du type IBM 7090/94 et 7040/44 [ Diseño e implementación de un compilador Algol60 en calculadoras electrónicas IBM 7090/94 y 7040/44 ] (Doctor) (en francés). Universidad Joseph-Fourier - Grenoble I.
  17. ^ Claude Pair (27 de abril de 1965). Descripción del compilador ALGOL . Grupo de usuarios de la región europea 1620 . IBM.
  18. ^ Kruseman Aretz, FEJ (1973). Un compilador de Algol 60 en Algol 60 . Tratados del Centro de Matemáticas. Ámsterdam: Mathematisch Centrum.
  19. ^ Aho, Alfred V. ; Sethi, Ravi ; Ullman, Jeffrey D. (1986). Compiladores: principios, técnicas y herramientas (1.ª ed.). Addison-Wesley. ISBN 978-0-201-10194-2., Sección 7.5 y referencias allí contenidas
  20. ^ "803 ALGOL", el manual de Elliott 803 ALGOL
  21. ^ "El lenguaje de programación ALGOL". www.engin.umd.umich.edu . Archivado desde el original el 10 de febrero de 2010. Consultado el 11 de enero de 2022 .
  22. ^ "¡Hola mundo! Programa de ejemplo". www.engin.umd.umich.edu . Archivado desde el original el 4 de febrero de 2010. Consultado el 11 de enero de 2022 .
  23. ^ Ejemplo de Fortran#"¡Hola, mundo!"
  24. ^ "Serie ICL 1900: Lenguaje Algol". Publicación técnica ICL 3340. 1965.

Lectura adicional

Enlaces externos