stringtranslate.com

ALGO 68

ALGOL 68 (abreviatura de Algorithmic Language 1968 ) es un lenguaje de programación imperativo que fue concebido como sucesor del lenguaje de programación ALGOL 60 , diseñado con el objetivo de un alcance de aplicación mucho más amplio y una sintaxis y semántica definidas más rigurosamente.

La complejidad de la definición del lenguaje, que abarca varios cientos de páginas llenas de terminología no estándar, dificultó la implementación del compilador y se dijo que "no tenía implementaciones ni usuarios". Esto era sólo parcialmente cierto; ALGOL 68 encontró uso en varios nichos de mercado, especialmente en el Reino Unido , donde era popular en las máquinas de International Computers Limited (ICL) y en funciones docentes. Fuera de estos campos, el uso fue relativamente limitado.

Sin embargo, las contribuciones de ALGOL 68 al campo de la informática han sido profundas, amplias y duraderas, aunque muchas de estas contribuciones sólo se identificaron públicamente cuando reaparecieron en lenguajes de programación desarrollados posteriormente. Muchos lenguajes se desarrollaron específicamente como respuesta a la complejidad percibida del lenguaje, siendo el más notable Pascal , o fueron reimplementaciones para roles específicos, como Ada .

Muchos lenguajes de la década de 1970 remontan su diseño específicamente a ALGOL 68, seleccionando algunas características y abandonando otras que se consideraban demasiado complejas o fuera del alcance de determinadas funciones. Entre ellos se encuentra el lenguaje C , que fue influenciado directamente por ALGOL 68, especialmente por su fuerte tipografía y estructuras. La mayoría de los lenguajes modernos remontan al menos parte de su sintaxis a C o Pascal y, por tanto, directa o indirectamente a ALGOL 68.

Descripción general

Las características de ALGOL 68 incluyen sintaxis basada en expresiones, tipos y estructuras/uniones etiquetadas declarados por el usuario, un modelo de referencia de variables y parámetros de referencia, corte de cadenas, matrices y matrices, y concurrencia.

ALGOL 68 fue diseñado por el Grupo de Trabajo IFIP 2.1 de la Federación Internacional para el Procesamiento de Información (IFIP) sobre lenguajes algorítmicos y cálculos. El 20 de diciembre de 1968, el grupo adoptó formalmente el lenguaje y luego lo aprobó para su publicación la Asamblea General del IFIP.

ALGOL 68 se definió utilizando un formalismo , una gramática formal de dos niveles , inventada por Adriaan van Wijngaarden . Las gramáticas de Van Wijngaarden utilizan una gramática libre de contexto para generar un conjunto infinito de producciones que reconocerán un programa ALGOL 68 en particular; En particular, son capaces de expresar el tipo de requisitos que en muchos otros estándares técnicos de lenguajes de programación se denominan semánticos , y deben expresarse en prosa de lenguaje natural propensa a la ambigüedad y luego implementarse en compiladores como código ad hoc adjunto al analizador de lenguaje formal. .

ALGOL 68 fue el primer (y posiblemente uno de los últimos) lenguaje importante para el cual se hizo una definición formal completa antes de su implementación.

CHA Koster [8]

Los principales objetivos y principios del diseño de ALGOL 68:

  1. Integridad y claridad de la descripción [9]
  2. Ortogonalidad del diseño [10]
  3. Seguridad [11]
  4. Eficiencia: [12]

ALGOL 68 ha sido criticado, sobre todo por algunos miembros de su comité de diseño como CAR Hoare y Edsger Dijkstra , por abandonar la simplicidad de ALGOL 60 , convertirse en un vehículo para ideas complejas o demasiado generales y hacer poco para facilitar la tarea del compilador . más fácil, en contraste con sus contemporáneos (y competidores) deliberadamente simples como C , S-algol y Pascal .

En 1970, ALGOL 68-R se convirtió en el primer compilador funcional de ALGOL 68.

En la revisión de 1973, se omitieron ciertas características, como el procedimiento , las gommas [13] y los límites formales . [14] Cf. El lenguaje del informe no revisado.r0

Aunque las agencias de defensa europeas (en Gran Bretaña Royal Signals and Radar Establishment (RSRE)) promovieron el uso de ALGOL 68 por sus esperadas ventajas de seguridad, la parte estadounidense de la alianza de la OTAN decidió desarrollar un proyecto diferente, el lenguaje Ada , haciendo obligatorio su uso. para contratos de defensa estadounidenses.

ALGOL 68 también tuvo una influencia notable en la Unión Soviética , cuyos detalles se pueden encontrar en el artículo de Andrey Terekhov de 2014: "ALGOL 68 and Its Impact on the URSS and Russian Programming", [15] y "Алгол 68 и его влияние". на программирование в СССР и России". [dieciséis]

Steve Bourne , que estaba en el comité de revisión de ALGOL 68, llevó algunas de sus ideas a su shell Bourne (y, por tanto, a shells Unix descendientes como Bash ) y a C (y, por tanto, a descendientes como C++ ).

La historia completa del proyecto se puede encontrar en A History of ALGOL 68 de CH Lindsey . [17] [18]

Para obtener un tratamiento completo del lenguaje, consulte "Programming ALGOL 68 Made Easy" [19] del Dr. Sian Mountbatten, o "Learning ALGOL 68 Genie" [20] de Marcel van der Veer, que incluye el informe revisado.

Historia

Orígenes

ALGOL 68, como su nombre lo indica, es una continuación del lenguaje ALGOL que se formalizó por primera vez en 1960. Ese mismo año, la Federación Internacional para el Procesamiento de Información (IFIP) formó e inició el Grupo de Trabajo sobre ALGOL, o WG2.1. Este grupo publicó una especificación ALGOL 60 actualizada en Roma en abril de 1962. En una reunión de seguimiento en marzo de 1964, se acordó que el grupo debería comenzar a trabajar en dos estándares de seguimiento, ALGOL X , que sería una redefinición del lenguaje. con algunas adiciones, y un ALGOL Y , que tendría la capacidad de modificar sus propios programas al estilo del lenguaje LISP . [21]

Proceso de definición

La primera reunión del grupo ALGOL X se celebró en la Universidad de Princeton en mayo de 1965. Un informe de la reunión señaló dos temas ampliamente respaldados: la introducción de una tipificación fuerte y el interés en los conceptos de Euler de "árboles" o "listas" para el manejo de colecciones. [22]

En la segunda reunión celebrada en octubre en Francia, se presentaron tres propuestas formales: ALGOL W de Niklaus Wirth junto con comentarios sobre estructuras de registros de CAR (Tony) Hoare , un lenguaje similar de Gerhard Seegmüller y un artículo de Adriaan van Wijngaarden sobre " Diseño ortogonal y descripción de un lenguaje formal". Este último, escrito en una "W-Grammar" casi indescifrable, resultó ser un cambio decisivo en la evolución del idioma. La reunión cerró con un acuerdo de que van Wijngaarden reescribiría la presentación de Wirth/Hoare utilizando su W-Grammar. [22]

Esta tarea aparentemente sencilla resultó finalmente más difícil de lo esperado y la reunión de seguimiento tuvo que retrasarse seis meses. Cuando se reunió en abril de 1966 en Kootwijk , el borrador de van Wijngaarden quedó incompleto y Wirth y Hoare presentaron una versión utilizando descripciones más tradicionales. En general, hubo acuerdo en que su artículo era "el lenguaje correcto en el formalismo equivocado". [23] A medida que se exploraron estos enfoques, quedó claro que había una diferencia en la forma en que se describían los parámetros que tendrían efectos en el mundo real, y aunque Wirth y Hoare protestaron porque más retrasos podrían volverse interminables, el comité decidió esperar a que Van La versión de Wijngaarden. Luego, Wirth implementó su definición actual como ALGOL W. [24]

