De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

ALGOL 60 (abreviatura de Algorithmic Language 1960 ) es un miembro de la familia ALGOL de lenguajes de programación de computadoras. Siguió a ALGOL 58, que había introducido bloques de código y los pares beginy endpara delimitarlos, lo que representa un avance clave en el auge de la programación estructurada . ALGOL 60 fue el primer lenguaje que implementó definiciones de funciones anidadas con alcance léxico . Dio lugar a muchos otros lenguajes de programación, incluidos CPL , Simula , BCPL , B , Pascal y C. Prácticamente todas las computadoras de la época tenían un lenguaje de programación de sistemas basado en conceptos ALGOL 60.

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

Estandarización [ editar ]

ALGOL 60, con COBOL , fueron los primeros idiomas en buscar la estandarización.

  • ISO 1538: 1984 Lenguajes de programación - Algol 60 (estabilizado)
  • ISO / TR 1672: 1977 Representación de hardware de los símbolos básicos de ALGOL ... (ahora retirado)

Historia [ editar ]

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

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, a sugerencia de Donald Knuth , se le cambió el nombre a la forma Backus-Naur . [1]

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

Las siguientes personas asistieron al encuentro en París (del 11 al 16 de enero):

  • Friedrich L. Bauer , Peter Naur , Heinz Rutishauser , Klaus Samelson , Bernard Vauquois , Adriaan van Wijngaarden y Michael Woodger (de Europa)
  • John W. Backus , Julien Green , Charles Katz , John McCarthy , Alan J. Perlis y Joseph Henry Wegstein (de EE. UU.).

Alan Perlis dio una vívida descripción de la reunión: "Las reuniones fueron agotadoras, interminables y estimulantes. Uno se agravaba cuando se descartaban las buenas ideas de uno junto con las malas de los demás. Sin embargo, la diligencia persistió durante todo el período. La química de el 13 fue excelente ".

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

ALGOL 60 inspiró muchos idiomas que lo siguieron. Tony Hoare comentó: "Aquí hay un lenguaje tan adelantado a su tiempo que no solo fue una mejora con respecto a sus predecesores, sino también a casi todos sus sucesores". [4] [5]

Cronograma de implementaciones de ALGOL 60 [ editar ]

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 [ editar ]

ALGOL 60, tal como se definió oficialmente, no tenía instalaciones de E / S; las implementaciones definían las suyas de formas que rara vez eran compatibles entre sí. En contraste, ALGOL 68 ofreció una extensa biblioteca de facilidades de transput (lenguaje ALGOL 68 para entrada / salida).

ALGOL 60 proporcionó dos estrategias de evaluación para el paso de parámetros : la llamada por valor común y la llamada por nombre . La declaración de procedimiento especificada, para cada parámetro formal, que se iba a utilizar: valor especificado para llamada por valor y omitido para 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 indexada por esa misma variable entera. . [14]Piense en pasar un puntero para intercambiar (i, A [i]) en una función. Ahora que cada vez que se hace referencia a swap, se reevalúa. Diga 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í en). 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 de hombre o niño " para separar compiladores que implementaron correctamente " referencias recursivas y no locales". Esta prueba contiene un ejemplo de llamada por nombre.

ALGOL 60 Palabras reservadas e identificadores restringidos [ editar ]

Hay 35 palabras reservadas de este tipo en el sub-lenguaje estándar de sistemas grandes de Burroughs :

Hay 71 identificadores restringidos de este tipo en el sub-lenguaje estándar de sistemas grandes de Burroughs:

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

Operadores estándar [ editar ]

Ejemplos y problemas de portabilidad [ editar ]

Comparaciones de muestra de código [ editar ]

ALGOL 60 [ editar ]

procedimiento Absmax (a) Tamaño: (n, m) Resultado: (y) Subíndices: (i, k); valor n, m; matriz a; número entero n, m, i, k; realmente ;comentario El elemento más grande absoluto de la matriz a, de tamaño n por m, se transfiere ay, y los subíndices de este elemento a i y k;comenzar  entero p, q; y: = 0; i: = k: = 1; para p: = 1 paso 1 hasta que n hacer  para q: = 1 paso 1 hasta que m hacer  si abs (a [p, q])> y luego  comienza y: = abs (a [p, q]); i: = p; k: = q final final Absmax

