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 introdujo bloques de código y pares beginy endpara delimitarlos, lo que representa un avance clave en el surgimiento 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 podrían anidarse unas dentro de otras (lo que fue introducido por primera vez por cualquier lenguaje de programación), con alcance léxico . Dio origen 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 ALGOL 60.

Niklaus Wirth basó su propio ALGOL W en ALGOL 60 antes de desarrollar Pascal . Se pretendía que Algol-W fuera 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, de modo que en general "ALGOL" se refiere a dialectos de ALGOL 60.

Estandarizació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 los Estados Unidos y Europa. Su uso en aplicaciones comerciales se vio obstaculizado por la ausencia de funciones estándar de entrada/salida en su descripción y la falta de interés en el idioma 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 profundo efecto en el desarrollo futuro del lenguaje.

John Backus desarrolló el método de forma normal Backus para describir lenguajes de programación específicamente para ALGOL 58. Peter Naur lo revisó y amplió para ALGOL 60 y, por sugerencia de Donald Knuth , se le cambió el nombre a forma Backus-Naur . [1]

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

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

Alan Perlis dio una vívida descripción de la reunión: "Las reuniones fueron agotadoras, interminables y estimulantes. Uno se irritaba cuando las 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 de el 13 fue excelente."

El lenguaje originalmente no incluía recursividad . Se incluyó en el pliego de condiciones en el último momento, 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 sólo fue una mejora con respecto a sus predecesores sino también a casi todos sus sucesores". [4] [5]

Cronograma de implementaciones de ALGOL 60

Hasta la fecha ha habido al menos 70 aumentos, 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 define oficialmente, no tenía instalaciones de E/S; Las implementaciones definieron las suyas propias de maneras que rara vez eran compatibles entre sí. Por el contrario, ALGOL 68 ofrecía una extensa biblioteca de instalaciones de transputación (en la jerga de 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 del procedimiento especificaba, para cada parámetro formal, cuál se iba a utilizar: valor especificado para llamada por valor y omitido para llamada por nombre. La llamada por nombre tiene ciertos efectos a diferencia de 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. . [19] Piense en pasar un puntero para intercambiar (i, A [i]) a una función. Ahora que cada vez que se hace referencia al intercambio, se reevalúa. Digamos i := 1 y A[i] := 2, por lo que cada vez que se haga referencia al intercambio 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 " thunks " que se utilizan para implementarla. Donald Knuth ideó la " prueba del hombre o el niño " para separar los compiladores que implementaban correctamente " la recursividad y las referencias no locales". Esta prueba contiene un ejemplo de llamada por nombre.

ALGOL 60 Palabras reservadas e identificadores restringidos

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

Hay 71 identificadores restringidos de este tipo en el sublenguaje estándar de 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 norte, metro; matriz a; número entero n, m, i, k; realmente ;comentario El mayor elemento absoluto de la matriz a, de tamaño n por m, se copia en y, y los subíndices de este elemento en i y k;comenzar con  el número entero p, q; y := 0; yo := k := 1; para p := 1 paso 1 hasta n hacer  para q := 1 paso 1 hasta m hacer  if abs(a[p, q]) > y entonces  comenzar y := abs(a[p, q]); yo := p; k := q extremo extremo Absmax

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

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

PRUEBA DE ALGOL DE PUNTO FLOTANTE' COMENZAR REAL A,B,C,D' RE AÑADIR' PARA A:= 0.0 PASO D HASTA 6.3 DO COMENZAR IMPRIMIR PERFORACIÓN(3) ,££L??' B := PECADO(A)' C := COS(A)' IMPRIMIR PERFORACIÓN(3) , MISMA LÍNEA , ALINEADO(1,6) , A,B,C' FIN' FIN'

ALGOL 60 familia

Dado que ALGOL 60 no tenía instalaciones de E/S, no existe un programa portátil de saludo en ALGOL. El siguiente programa podría (y aún lo hará) compilar y ejecutarse en una implementación ALGOL para una computadora central Unisys A-Series, y es una sencilla simplificación del código tomado de The Language Guide [21] de la Universidad de Michigan -Dearborn Computer and Information Science. Departamento ¡Hola mundo! Página del programa de ejemplo ALGOL. [22]

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

Donde * etc. representaba una especificación de formato tal como se utiliza en FORTRAN, por ejemplo, [23]

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

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

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

COMENZAR LA PANTALLA  ( " ¡HOLA MUNDO!" )  FINALIZAR .

Un ejemplo alternativo que utiliza E/S de Elliott Algol es el siguiente. Elliott Algol usó caracteres diferentes para "comilla de cadena abierta" y "comilla de cadena cerrada", representados aquí por  ' y  ' .

 programa Hola Gente ; comenzar imprimir ' Hola mundo ' terminar ;      

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 comillas, por lo que se utilizó £ (signo de libra) 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 el teleimpresor).

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

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

 'PROGRAMA' (HOLA) 'COMENZAR' 'COMENTARIO' LA COTIZACIÓN ABRIR ES '(', CERRAR ES ')', EL ESPACIO IMPRIMIBLE TIENE QUE SE ESCRIBIR COMO % PORQUE SE IGNORAN 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 denotan la asociación de que un Atributo de un Objeto tiene 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.

Ver 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 llegó la recursividad a 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). "Consejos sobre el diseño de lenguajes de programación" (PDF) . pag. 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. ^ Luz del día, EG (2011). "El grito de guerra de Dijkstra por la generalización: el advenimiento del procedimiento recursivo, finales de la década de 1950 y principios de la de 1960". La revista informática . 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). "BÁSICO". Historia de los lenguajes de programación . págs. 515–537. doi : 10.1145/800025.1198404 . ISBN 0127450408.
  11. ^ Gries, D.; Pablo, M.; Wiehle, HR (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.; Pablo, 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". Anales IEEE de la historia de la informática . 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. ^ Ah, 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. ^ Fortran # "¡Hola mundo!" ejemplo
  24. ^ "Serie ICL 1900: Idioma Algol". Publicación técnica ICL 3340. 1965.

Otras lecturas

enlaces externos