En la siguiente reunión en Varsovia en octubre de 1966, [25] hubo un informe inicial del Subcomité de E/S que se había reunido en el Laboratorio Nacional de Oak Ridge y la Universidad de Illinois pero que aún no había hecho muchos progresos. Se volvieron a explorar las dos propuestas de la reunión anterior, y esta vez surgió un nuevo debate sobre el uso de punteros ; ALGOL W los utilizó sólo para referirse a registros, mientras que la versión de van Wijngaarden podía señalar cualquier objeto. Para agregar confusión, John McCarthy presentó una nueva propuesta para la sobrecarga de operadores y la capacidad de encadenar o construir, y Klaus Samelson quería permitir funciones anónimas . En la confusión resultante, hubo cierta discusión sobre abandonar todo el esfuerzo. [24] La confusión continuó durante lo que se suponía sería la reunión de ALGOL Y en Zandvoort en mayo de 1967. [22]

Publicación

Finalmente se publicó un borrador del informe en febrero de 1968. Esto fue recibido con "conmoción, horror y disensión", [22] principalmente debido a los cientos de páginas de gramática ilegible y terminología extraña. Charles H. Lindsey intentó descubrir qué "lenguaje estaba escondido en su interior", [26] un proceso que requirió seis semanas de esfuerzo. El artículo resultante, "ALGOL 68 con menos lágrimas", tuvo una amplia circulación. En una reunión más amplia sobre procesamiento de información celebrada en Zúrich en mayo de 1968, los asistentes se quejaron de que se les estaba imponiendo el lenguaje y de que el IFIP era "el verdadero villano de esta situación irrazonable", ya que las reuniones eran en su mayoría cerradas y no existía un mecanismo formal de retroalimentación. Wirth y Peter Naur renunciaron formalmente a sus puestos de autoría en el WG2.1 en ese momento. [26]

La siguiente reunión del WG2.1 tuvo lugar en Tirrenia en junio de 1968. Se suponía que discutiría la publicación de compiladores y otras cuestiones, pero en cambio derivó en una discusión sobre el lenguaje. van Wijngaarden respondió diciendo (o amenazando) con que publicaría sólo una versión más del informe. En ese momento, Naur, Hoare y Wirth habían abandonado el esfuerzo y varios más amenazaban con hacerlo. [27] Siguieron varias reuniones más, North Berwick en agosto de 1968, Munich en diciembre, que produjeron la publicación del Informe oficial en enero de 1969, pero también resultaron en la redacción de un polémico Informe de la Minoría. Finalmente, en Banff, Alberta, en septiembre de 1969, el proyecto se consideró en general completo y la discusión giró principalmente sobre erratas y una Introducción al Informe muy ampliada. [28]

El esfuerzo duró cinco años, quemó a muchos de los nombres más importantes de la informática y, en varias ocasiones, quedó estancado por cuestiones tanto de la definición como del grupo en su conjunto. Hoare publicó una "Crítica de ALGOL 68" casi de inmediato, [29] a la que se ha hecho referencia ampliamente en muchos trabajos. Wirth continuó desarrollando el concepto ALGOL W y lo lanzó como Pascal en 1970.

Implementaciones

ALGOL 68-R

La primera implementación de la norma, basada en el borrador del Informe de finales de 1968, fue introducida por el Royal Radar Establishment en el Reino Unido como ALGOL 68-R en julio de 1970. Sin embargo, se trataba de un subconjunto del lenguaje completo, y Barry Mailloux , el editor final del Informe, bromeó diciendo: "Es una cuestión de moralidad. ¡Tenemos una Biblia y ustedes están pecando!" [30] Sin embargo, esta versión se hizo muy popular en las máquinas ICL y se convirtió en un lenguaje ampliamente utilizado en codificación militar, especialmente en el Reino Unido. [31]

Entre los cambios en el 68-R estaba el requisito de que todas las variables se declararan antes de su primer uso. Esto tenía una ventaja significativa: permitía que el compilador fuera de una sola pasada, ya que se reservaba espacio para las variables en el registro de activación antes de usarlo. Sin embargo, este cambio también tuvo el efecto secundario de exigir que los PROC se declararan dos veces, una como declaración de tipos y otra vez como cuerpo de código. Otro cambio fue eliminar el modo VOID asumido , una expresión que no devuelve ningún valor (denominada declaración en otros idiomas) y que exige que se agregue la palabra VOID donde se habría asumido. Además, 68-R eliminó los comandos explícitos de procesamiento paralelo basados ​​en PAR . [30]

Otros

La primera implementación completa del lenguaje fue introducida en 1974 por CDC Países Bajos para la serie de mainframe Control Data . Esto tuvo un uso limitado, principalmente en la enseñanza en Alemania y los Países Bajos. [31]

Una versión similar al 68-R fue introducida por la Universidad Carnegie Mellon en 1976 como 68S, y nuevamente era un compilador de un solo paso basado en varias simplificaciones del original y destinado a su uso en máquinas más pequeñas como el DEC PDP-11 . También se utilizó principalmente con fines didácticos. [31]

Una versión para mainframes de IBM no estuvo disponible hasta 1978, cuando la Universidad de Cambridge lanzó una . Esto estaba "casi completo". Lindsey lanzó una versión para máquinas pequeñas, incluida la IBM PC , en 1984. [31]

Se conocen tres implementaciones de Algol 68 de código abierto: [32]

Línea de tiempo

El lenguaje algorítmico ALGOL 68 Informes y miembros del grupo de trabajo

"Van Wijngaarden caracterizó una vez a los cuatro autores, un tanto irónico, como: Koster: transputter, Peck: sintaxis, Mailloux: implementador, Van Wijngaarden: ideólogo del partido". – Koster.

Cronología de la estandarización

1968: El 20 de diciembre de 1968, el Grupo de Trabajo adoptó el "Informe Final" (MR 101), que luego fue aprobado por la Asamblea General del IFIP de la UNESCO para su publicación. Se hicieron traducciones del estándar al ruso , alemán , francés y búlgaro , y luego al japonés y al chino . [46] La norma también estuvo disponible en Braille .

1984: TC 97 consideró ALGOL 68 para su estandarización como "Nuevo elemento de trabajo" TC97/N1642 [2][3]. Alemania Occidental, Bélgica, Países Bajos, URSS y Checoslovaquia estaban dispuestos a participar en la preparación de la norma, pero la URSS y Checoslovaquia "no eran los miembros adecuados de los comités ISO adecuados"[4] y la normalización ISO de Algol 68 se estancó.[5]

1988: Posteriormente, ALGOL 68 se convirtió en uno de los estándares GOST en Rusia.

Elementos lingüísticos notables

Símbolos en negrita y palabras reservadas

El lenguaje estándar contiene alrededor de sesenta palabras reservadas, generalmente impresas en negrita, y algunas con equivalentes de "símbolos breves":