Las implementaciones difieren en cómo debe escribirse el texto en negrita. La palabra 'INTEGER', incluidas las comillas, debe usarse en algunas implementaciones en lugar de integer , arriba, designándola como una palabra clave especial.

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

 PRUEBA ALGOL PUNTO FLOTANTE ' COMIENZA REAL A, B, C, D ' RE AÑADIR' PARA A: = 0.0 PASO D HASTA 6.3 HACER COMENZAR IMPRIMIR PUNZÓN (3) , £ £ L ?? ' B: = SIN (A) ' C: = COS (A) ' IMPRIMIR PUNZÓN (3) , SAMELINE , ALINEADO (1,6) , A, B, C ' FIN' FIN'

Familia ALGOL 60 [ editar ]

Dado que ALGOL 60 no tenía instalaciones de E / S, no existe un programa portátil hello world en ALGOL. El siguiente programa podría (y aún lo hará) compilarse y ejecutarse en una implementación ALGOL para un mainframe Unisys A-Series, y es una sencilla simplificación del código tomado de The Language Guide [16] en la Universidad de Michigan - Queridos Informática y Ciencias de la Información. Departamento ¡Hola mundo! Página del programa de ejemplo ALGOL. [17]

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

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

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

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

BEGIN DISPLAY ("¡HOLA MUNDO!") FIN.

Un ejemplo alternativo, el uso de E / S de Elliott Algol es el siguiente. Elliott Algol usó diferentes caracteres para "open-string-quote" y "close-string-quote", representados aquí por ' y ' .

 programa HiFolks; comenzar  imprimir  ' Hola mundo ' final ;

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

 HOLA AMIGOS' COMENZAR IMPRIMIR £ HOLA MUNDO £ L ?? ' FIN'

La versión de E / S Algol de la serie ICT 1900 permitía la entrada desde cinta de papel o tarjeta perforada. El modo de cinta de papel 'completo' permite minúsculas. La salida fue a una impresora de línea. Tenga en cuenta el uso de '(', ')' y%. [18]

 'PROGRAMA' (HOLA) 'COMENZAR' 'COMENTAR' ABRIR CITA ES '(', CERRAR ES ')', EL ESPACIO IMPRIMIBLE TIENE QUE ESCRIBA COMO% PORQUE SE IGNORAN LOS ESPACIOS; ESCRIBIR TEXTO ('(' HOLA% MUNDO ')'); 'FIN' 'FINALIZAR'

Ver también [ editar ]

  • ABC ALGOL
  • ALGOL
  • ALGOL 58
  • ALGOL N
  • ALGOL 68
  • ALGOL W
  • ALGOL X
  • Atlas Autocode
  • Coral 66
  • IMP de Edimburgo
  • Dispositivo de Jensen
  • YO NADO
  • JOVIAL
  • NELIAC
  • Simula
  • S-algol
  • Scheme (lenguaje de programación)

