Algol 68 | |
---|---|
clase de idioma | versión o edición [d] ylenguaje |
Autor | Adrian van Wiingaarden , Barry Mayo [d] y Gregory Peck |
Desarrollador | Barry Mayo [d] ,Gregory Peck , Cornelis Coster [d] yAdrian van Wiingaarden |
sido influenciado | ALGOL Y [d] yALGOL 60 |
influenciado | BETA |
Algol 68 ( inglés Algol 68 del inglés algo rithmic - algorítmico e inglés l anguage - language) es un lenguaje de programación de alto nivel imperativo de procedimiento , un descendiente del lenguaje Algol , significativamente mejorado. Se desarrolló en el período 1964-1968 . Posicionado como un lenguaje universal para describir algoritmos de procesamiento de datos arbitrarios de alta complejidad. Difiere en gran volumen, riqueza de oportunidades y complejidad de sintaxis.
A pesar de la similitud del nombre y la continuidad oficial en relación con el lenguaje Algol 60, Algol 68 heredó solo algunos elementos de sintaxis y difiere significativamente de su lenguaje predecesor, principalmente en la presencia de una gran cantidad de medios sintácticos y capacidades visuales adicionales. . En particular, incluye herramientas para organizar cálculos paralelos integrados en el lenguaje, operaciones con estructuras como con objetos únicos y operaciones matriciales.
El rasgo más característico de la sintaxis de Algol-68 es la capacidad de redefinir la sintaxis y los operadores: el programador puede expandir activamente el lenguaje en la dirección requerida, crear sus propias operaciones. El propósito de incluir tales facilidades en el lenguaje era lograr la máxima expresividad y obtener la posibilidad de una descripción conveniente de los algoritmos más abstractos. Por estas características, así como por la presencia de potentes operadores para el procesamiento de estructuras y matrices, el Algol 68 a veces se denomina el "lenguaje del superalto nivel".
Formalmente, Algol 68 es un lenguaje de programación procedimental centrado en la descripción de una secuencia de comandos, pero gracias a las herramientas desarrolladas para describir tipos y operaciones, puede usarse para escribir programas en casi cualquier estilo. Entonces, en el ejemplo a continuación, el programa Algol-68 está escrito en un estilo funcional.
Este programa implementa el clásico algoritmo " Tamiz de Eratóstenes " para encontrar todos los números primos menores que 100. nil significa puntero nulo en otros idiomas. La notación x de y significa "acceder a x como elemento de una estructura o unión y ".
comenzar # Tamiz de números primos Algol-68, estilo funcional # error de proceso = (cadena s) vacío: (imprimir((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; modo nodo = struct(int h, lista t); proc cons = (int n, list l) list: heap node := (n, l); proc hd = (list l) int: (l es nulo | error("hd nil"); skip | h de l); proc tl = (lista l) lista: ( l es nil | error("tl nil"); skip | t de l ); proc show = (list l) void: ( l no es nil | print((" ",whole(hd(l),0))); show(tl(l))); filtro proc = (proc (int) bool p, lista l) lista: si l es cero entonces cero elif p(hd(l)) luego contras(hd(l), filter(p,tl(l))) else filtrar(p, tl(l)) fi; proc sieve = (lista l) lista: si l es cero entonces cero más proc no múltiple = (int n) bool: n mod hd(l) ? 0; contras(hd(l), tamiz(filtro(no multiple, tl(l) ))) fi; proc primos = (int n) list: sieve( tl( uno a(n) )); mostrar (primos (100)) finalOtra característica interesante del lenguaje Algol 68 es su "multilingüismo": el lenguaje tiene la capacidad de usar diferentes tablas de traducción, lo que permite que cada lenguaje natural defina su propio conjunto de palabras clave de Algol-68. Como resultado, los programadores tienen la oportunidad de escribir programas con las palabras clave de su idioma nativo. A continuación se muestra un ejemplo del procedimiento más simple en Algol-68, que calcula la fecha siguiente a la pasada en el parámetro, en dos idiomas: inglés y alemán.
# Fecha del día siguiente - variante en inglés modo fecha = struct(Int día, cadena 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" luego (1, "enero", año de x + 1) else (1, sucesor del mes (mes de x), año de x) fi; # Nachfolgetag - Variante alemana menge datum = tupel(ganz tag, wort monat, ganz Jahr); funktion naechster tag nach = (dato x) dato: wenn tag von x <monatslaenge(monat von x, jahr von x) dann (etiqueta 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;Para 1960, se completó el trabajo del Comité de Idiomas de Alto Nivel de la IFIP (Federación Internacional para el Procesamiento de la Información, Federación Internacional para el Procesamiento de la Información), que formó uno de los primeros HDL - Algol "clásicos" . Algol ganó popularidad de inmediato, principalmente en los círculos académicos de Europa, no solo como un lenguaje de programación práctico, sino también como un lenguaje universal para describir algoritmos computacionales en artículos científicos. Pero incluso entonces estaba claro que Algol no era perfecto y necesitaba ser mejorado. Por un lado, faltaban algunas características muy deseables en el lenguaje, por otro lado, algunos mecanismos y construcciones de Algol se usaban tan raramente que surgió la cuestión de excluirlos del lenguaje para simplificar el traductor. Como resultado, en 1962, IFIP reunió un nuevo comité sobre Algol de expertos de muchos países de Europa occidental y América. El comité recibió dos tareas:
El trabajo del comité duró seis años, de 1962 a 1968. Rápidamente, el comité logró completar la primera tarea: acordar un subconjunto reducido de Algol, que contiene solo sus elementos ampliamente utilizados. La cuestión del idioma sucesor se resolvió durante varios años, en constantes discusiones. Dos miembros del comité: Charles Hoare de la Universidad de Oxford y Niklaus Wirth de Suiza (en ese momento enseñaba en los EE. UU., en la Universidad de Stanford) en 1965 propusieron al comité su propia versión del nuevo lenguaje, al que llamaron Algol-W. . Fue una revisión moderada de Algol, libre de defectos conocidos y complementada con un mínimo de características necesarias. Una vez publicado, el proyecto fue evaluado positivamente por muchos científicos, pero el comité lo rechazó. Hubo muchas propuestas, de diversos grados de sofisticación, algunas de ellas fueron rechazadas, algunas fueron utilizadas en el diseño del lenguaje. En diciembre de 1968 en Munich, en una reunión del comité, se presentó oficialmente un nuevo lenguaje de programación, llamado Algol 68. El lenguaje resultó ser extremadamente desarrollado, pero al mismo tiempo muy voluminoso y complejo. Incluso los programadores experimentados tuvieron dificultades para comprender el "mensaje de lenguaje" emitido por el comité.
Los documentos oficiales de la comisión valoran positivamente el trabajo realizado por él, aunque algunos de los miembros de la comisión se pronuncian tanto sobre el trabajo como sobre sus resultados, de forma sumamente negativa. De los críticos de la lengua, los más conocidos son los ya mencionados Charles Hoare y Niklaus Wirth . Hoare criticó el proyecto por ser "oscuro, complejo y demasiado ambicioso" mientras el comité aún estaba en sesión. Al final del trabajo del comité, Hoare, Wirth y varios otros científicos crearon un breve informe que describe las críticas al nuevo lenguaje. En su parte de resumen, se dijo: "como herramienta para la creación confiable de programas complejos, el lenguaje debe ser reconocido como fallido" (este informe fue prohibido de distribuir por la dirección de la IFIP). Posteriormente, en 1980, en su Turing Lecture , Hoare elaboró sobre el trabajo del comité Algol-68, las deficiencias tanto del proceso de desarrollo del lenguaje como de sí mismo.
Para describir el lenguaje, se utilizó un formalismo original: las gramáticas de dos niveles de van Wiingaarden . Esto permitió lograr el rigor de la descripción (ya que este tipo de gramática permite describir de forma formal las condiciones contextuales que se tienen que expresar verbalmente al describir una lengua en BNF o RBNF ), pero complicó aún más la descripción. Además, es extremadamente difícil construir un analizador de lenguaje directamente a partir de las gramáticas de van Wiingaarden, por lo que la descripción original podría considerarse solo como la forma inicial de la especificación de sintaxis, lo que requiere modificaciones importantes para una aplicación práctica real. El formalismo de la descripción del lenguaje elegido por el comité predeterminó las dificultades en su implementación. El proceso de desarrollo de compiladores para el nuevo lenguaje resultó ser difícil y largo, aunque finalmente se crearon y utilizaron.
El éxito que tuvo Algol 60, Algol 68 no lo logró. En los círculos académicos, no tenía demanda debido a su complejidad y engorroso, y en la programación industrial no pudo desplazar a Fortran y Cobol, que eran muy utilizados en ese momento. En cierto sentido, Algol 68 reprodujo el destino de PL/1 , desarrollado en 1964 por un comité bajo los auspicios de IBM para System/360 como reemplazo de Fortran y Cobol: grandes comités en ambos casos, que intentaban satisfacer las necesidades de una gran cantidad de usuarios. diferentes grupos de usuarios de interés, incluidos en el lenguaje muchas herramientas muy poderosas, pero no utilizadas por todos o incluso por la mayoría de los desarrolladores, lo que da como resultado una herramienta poderosa pero engorrosa, inmanejable y difícil de implementar. Si en el caso de PL/1 esto condujo a la desintegración real del lenguaje en subconjuntos (la mayoría, quizás incluso todos los compiladores PL/1 que existían en el mundo, implementaron solo una parte de las capacidades del lenguaje), entonces Algol 68 aún se implementó. en su totalidad, pero el número de tales implementaciones resultó ser extremadamente pequeño y el uso del lenguaje bastante limitado. En Europa, el Algol 68 fue utilizado durante mucho tiempo por el Comité Real Británico de Comunicaciones y Radar. En la URSS , hubo grupos de trabajo para desarrollos en Algol-68 (por ejemplo, Novosibirsk bajo el liderazgo del académico Andrei Petrovich Ershov , Leningrado bajo el liderazgo de Andrei Nikolayevich Terekhov , Moscú bajo el liderazgo de Alexander Nikolayevich Maslov y Mikhail Ruvimovich Levinson) . Un compilador y un poderoso sistema de programación en Algol-68 para la computadora ES se crearon en la Universidad Estatal de Leningrado , que funcionó durante muchos años. Sin embargo, el lenguaje tampoco fue muy utilizado.
Quizás uno de los factores que predeterminaron el fracaso real de Algol-68 fue el surgimiento a principios de la década de 1970 de una nueva generación de lenguajes de alto nivel, entre los cuales Pascal desempeñó un papel especial ; de hecho, la muy "versión mejorada y complementada de Algol” que se esperaba en el ambiente académico del comité sobre Algol-68, pero mucho más simple. Su amplia distribución casi no dejó nicho para Algol-68.
A pesar del fracaso, Algol 68 influyó en los desarrolladores de lenguajes orientados a objetos posteriores, en particular C++ , aunque muchas de las funciones se eliminaron y algunas se implementaron de otras formas. En 1977, cuando el Comité de Lenguajes de Programación del Departamento de Defensa de EE. UU. llegó a la conclusión de que era necesario desarrollar un nuevo lenguaje de programación para sistemas integrados, el comité decidió que las propuestas para el futuro lenguaje deberían basarse en uno de los lenguajes PL/1. , Pascal y Algol 68. Así, Algol-68 tuvo la oportunidad de convertirse en el progenitor de un nuevo lenguaje universal, pero esta oportunidad no se materializó: de los 15 proyectos presentados a la competencia, los 4 seleccionados para la segunda etapa de revisión fueron Basado en el lenguaje Pascal . Luego de una etapa más de refinamiento, el mejor de estos proyectos se convirtió en el lenguaje de Ada .
En primer lugar, las críticas negativas se relacionan con la complejidad de la sintaxis de Algol-68. En particular, Hoare señaló que, alejándose de la simplicidad del lenguaje progenitor, el nuevo lenguaje no facilita en absoluto el desarrollo de programas. Como dijo Hoare, "los miembros del comité utilizaron los constantes retrasos en su trabajo para incluir estructuras cada vez más complejas en el lenguaje futuro, en lugar de intentar simplificarlo".
Los críticos también señalaron que el lenguaje provoca que el desarrollador libere la programación no estructural con el uso activo de sus propias categorías y notación abstractas. A partir de esto, el código del programa se volvió ilegible, lo que dificulta el desarrollo grupal de programas y su mantenimiento. Además, la abundancia excesiva de funciones del lenguaje dificultaba la implementación completa del compilador.
Lenguajes de programación | |
---|---|
|