MODO , OP , PRIO , PROC , FLEX , MONTÓN , LOC , LARGO , REF , CORTO , BITS , BOOL , BYTES , CHAR , COMPL , INT , REAL , SEMA , CADENA , VOID , CANAL , ARCHIVO , FORMATO , ESTRUCTURA , UNION , EN "@", YA SEA r0 , ES ":=:", NO ES r0 ":/=:" ":≠:", OF "→" r0 , VERDADERO , FALSO , VACÍO , NIL "○", SALTAR " ~", CO "¢", COMENTARIO "¢", PR , PRAGMAT , CASE ~ IN ~ OUSE ~ IN ~ OUT ~ ESAC "( ~ | ~ |: ~ | ~ | ~ )", FOR ~ FROM ~ TO ~ BY ~ MIENTRAS ~ HACER ~ OD , SI ~ ENTONCES ~ ELIF ~ ENTONCES ~ ELSE ~ FI "( ~ | ~ |: ~ | ~ | ~ )", PAR COMENZAR ~ FIN "( ~ )", IR A , IR A , SALIR " □" r0 .  

Unidades: Expresiones

La construcción básica del lenguaje es la unidad . Una unidad puede ser una fórmula , una cláusula adjunta , un texto de rutina o una de varias construcciones técnicamente necesarias (asignación, salto, salto, nihil). El término técnico cláusula adjunta unifica algunas de las construcciones inherentemente entre corchetes conocidas como bloque , declaración do , declaración switch en otros lenguajes contemporáneos. Cuando se utilizan palabras clave, generalmente se utiliza la secuencia de caracteres invertida de la palabra clave de introducción para terminar el recinto, por ejemplo ( IF ~ THEN ~ ELSE ~ FI , CASE ~ IN ~ OUT ~ ESAC , FOR ~ WHILE ~ DO ~ OD ). Stephen Bourne reutilizó esta sintaxis de comando protegido en el shell común de Unix Bourne . Una expresión también puede producir un valor múltiple , que se construye a partir de otros valores mediante una cláusula colateral . Esta construcción se parece al paquete de parámetros de una llamada a procedimiento.

modo: Declaraciones

Los tipos de datos básicos (llamados s modeen el lenguaje de Algol 68) son ,, real( número complejo ) ,, y . Por ejemplo:intcomplboolcharbitsbytes

INT n = 2; CO n se fija como una constante de 2. CO INT m := 3; CO m es una variable local recién creada cuyo valor se establece inicialmente en 3. CO CO Esto es la abreviatura de ref int m = loc int := 3; CO REAL avogadro = 6.0221415⏨23; CO Número de Avogadro CO largo largo real largo largo pi = 3,14159 26535 89793 23846 26433 83279 50288 41971 69399 37510; COMPL raíz cuadrada de menos uno = 0 ⊥ 1;

Sin embargo, la declaración REAL x;es solo azúcar sintáctica para . Es decir, es realmente el identificador constante de una referencia a una variable REAL local recién generada .REF REAL x = LOC REAL;x

Además, en lugar de definir ambos floaty double, o inty longy short, etc., ALGOL 68 proporciona modificadores , de modo que lo actualmente común doublese escribiría como LONG REAL o LONG LONG REAL , por ejemplo. Las constantes de preludio max real y min long intse proporcionan para adaptar los programas a diferentes implementaciones.

Es necesario declarar todas las variables, pero la declaración no tiene que preceder al primer uso.

declarante-primitivo: INT , REAL , COMPL , COMPLEX G , BOOL , CHAR , STRING , BITS , BYTES , FORMAT , FILE , PIPE G , CHANNEL , SEMA

Se pueden crear tipos complejos a partir de otros más simples utilizando varios constructores de tipos:

Para ver algunos ejemplos, consulte Comparación de ALGOL 68 y C++ .

Otros símbolos de declaración incluyen: FLEX , HEAP , LOC , REF , LONG , SHORT , EVENT S

Se puede declarar un nombre para un modo (tipo) usando una declaración MODE , que es similar a TYPEDEF en C/C++ y TYPE en Pascal:

 INT máx=99; MODE nuevomodo = [0:9][0:max] STRUCT ( LONG  REAL a, b, c, SHORT  INT i, j, k, REF  REAL r );

Esto es similar al siguiente código C:

 constante int máx = 99 ; estructura typedef { doble a , b , c ; corto i , j , k ; flotador * r ; } nuevo modo [ 9 + 1 ][ máx + 1 ];                 

Para ALGOL 68, solo la indicación de modo NEWMODE aparece a la izquierda del símbolo igual y, lo más notable, la construcción se realiza y se puede leer de izquierda a derecha sin tener en cuenta las prioridades. Además, el límite inferior de las matrices Algol 68 es uno de forma predeterminada, pero puede ser cualquier número entero desde -max int hasta max int .

Las declaraciones de modo permiten que los tipos sean recursivos : definidos directa o indirectamente en términos de sí mismos. Esto está sujeto a algunas restricciones; por ejemplo, estas declaraciones son ilegales:

 MODO  A = REF  A  MODO  A = ESTRUCTURA ( A a, B b) MODO  A = PROC ( A a) A

mientras que estos son válidos:

 MODO  A = ESTRUCTURA ( REF  A a, B b) MODO  A = PROC ( REF  A a) REF  A

Coacciones: casting

Las coacciones producen un coaccionado a partir de un coaccionado según tres criterios: el modo a priori del coaccionado antes de la aplicación de cualquier coerción, el modo a posteriori del coaccionado requerido después de esas coacciones, y la posición sintáctica o "tipo" del coaccionado. . Las coacciones pueden ser en cascada.

Las seis coerciones posibles se denominan deprocedimiento , desreferenciación , unión , ampliación , remo y anulación . Cada coerción, excepto la de unir , prescribe un efecto dinámico correspondiente sobre los valores asociados. Por tanto, muchas acciones primitivas pueden programarse implícitamente mediante coerciones.

Fuerza del contexto – coacciones permitidas:

Jerarquía de coerción con ejemplos.

ALGOL 68 tiene una jerarquía de contextos que determinan el tipo de coerciones disponibles en un punto particular del programa. Estos contextos son:

Para obtener más detalles sobre Primarios, Secundarios, Terciarios y Cuaternarios, consulte Prioridad de operadores.

Los pragmats son directivas del programa, normalmente sugerencias para el compilador; en los idiomas más nuevos se les llama "pragmas" (sin 't'). p.ej

Montón PRAGMAT = 32 Montón PRAGMAT PR = 32 PR

Los comentarios se pueden insertar de varias maneras:

¢ La forma original de añadir tus 2 céntimos a un programa ¢ COMENTARIO comentario "negrita" COMENTARIO CO Estilo i comentario CO# Comentario de estilo ii #£ Este es un comentario de hash/libra para un teclado del Reino Unido £

Normalmente, los comentarios no se pueden anidar en ALGOL 68. Esta restricción se puede eludir usando diferentes delimitadores de comentarios (por ejemplo, use hash solo para eliminaciones temporales de código).

Expresiones y enunciados compuestos.

ALGOL 68 es un lenguaje de programación orientado a expresiones , el valor devuelto por una declaración de asignación es una referencia al destino. Por lo tanto, el siguiente es el código ALGOL 68 válido:

 REAL medio pi, un pi; un pi := 2 * ( medio pi := 2 * arco tan(1) )

Esta noción está presente en C y Perl , entre otros. Tenga en cuenta que, al igual que en lenguajes anteriores como Algol 60 y FORTRAN , se permiten espacios en los identificadores, por lo que half pies un identificador único (evitando así los guiones bajos versus las mayúsculas y minúsculas versus todos los problemas de minúsculas ).

Como otro ejemplo, para expresar la idea matemática de una suma de f(i)i=1 an, es suficiente la siguiente expresión entera ALGOL 68 :

( INT suma := 0; FOR i TO n DO suma +:= f(i) OD ; suma)

Tenga en cuenta que, al ser una expresión entera, el bloque de código anterior se puede usar en cualquier contexto donde se pueda usar un valor entero . Un bloque de código devuelve el valor de la última expresión que evaluó; esta idea está presente en Lisp , entre otros lenguajes.