Referencias [ editar ]

  1. ^ Knuth, Donald E. (diciembre de 1964). "Forma normal de Backus vs Forma de Backus Naur". Comm. ACM . 7 (12): 735–6. doi : 10.1145 / 355588.365140 . S2CID  47537431 .
  2. ^ Cita del premio ACM / Peter Naur , 2005
  3. van Emden, Maarten (2014). "Cómo la recursividad entró en la programación: una historia de intriga, traición y semántica avanzada del lenguaje de programación" . El lugar de un programador .
  4. ^ Hoare, CAR (diciembre de 1973). "Sugerencias sobre el diseño de lenguajes de programación" (PDF) . pag. 27. (Esta declaració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 de computadora, archivada el 27 de septiembre de 2011 en la Wayback Machine.
  7. ^ Luz del día, EG (2011). "Grito de guerra de Dijkstra para la generalización: el advenimiento del procedimiento recursivo, finales de 1950 - principios de 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. Kruislaan 413, 1098 SJ Amsterdam: Centrum Wiskunde & Informatica. Mantenimiento de CS1: ubicación ( enlace )[ enlace muerto permanente ]
  9. ^ Irons, Edgar T. , Un compilador dirigido por sintaxis para ALGOL 60, Comunicaciones del ACM, Vol. 4, pág. 51. (enero de 1961)
  10. ^ Rechenautomaten mit Trommelspeicher , Förderverein der Technischen Sammlung Dresden
  11. ^ Jean-Claude Boussard (junio de 1964). Diseño e implementación de un compilador Algol60 en calculadoras electrónicas IBM 7090/94 y 7040/44 . Institut d'informatique et mathématiques appliquées de Grenoble  [ fr ] .Mantenimiento de CS1: ubicación ( enlace )
  12. ^ Claude Pair (27 de abril de 1965). Description d'un compilateur ALGOL . Grupo de usuarios de la región europea 1620 . IBM.
  13. ^ Kruseman Aretz, FEJ (1973). Un compilador de Algol 60 en Algol 60 . Tratados del Centro Matemático. Ámsterdam: Mathematisch Centrum.
  14. ^ Aho, Alfred V .; Ravi Sethi ; Jeffrey D. Ullman (1986). Compiladores: principios, técnicas y herramientas (1ª ed.). Addison-Wesley. ISBN 978-0-201-10194-2., Sección 7.5, y referencias en el mismo
  15. ^ "803 ALGOL" , el manual de Elliott 803 ALGOL
  16. ^ https://web.archive.org/web/20100209040840/http://www.engin.umd.umich.edu/CIS/course.des/cis400/index.html
  17. ^ https://web.archive.org/web/20100204112923/http://www.engin.umd.umich.edu/CIS/course.des/cis400/algol/hworld.html
  18. ^ "Serie ICL 1900: lenguaje Algol" . Publicación técnica ICL 3340. 1965.

Lectura adicional [ editar ]

  • Dijkstra, Edsger W. (1961). "Traducción ALGOL 60: Un traductor ALGOL 60 para el X1 y un traductor para ALGOL 60 (PDF) (Informe técnico). Amsterdam: Mathematisch Centrum. 35.
  • Randell, Brian ; Russell, Lawford John (1964). Implementación de ALGOL 60: la traducción y uso de programas ALGOL 60 en una computadora . Prensa académica. OCLC  526731 .El diseño del compilador Whetstone . Una de las primeras descripciones publicadas sobre la implementación de un compilador. Consulte los artículos relacionados: Whetstone Algol Revisited y The Whetstone KDF9 Algol Translator de Brian Randell

Enlaces externos [ editar ]

  • Informe revisado sobre el lenguaje algorítmico Algol 60 de Peter Naur, et al. Definición de ALGOL
  • Un resumen de sintaxis BNF de ALGOL 60
  • "The Emperor's Old Clothes" - Discurso del Premio ACM Turing de 1980 de Hoare, que analiza la historia de ALGOL y su participación
  • MARST , un traductor gratuito de Algol a C
  • Una implementación de ALGOL 60 para el FP6000 Discusión de algunos problemas de implementación.
  • Naur, Peter (agosto de 1978). "La cara europea de la última fase del desarrollo de ALGOL 60" . Avisos ACM SIGPLAN . 13 (8): 15–44. doi : 10.1145 / 960118.808370 . S2CID  15552479 .
  • La Universidad de Edimburgo escribió compiladores para Algol60 (posteriormente actualizado para Algol60M) basados ​​en sus compiladores Atlas Autocode inicialmente arrancados del Atlas al KDF-9. Los compiladores de Edimburgo generaron código para ICL1900, ICL4 / 75 (un clon de IBM360) e ICL2900. Aquí está el BNF para Algol60 Archivado 2020-05-15 en Wayback Machine y la fuente del compilador ICL2900 Archivado 2020-05-15 en Wayback Machine , documentación de la biblioteca Archivada 2020-05-15 en Wayback Machine , y un conjunto de pruebas considerable Archivado el 15 de mayo de 2020 en la Wayback Machine, incluidoPruebas de Brian Wichmann. Archivado el 15 de mayo de 2020 en Wayback Machine. También hay un traductor de nivel de fuente de código automático de Algol60 a Atlas bastante superficial Archivado el 15 de mayo de 2020 en Wayback Machine .
  • El Museo de Retrocomputación de Eric S. Raymond , entre otros, un enlace al intérprete NASE Algol-60 escrito en C.
  • El intérprete de NASE
  • Historias del B5000 y las personas que estuvieron allí: una computadora ALGOL dedicada [1] , [2]
  • Hermann Bottenbruch (1961). "Estructura y uso de ALGOL 60" . doi : 10.2172 / 4020495 . Cite journal requiere |journal=( ayuda )
  • NUMAL Una biblioteca de procedimientos numéricos en ALGOL 60 desarrollada en The Stichting Centrum Wiskunde & Informatica (sucesor legal de Stichting Mathematisch Centrum) propietario legal .
  • Recursos de Algol 60: traductores, documentación, programas
  • Algol-60 incluido en la raqueta.