Todas las declaraciones compuestas terminan con corchetes de cierre distintivos:

 IF condición ENTONCES declaraciones [ ELSE declaraciones ] FI Forma "breve": ( condición | declaraciones | declaraciones )
 IF condición1 ENTONCES declaraciones ELIF condición2 ENTONCES declaraciones [ ELSE declaraciones ] FI Forma "breve": ( condición1 | declaraciones |: condición2 | declaraciones | declaraciones )

Este esquema no sólo evita el problema del else colgante , sino que también evita tener que utilizar BEGINy en secuencias de declaracionesEND incrustadas .

 CASE cambiar declaraciones IN , declaraciones,... [ declaraciones OUT ] ESAC Forma "breve": (cambiar | declaraciones, declaraciones,... | declaraciones)
 CASE switch1 declaraciones IN , declaraciones,... OUSE switch2 declaraciones IN , declaraciones,... [ declaraciones OUT ] ESAC forma "breve" de declaración CASE : ( switch1 | declaraciones, declaraciones,... |: switch2 | declaraciones, declaraciones ,... | declaraciones )

Ejemplo de cláusula de elección con símbolos breves :

PROC días en el mes = ( INT año, mes) INT : (mes| 31, (año÷×4=0 ∧ año÷×100≠0 ∨ año÷×400=0 | 29 | 28 ), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );

Ejemplo de cláusula de elección con símbolos en negrita :

PROC días en el mes = ( INT año, mes) INT : CASE mes IN 31, SI año MOD 4 EQ 0 Y año MOD 100 NE 0 O año MOD 400 EQ 0 ENTONCES 29 ELSE 28 FI , 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ESAC ;

Ejemplo de cláusula de elección que combina símbolos en negrita y breve :

PROC días en el mes = ( INT año, mes) INT : CASE mes IN¢ene¢ 31,¢Feb¢ (año MOD 4 = 0 Y año MOD 100 ≠ 0 O año MOD 400 = 0 | 29 | 28 ),¢Mar¢ 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ¢ a Dic. ¢ ESAC ;

Algol68 permitió que el conmutador fuera de tipo INT o (exclusivamente) UNION . Este último permite aplicar tipos fuertes en las variables UNION . cf unión a continuación, por ejemplo.

[ FOR índice ] [ FROM primero ] [ BY incremento ] [ TO último ] [ WHILE condición ] Declaraciones DO OD La forma mínima de una "cláusula de bucle" es la siguiente: Declaraciones DO OD

Esto se consideró el bucle "universal", la sintaxis completa es:

PARA i DE 1 POR -22 A -333 MIENTRAS i×i≠4444 DO ~ OD

La construcción tiene varios aspectos inusuales:

INT suma cuadrada:=0; POR MI TIEMPO print(("Hasta ahora:",i,nueva línea)); suma cuadrada≠70 ↑2HACER suma cuadrada+:=i ↑2sobredosis

Las "extensiones" posteriores al estándar Algol68 permitieron reemplazar el elemento sintáctico TO con UPTO y DOWNTO para lograr una pequeña optimización. Los mismos compiladores también incorporaron:

Se pueden encontrar más ejemplos en los ejemplos de código siguientes.

ALGOL 68 admite matrices con cualquier número de dimensiones y permite dividir filas o columnas completas o parciales.

  VECTOR DE MODO = [1:3] REAL ; # declaración de MODO de vector (typedef) #  MATRIZ DE MODO = [1:3,1:3] REAL ; # declaración de MODO de matriz (typedef) # VECTOR v1 := (1,2,3); # variable de matriz inicialmente (1,2,3) # [] REAL v2 = (4,5,6); # matriz constante, tipo equivalente a VECTOR , los límites están implícitos # OP + = ( VECTOR a,b) VECTOR : # definición binaria del erador OP # ( VECTOR out; FOR i FROM ⌊a TO ⌈a DO out[i] := a [i]+b[i] OD ; fuera); MATRIZ m := (v1, v2, v1+v2);   imprimir ((m[,2:])); # una porción de la segunda y tercera columnas #

Las matrices se pueden dividir de cualquier manera, por ejemplo:

  fila VECTOR REF = m[2,]; # definir un REF (puntero) a la segunda fila #  REF  VECTOR col = m[,2]; # definir un REF (puntero) a la segunda columna #

ALGOL 68 soporta múltiples estructuras de campo ( STRUCT ) y modos unidos . Las variables de referencia pueden apuntar a cualquier MODO , incluidos sectores de matriz y campos de estructura.

Para ver un ejemplo de todo esto, aquí está la declaración de lista enlazada tradicional:

 MODO  NODO = UNION ( VOID , REAL , INT , COMPL , STRING ), LISTA = ESTRUCTURA ( NODE val, REF  LIST siguiente);

Ejemplo de uso para UNION CASE de NODO :

proc: Procedimientos

Las declaraciones de procedimiento ( PROC ) requieren especificaciones de tipo tanto para los parámetros como para el resultado ( VOID si no hay ninguno):

 PROC máx de real = ( REAL a, b) REAL : SI a > b ENTONCES a ELSE b FI ;

o, utilizando la forma "breve" de la declaración condicional:

 PROC máx de real = ( REAL a, b) REAL : (a>b | a | b);

El valor de retorno de a proces el valor de la última expresión evaluada en el procedimiento. También se permiten referencias a procedimientos ( ref proc ). Los parámetros de llamada por referencia se proporcionan especificando referencias (como ref real) en la lista de argumentos formales. El siguiente ejemplo define un procedimiento que aplica una función (especificada como parámetro) a cada elemento de una matriz:

 Aplicar PROC = ( REF [] REAL a, PROC ( REAL ) REAL f):   PARA i DE  LWB a A  UPB a HACER a[i] := f(a[i]) OD

Esta simplicidad de código era inalcanzable en el predecesor de ALGOL 68, ALGOL 60 .

op: Operadores

El programador puede definir nuevos operadores y tanto éstos como los predefinidos pueden verse sobrecargados y el codificador puede cambiar sus prioridades. El siguiente ejemplo define el operador MAXcon versiones diádicas y monádicas (escaneando los elementos de una matriz).

 PRIO  MÁX = 9;   OP  MAX = ( INT a,b ) INT : ( a>b | a | b ); OP  MAX = ( REAL a,b ) REAL : ( a>b | a | b ); OP  MAX = ( COMPL a,b) COMPL : ( ABS a > ABS b | a | b );   OP  MAX = ([] REAL a) REAL : ( REAL salida := a[ LWB a]; FOR i FROM  LWB a + 1 HASTA  UPB a DO ( a[i]>out | out:=a[i] ) OD ; afuera)

Operaciones de matriz, procedimiento, desreferencia y coerción.

Técnicamente no son operadores, sino que se consideran "unidades asociadas con nombres".

Operadores monádicos

Operadores diádicos con prioridades asociadas

Detalles específicos:

Relaciones de asignación e identidad, etc.

Técnicamente no son operadores, sino que se consideran "unidades asociadas con nombres".

Nota: Los cuaternarios incluyen los nombres SKIP y ~.

":=:" (alternativamente " IS ") prueba si dos punteros son iguales; ":/=:" (alternativamente " ISNT ") prueba si son desiguales.

Por qué se necesitan :=: y :/=:: considere intentar comparar dos valores de puntero, como las siguientes variables, declaradas como punteros a enteros:

REF INT ip, jp

Ahora considere cómo decidir si estos dos apuntan a la misma ubicación o si uno de ellos apunta a NIL . La siguiente expresión

ip = jp

eliminará la referencia de ambos punteros a valores de tipo INT y los comparará, ya que el operador "=" está definido para INT , pero no para REF INT . No es legal definir "=" para operandos de tipo REF INT e INT al mismo tiempo, porque entonces las llamadas se vuelven ambiguas, debido a las coerciones implícitas que se pueden aplicar: ¿deben dejarse los operandos como REF INT y esa versión de ¿Llamó el operador? ¿O debería eliminarse la referencia a INT y utilizar esa versión en su lugar? Por lo tanto nunca podrá hacerse legal la siguiente expresión:

ip = NIL

De ahí la necesidad de construcciones separadas que no estén sujetas a las reglas de coerción normales para operandos de operadores. Pero hay un problema. Las siguientes expresiones:

ip :=: jp
ip :=: NIL

si bien es legal, probablemente no hará lo que se podría esperar. Siempre devolverán FALSO , porque están comparando las direcciones reales de las variables ipy jp, en lugar de lo que apuntan . Para lograr el efecto correcto, habría que escribir

ip :=: REF INT(jp)
ip :=: REF INT(NIL)

Caracteres especiales

Teclado IBM 2741 con símbolos APL

La mayoría de los caracteres "especiales" de Algol (⊂, ≡, ␣, ×, ÷, ≤, ≥, ≠, ¬, ⊃, ≡, ∨, ∧, →, ↓, ↑, ⌊, ⌈, ⎩, ⎧, ⊥, ⏨, ¢, ○ y □) se pueden encontrar en el teclado IBM 2741 con el cabezal de impresión APL "pelota de golf" insertado; estos estuvieron disponibles a mediados de la década de 1960 mientras se redactaba ALGOL 68. Estos caracteres también forman parte del estándar Unicode y la mayoría de ellos están disponibles en varias fuentes populares .

transput: Entrada y salida

Transput es el término utilizado para referirse a las instalaciones de entrada y salida de ALGOL 68. Incluye procedimientos predefinidos para transferencia binaria, formateada y sin formato. Los archivos y otros dispositivos de transferencia se manejan de manera consistente e independiente de la máquina. El siguiente ejemplo imprime algunos resultados sin formato en el dispositivo de salida estándar :

 imprimir ((nueva página, "Título", nueva línea, "El valor de i es ", i, "y x[i] es ", x[i], nueva línea))

Tenga en cuenta los procedimientos predefinidos newpagey newlinepasados ​​como argumentos.

Libros, canales y archivos.

Se considera TRANSPUT de LIBROS , CANALES y ARCHIVOS :

transputación formateada

La "transmisión formateada" en la transmisión de ALGOL 68 tiene su propia sintaxis y patrones (funciones), con FORMAT incrustados entre dos caracteres $. [49]

Ejemplos:

printf (($2l"La suma es:"x, g(0)$, m + n)); ¢ imprime lo mismo que: ¢ print ((nueva línea, nueva línea, "La suma es:", espacio, entero (m + n, 0))

par: procesamiento paralelo

ALGOL 68 admite la programación de procesamiento paralelo. Usando la palabra clave PAR , una cláusula colateral se convierte en una cláusula paralela , donde la sincronización de acciones se controla mediante semáforos . En A68G, las acciones paralelas se asignan a subprocesos cuando están disponibles en el sistema operativo anfitrión . En A68S se implementó un paradigma diferente de procesamiento paralelo (ver más abajo).

PROC comer = VOID : ( muffins-:=1; print(("¡Yum!",nueva línea))), hablar = VOID : ( palabras-:=1; print(("Yak...",nueva línea))); muffins INT := 4, palabras := 8; Boca SEMA = NIVEL 1; PAR  COMIENZAR  MIENTRAS muffins > 0 HACER  ABAJO la boca; comer; ARRIBA boca OD , MIENTRAS palabras > 0 HACER  ABAJO boca; hablar; ARRIBA boca OD EXTREMO

Misceláneas

Por sus complejidades técnicas, ALGOL 68 necesita una gran cantidad de métodos para negar la existencia de algo:

SALTAR , "~" o "?" C – un valor indefinido siempre sintácticamente válido, EMPTY – el único valor admisible para VOID , necesario para seleccionar VOID en UNION , VOID – sintácticamente como MODE , pero no uno, NIL o "○" – un nombre que no denota nada, de un modo de referencia no especificado,() o específicamente [1:0] INT : un vacío es una matriz vacía (aquí específicamente de MODE [] INT ). indefinido : un procedimiento de informes estándar que genera una excepción en el sistema de ejecución.ℵ: se utiliza en el informe de estándares para inhibir la introspección de ciertos tipos. por ejemplo, SEMA

El término NIL IS var siempre se evalúa como VERDADERO para cualquier variable (pero consulte más arriba para conocer el uso correcto de IS  :/=:), mientras que no se sabe con qué valor se evalúa una comparación x < SKIP para cualquier número entero x .

ALGOL 68 deja intencionalmente sin definir lo que sucede en caso de desbordamiento de enteros , la representación de bits enteros y el grado de precisión numérica para punto flotante.

Ambos informes oficiales incluían algunas características avanzadas que no formaban parte del lenguaje estándar. Estos fueron señalados con un ℵ y considerados efectivamente privados. Los ejemplos incluyen "≮" y "≯" para plantillas, OUTTYPE / INTYPE para tipeo crudo y los operadores STRAIGHTOUT y STRAIGHTIN para "enderezar" matrices y estructuras anidadas.

Ejemplos de uso

Ejemplo de código

Este programa de muestra implementa el Tamiz de Eratóstenes para encontrar todos los números primos menores que 100. NIL es el análogo ALGOL 68 del puntero nulo en otros idiomas. La notación x OF y accede a un miembro x de una ESTRUCTURA y .

BEGIN # Tamiz de números primos Algol-68, estilo funcional #   Error de PROC = ( STRING s) VOID : (print(( nueva línea, " error: ", s, nueva línea)); IR A detener); PROC uno a = ( INT n) LISTA : ( PROC f = ( INT m,n) LISTA : (m>n | NIL | cons(m, f(m+1,n))); f(1,n));    LISTA DE MODOS = NODO REF ; NODO DE MODO = ESTRUCTURA ( INT h, LISTA t); PROC cons = ( INT n, LISTA l) LISTA : NODO DEL MONTÓN  := (n,l); PROC hd = ( LISTA l) INT : ( l ES NULO | error("hd NIL "); SALTAR | h DE l ); PROC tl = ( LISTA l) LISTA : ( l ES NULO | error("tl NIL "); SALTAR | t DE l ); PROC show = ( LISTA l) VOID : ( l NO ES NULO | print((" ",whole(hd(l),0))); show(tl(l)));        Filtro PROC = ( PROC ( INT ) BOOL p, LIST l) LIST : SI l ES  NIL  ENTONCES  NIL  ELIF p(hd(l)) ENTONCES cons(hd(l), filter(p,tl(l))) ELSE filter (p, tl(l)) FI ;   PROC tamiz = ( LISTA l) LISTA : SI l ES  NIL  ENTONCES  NIL  ELSE  PROC no es múltiple = ( INT n) BOOL : n MOD hd(l) ~= 0; contras (hd (l), tamiz (filtro (no múltiple, tl (l)))) FI ;   PROC primos = ( INT n) LISTA : tamiz (tl (uno a (n)));   mostrar (primos (100))FIN

Sistemas operativos escritos en ALGOL 68

Nota: Las computadoras de la era soviética Эльбрус-1 (Elbrus-1) y Эльбрус-2 se crearon utilizando el lenguaje de alto nivel Эль-76 (AL-76), en lugar del ensamblaje tradicional. Эль-76 se parece a Algol-68. La principal diferencia son los tipos de enlace dinámico en Эль-76 admitidos a nivel de hardware. Эль-76 se utiliza para aplicaciones, control de trabajos y programación de sistemas. [53]

Aplicaciones

Tanto ALGOL 68C como ALGOL 68-R están escritos en ALGOL 68, lo que efectivamente convierte a ALGOL 68 en una aplicación en sí misma. Otras aplicaciones incluyen:

Bibliotecas y API

Representación del programa

Una característica de ALGOL 68, heredada de la tradición ALGOL , son sus diferentes representaciones. Existe un lenguaje de representación utilizado para describir algoritmos en trabajos impresos, un lenguaje estricto (definido rigurosamente en el Informe) y un lenguaje de referencia oficial destinado a ser utilizado en la entrada del compilador. Los ejemplos contienen palabras en tipo de letra NEGRITA , este es el lenguaje ESTRICTO . Las palabras reservadas de ALGOL 68 están efectivamente en un espacio de nombres diferente al de los identificadores, y se permiten espacios en los identificadores, por lo que el siguiente fragmento es legal:

 INT un int real = 3 ;

El programador que escribe código ejecutable no siempre tiene la opción de utilizar el tipo de letra BOLD o subrayado en el código, ya que esto puede depender de cuestiones culturales y de hardware. Se han ideado diferentes métodos para indicar estos identificadores. A esto se le llama régimen de refuerzo . Por ejemplo, todas o algunas de las siguientes pueden ser representaciones de programación disponibles :

 INT un int real = 3; # el lenguaje ESTRICTO #'INT'A REAL INT = 3; # CITA estilo de frotamiento #.INT UN REAL INT = 3; # Estilo de frotamiento de PUNTOS # INT un int real = 3; # Estilo de arrastre SUPERIOR # int a_real_int = 3; # Estilo de desplazamiento RES, hay 61 palabras reservadas aceptadas #

Todas las implementaciones deben reconocer al menos POINT, UPPER y RES dentro de las secciones PRAGMAT. De estos, el control POINT y UPPER son bastante comunes, mientras que el control RES es una contradicción con la especificación (ya que no hay palabras reservadas). QUOTE (citas con apóstrofe único) fue la recomendación original, mientras que las citas con apóstrofes coincidentes, comunes en ALGOL 60, no se usan mucho en ALGOL 68. [56]

Se recomendaron los siguientes personajes para su portabilidad y se denominaron "personajes dignos" en el Informe sobre la representación de hardware estándar de Algol 68 Archivado el 2 de enero de 2014 en Wayback Machine :

Esto reflejó un problema en la década de 1960 donde algunos hardware no admitían minúsculas ni otros caracteres que no fueran ASCII ; de hecho, en el informe de 1973 se escribió: "Cuatro caracteres dignos de mención: "|", "_", "[ " y "]" suelen estar codificados de forma diferente, incluso en instalaciones que nominalmente utilizan el mismo juego de caracteres".

Ejemplo de diferentes representaciones de programas.

ALGOL 68 permite que cada lenguaje natural defina su propio conjunto de palabras clave Algol-68. Como resultado, los programadores pueden escribir programas utilizando palabras clave de su idioma nativo. A continuación se muestra un ejemplo de un procedimiento sencillo que calcula "el día siguiente", el código está en dos idiomas: inglés y alemán. [ cita necesaria ]

# Fecha del día siguiente - variante en inglés # MODE  DATE = STRUCT ( INT día, STRING mes, INT año); PROC el día siguiente = ( FECHA x) FECHA : SI día DE x < duración del mes (mes DE x, año DE x) ENTONCES (día DE x + 1, mes DE x, año DE x) ELIF mes DE x = " Diciembre" ENTONCES (1, "enero", año DE x + 1) ELSE (1, sucesor del mes (mes DE x), año DE x) FI ;
# Nachfolgetag - Deutsche Variante # MENGE  DATUM = TUPEL ( etiqueta GANZ , WORT monat, GANZ jahr); FUNKTION naechster tag nach = ( DATUM x) DATUM : WENN tag VON x < monatslaenge(monat VON x, jahr VON x) DANN (tag VON x + 1, monat VON x, jahr VON x) WENNABER monat VON x = "diciembre" DANN (1, "enero", jahr VON x + 1) ANSONSTEN (1, nachfolgemonat(monat VON x), jahr VON x) ENDEWENN ;

Ejemplo ruso/soviético: en inglés, la declaración de caso de Algol68 dice CASE ~ IN ~ OUT ~ ESAC , en cirílico se lee выб ~ в ~ либо ~ быв .

Revisiones

Excepto donde se indique lo contrario (con un superíndice ), el lenguaje descrito anteriormente es el del "Informe Revisado (r1) ".

El idioma del informe no revisado.

El lenguaje original (según el "Informe final" r0 ) difiere en la sintaxis del modo cast y tenía la característica de proceduring , es decir, coaccionar el valor de un término en un procedimiento que evalúa el término. El objetivo del procedimiento sería hacer que las evaluaciones sean perezosas . La aplicación más útil podría haber sido la evaluación en cortocircuito de operadores booleanos. En:

OP  ANDF = ( BOOL a, PROC  BOOL b) BOOL :(a | b | FALSO ); OP  ORF = ( BOOL a, PROC  BOOL b) BOOL :(a | VERDADERO | b);

b sólo se evalúa si a es verdadero.

Como se define en ALGOL 68, no funcionó como se esperaba, por ejemplo en el código:

IF  FALSE  ANDF  CO proc bool: CO ( print ("No debe ejecutarse"); TRUE ) ENTONCES ...

En contra de las ingenuas expectativas de los programadores, la impresión se ejecutaría ya que solo se procesó el valor de la cláusula adjunta elaborada después de ANDF . Inserción textual del PROC BOOL comentado : lo hace funcionar.

Algunas implementaciones emulan el comportamiento esperado para este caso especial por extensión del lenguaje.

Antes de la revisión, el programador podría decidir que los argumentos de un procedimiento se evalúen en serie en lugar de colateralmente utilizando punto y coma en lugar de comas ( gomma s).

Por ejemplo en:

Prueba PROC = ( REAL a; REAL b):......prueba (x MÁS 1, x);

Se garantiza que el primer argumento a probar se evaluará antes que el segundo, pero de la forma habitual:

Prueba PROC = ( REAL a, b):......prueba (x MÁS 1, x);

entonces el compilador podría evaluar los argumentos en el orden que quisiera.

Propuestas de extensión del IFIP WG 2.1

Tras la revisión del informe, se han propuesto algunas extensiones del lenguaje para ampliar su aplicabilidad:

Hasta ahora, en Algol 68 Genie sólo se ha implementado una parametrización parcial.

Cronograma de implementación y especificación de True ALGOL 68

El lenguaje S3 que se utilizó para escribir el sistema operativo ICL VME y muchos otros programas de sistema en la serie ICL 2900 fue un derivado directo de Algol 68. Sin embargo, omitió muchas de las características más complejas y reemplazó los modos básicos con un conjunto de tipos de datos que se asignan directamente a la arquitectura de hardware de la serie 2900.

Extensiones específicas de implementación

ALGOL 68R (R) de RRE fue la primera implementación del subconjunto ALGOL 68, ejecutándose en ICL 1900 . Según el idioma original, las principales restricciones del subconjunto fueron la definición antes de su uso y la ausencia de procesamiento paralelo. Este compilador fue popular en las universidades del Reino Unido en la década de 1970, donde muchos estudiantes de informática aprendieron ALGOL 68 como su primer lenguaje de programación; el compilador era conocido por sus buenos mensajes de error.

ALGOL 68RS (RS) de RSRE era un sistema compilador portátil escrito en ALGOL 68RS (arrancado desde ALGOL 68R) e implementado en una variedad de sistemas, incluidos ICL 2900 / Series 39 , Multics y DEC VAX/VMS . El lenguaje se basó en el Informe Revisado, pero con restricciones de subconjunto similares a las de ALGOL 68R. Este compilador sobrevive en forma de compilador Algol68-to-C.

En ALGOL 68S (S) de la Universidad Carnegie Mellon , se mejoró el poder del procesamiento paralelo agregando una extensión ortogonal, eventing . Cualquier declaración de variable que contuviera la palabra clave EVENTO hacía que las asignaciones a esta variable fueran elegibles para evaluación paralela, es decir, el lado derecho se convirtió en un procedimiento que se movió a uno de los procesadores del sistema multiprocesador C.mmp . Los accesos a dichas variables se retrasaron después de la finalización de la asignación.

Cambridge ALGOL 68C (C) era un compilador portátil que implementaba un subconjunto de ALGOL 68, restringiendo las definiciones de los operadores y omitiendo la recolección de basura, las filas flexibles y la transmisión formateada.

Algol 68 Genie (G) de M. van der Veer es una implementación de ALGOL 68 para las computadoras y sistemas operativos actuales.

"A pesar de las buenas intenciones, un programador puede violar la portabilidad al emplear inadvertidamente una extensión local. Para protegerse contra esto, cada implementación debe proporcionar una opción pragmática PORTCHECK. Mientras esta opción esté vigente, el compilador imprime un mensaje para cada construcción que reconoce como violando alguna restricción de portabilidad." [66]

Citas

Ver también

Referencias

Citas

  1. ^ van Wijngaarden, Adriaan ; Mailloux, Barry James ; Peck, John Edward Lancelot ; Koster, Cornelis Hermanus Antonius ; Sintzoff, Michel [en francés] ; Lindsey, Charles Hodgson ; Meertens, Lambert Guillaume Louis Théodore ; Fisker, Richard G., eds. (1976). Informe revisado sobre el lenguaje algorítmico ALGOL 68 (PDF) . Springer-Verlag . ISBN 978-0-387-07592-1. OCLC  1991170. Archivado (PDF) desde el original el 19 de abril de 2019 . Consultado el 11 de mayo de 2019 .
  2. ^ ab Dennis Ritchie (abril de 1993). "El desarrollo del lenguaje C" (PDF) . Archivado desde el original (PDF) el 6 de noviembre de 2005 . Consultado el 26 de abril de 2007 .
  3. ^ Influencia en C: tipos, estructuras, matrices, punteros y procedimientos - Dennis Ritchie [2]
  4. ^ ab Dennis Ritchie (junio de 1988). «C y Algol 68» . Consultado el 15 de septiembre de 2006 .
  5. ^ Influencia en C: unión, estructura, sintaxis y precisión larga – Dennis Ritchie [4]
  6. ^ "Una historia de C++: 1979-1991" (PDF) . Marzo de 1993. Página 12, segundo párrafo: Algol68 [proporcionó] sobrecarga de operadores (§3.3.3), referencias (§3.3.4) y la capacidad de declarar variables en cualquier lugar de un bloque (§3.3.1) . Consultado el 6 de mayo de 2008 .
  7. ^ "Entrevista a Guido van Rossum". Julio de 1998. Archivado desde el original el 1 de mayo de 2007 . Consultado el 29 de abril de 2007 .
  8. ^ "Una historia más breve de ALGOL 68". Archivado desde el original el 10 de agosto de 2006 . Consultado el 15 de septiembre de 2006 .
  9. ^ Veer, Marcel van der (5 de abril de 2023). "Informe revisado sobre el lenguaje algorítmico Algol 68". jmvdveer.home.xs4all.nl/ . Archivado desde el original el 17 de marzo de 2013.
  10. ^ Veer, Marcel van der (5 de abril de 2023). "Informe revisado sobre el lenguaje algorítmico Algol 68". jmvdveer.home.xs4all.nl/ . Archivado desde el original el 17 de marzo de 2013.
  11. ^ Veer, Marcel van der (5 de abril de 2023). "Informe revisado sobre el lenguaje algorítmico Algol 68". jmvdveer.home.xs4all.nl/ . Archivado desde el original el 17 de marzo de 2013.
  12. ^ Veer, Marcel van der (5 de abril de 2023). "Informe revisado sobre el lenguaje algorítmico Algol 68". jmvdveer.home.xs4all.nl/ . Archivado desde el original el 17 de marzo de 2013.
  13. ^ "¿Gommas?".
  14. Informe revisado sobre el lenguaje algorítmico Algol 68 Archivado el 17 de marzo de 2013 en Wayback Machine . jmvdveer.home.xs4all.nl (20 de diciembre de 1968). Recuperado el 21 de julio de 2013.
  15. ^ Terejov, Andrey (2014). "ALGOL 68 y su impacto en la URSS y la programación rusa". 2014 Tercera Conferencia Internacional sobre Tecnología Informática en Rusia y la ex Unión Soviética . págs. 97-106. doi :10.1109/SoRuCom.2014.29. ISBN 978-1-4799-1799-0. S2CID  16097093.
  16. ^ http://toc.proceedings.com/25445webtoc.pdf "Алгол 68 и его влияние на программирование в СССР и России" - páginas: 336 y 342
  17. ^ Lindsey 1996.
  18. ^ ab Lindsey, Charles H. (1996). Bergin, TJ; Gibson, RG (eds.). Una historia de ALGOL 68 . Historia de los Lenguajes de Programación-II . vol. 28. también en ACM SIGPLAN Avisos 28(3), marzo de 1993 (incluye una bibliografía completa de las reuniones y discusiones antes, durante y después del desarrollo de ALGOL 68). Prensa ACM . págs. 97-132. doi :10.1145/155360.155365. ISBN 978-0-201-89502-5. {{cite book}}: |journal=ignorado ( ayuda )
  19. ^ Programación sencilla de Algol 68
  20. ^ Veer, Marcel van der. "Marcel van der Veer - Algol 68 Genio". jmvdveer.home.xs4all.nl/ .
  21. ^ Lindsey 1993, pág. 7.
  22. ^ abcd Lindsey 1993, pag. 9.
  23. ^ Lindsey 1993, pág. 24.
  24. ^ ab Lindsey 1993, pág. 10.
  25. ^ "El Boletín Algol".
  26. ^ ab Lindsey 1993, pág. 12.
  27. ^ Lindsey 1993, pág. 13.
  28. ^ Lindsey 1993, pág. 15.
  29. ^ Hoare, C. a. R. (noviembre de 1968). "Crítica de ALGOL 68". Boletín ALGOL . 29 : 27–29.
  30. ^ ab Peck, JEL, ed. (1970), Actas de la conferencia de trabajo del IFIP sobre la implementación de ALGOL 68 , Munich: Holanda Septentrional, ISBN 0-7204-2045-8
  31. ^ abcd Koster, CHA "Una historia más breve de Algol 68". Archivado desde el original el 17 de diciembre de 2007.
  32. ^ van der Veer, Marcel. "Implementaciones de Algol 68 de código abierto". algol68.sourceforge.net .
  33. ^ E. Marchesi, José. "Interfaz Algol68 para GCC". jemarch.net .
  34. ^ Van Wijngaarden, A.; Mailloux, BJ; Peck, J.; Koster, CHA (1 de marzo de 1968). "Borrador de informe sobre el lenguaje algorítmico ALGOL 68". Boletín ALGOL (Sup 26): 1–84 . Consultado el 7 de abril de 2023 , hasta marzo de 1968.
  35. ^ Sidney Marshall, "Implementación de ALGOL 68", Actas de la conferencia de trabajo del IFIP sobre la implementación de ALGOL 68 , Munich, 20 al 24 de julio de 1970, JEL Peck, editor, Holanda Septentrional, páginas 239-243.
  36. ^ Sidney Marshall, Sobre la implementación de ALGOL 68 , Tesis doctoral, Dartmouth College, 1972.
  37. ^ Informe revisado de Algol 68
  38. ^ Negro, AP; Rayward-Smith, VJ (1 de mayo de 1978). "Propuestas para ALGOL H - Un superlenguaje de ALGOL 68". Boletín ALGOL (42): 36–49 . Consultado el 7 de abril de 2023 , hasta mayo. 1978.
  39. ^ "Algol68 S (S) publicado en Internet". Archivado desde el original el 3 de diciembre de 2005 . Consultado el 30 de agosto de 2004 .
  40. ^ Veer, Marcel van der. "Marcel van der Veer - Algol 68 Genio". jmvdveer.home.xs4all.nl/ . Consultado el 7 de abril de 2023 .
  41. ^ "Proyecto de informe sobre el lenguaje algorítmico ALGOL 68". Marzo de 1968. Archivado desde el original el 30 de septiembre de 2007 . Consultado el 22 de junio de 2007 .
  42. ^ "Penúltimo borrador del informe sobre el lenguaje algorítmico ALGOL 68 - Capítulos 1-9" (PDF) . Octubre de 1968 . Consultado el 22 de junio de 2007 .[ enlace muerto permanente ]
  43. ^ "Penúltimo borrador de informe sobre el lenguaje algorítmico ALGOL 68 - Capítulos 10-12" (PDF) . Octubre de 1968 . Consultado el 22 de junio de 2007 .[ enlace muerto permanente ]
  44. ^ "Informe sobre el lenguaje algorítmico ALGOL 68" (PDF) . Diciembre de 1968. Archivado desde el original (PDF) el 6 de abril de 2008 . Consultado el 30 de diciembre de 2007 .
  45. ^ "Informe revisado sobre el lenguaje algorítmico Algol 68". Septiembre de 1973. Archivado desde el original el 27 de septiembre de 2007 . Consultado el 30 de abril de 2007 .
  46. ^ Lu Hu-quan (1971). "La traducción de Algol 68 al chino" (PDF) . Pekín, China: Instituto de Matemáticas, Academia Sínica . Consultado el 17 de agosto de 2012 .
  47. ^ "GOST 27974-88 Lenguaje de programación ALGOL 68 - Язык программирования АЛГОЛ 68" (PDF) (en ruso). GOST . 1988. Archivado desde el original (PDF) el 15 de noviembre de 2008 . Consultado el 15 de noviembre de 2008 .
  48. ^ "GOST 27975-88 Lenguaje de programación ALGOL 68 extendido - Язык программирования АЛГОЛ 68 расширенный" (PDF) (en ruso). GOST . 1988. Archivado desde el original (PDF) el 29 de abril de 2011 . Consultado el 15 de noviembre de 2008 .
  49. ^ "Formato de sintaxis en ALGOL 68G". Archivado desde el original el 9 de enero de 2008 . Consultado el 7 de abril de 2023 .
  50. ^ Needham, RM; Wilkes, MV (enero de 1979). "La computadora Cambridge CAP y su sistema operativo" (PDF) . Investigación de Microsoft .
  51. ^ David Holdsworth (invierno de 2009-2010). "Tiempo compartido de KDF9: ¡Eldon 2 no es EGDON!". Resurrección informática - Número 49 . Sociedad de Conservación de Computadoras . Consultado el 3 de octubre de 2010 .
  52. ^ SI Currie; JM Foster (septiembre de 1982). "Memorando RSRE" (PDF) . vitanuova.com . Consultado el 7 de abril de 2023 .
  53. ^ Эльбрус Бабаяна y Pentium Пентковского. Ixbt.com. Consultado el 21 de julio de 2013.
  54. ^ Oliver, JR; Newton, RS (1979). "Experiencia práctica con ALGOL 68-RT". La revista informática . 22 (2): 114-118. doi : 10.1093/comjnl/22.2.114 .
  55. ^ Aplicaciones, bibliotecas y conjuntos de pruebas: Grupo de preservación de software. Preservación de software.org. Consultado el 21 de julio de 2013.
  56. ^ Informe revisado, página 123, nota al pie
  57. ^ Lindsey, CH (julio de 1974). "Parametrización parcial". Boletín ALGOL (37): 24–26 . Consultado el 19 de septiembre de 2022 .
  58. ^ Lindsey, CH; Boom, HJ (diciembre de 1978). "Un módulo y una función de compilación independiente para ALGOL 68". Boletín ALGOL (43): 19–53 . Consultado el 29 de enero de 2020 .Comentarios de erratas
  59. ^ Lindsey, CH (julio de 1974). "Modales". Boletín ALGOL (37): 26–29 . Consultado el 19 de septiembre de 2022 .
  60. ^ "Copia archivada" (PDF) . Archivado desde el original (PDF) el 15 de abril de 2010 . Consultado el 20 de marzo de 2010 .{{cite web}}: Mantenimiento CS1: copia archivada como título ( enlace )
  61. ^ http://htportal.acm.org/ft_gateway.cfm?id=803425&type=pdf [ enlace muerto permanente ]
  62. ^ Una máquina ALGOL 68 abstracta y su aplicación en un compilador independiente de la máquina - Springer. Springerlink.com. Recuperado el 21 de julio de 2013.
  63. ^ "La enciclopedia de lenguajes informáticos". Archivado desde el original el 10 de marzo de 2011 . Consultado el 20 de marzo de 2010 .
  64. ^ Implementaciones de Algol 68 de código abierto: explorar archivos en. Fuenteforge.net. Recuperado el 21 de julio de 2013.
  65. ^ [1] Archivado el 29 de agosto de 2006 en la Wayback Machine.
  66. ^ "Copia archivada" (PDF) . Archivado desde el original (PDF) el 2 de enero de 2014 . Consultado el 27 de agosto de 2005 .{{cite web}}: Mantenimiento CS1: copia archivada como título ( enlace )
  67. ^ CHA Koster (1993). La creación de Algol 68 . Apuntes de conferencias sobre informática. CiteSeerX 10.1.1.76.2072 . 
  68. ^ Dijkstra, EW "Al editor ALGOL 68 Mathematische Centrum". Archivado desde el original el 21 de abril de 2007 . Consultado el 28 de abril de 2007 .
  69. ^ van Rossum, Guido (junio de 2005). "Lista de deseos de Python-Dev: hacer mientras" . Consultado el 28 de abril de 2007 .
  70. ^ Hoare, CAR (febrero de 1981) [basado en su conferencia del Premio Turing de 1980 ]. "Las ropas viejas del emperador". Comunicaciones de la ACM . 24 (2): 75–83. doi : 10.1145/358549.358561 . S2CID  97895.URL alternativa Archivado el 2 de octubre de 2017 en Wayback Machine.
  71. ^ "Boletín ALGOL (mencionado en AB30.1.1.1)". Marzo de 1970. Archivado desde el original el 30 de septiembre de 2007 . Consultado el 1 de marzo de 2007 .

Trabajos citados

enlaces externos