ALGOL | |
---|---|
clase de idioma | lenguaje de programación , lenguaje de programación procedimental , lenguaje de programación imperativo y lenguaje de programación estructurado [d] |
Apareció en | 1958 |
Autor | Friedrich Bauer , Hermann Bottenbruch [d] , Heinz Rutishauser [d] , Klaus Samelson [d] , John Backus , Charles Katz [d] , Alan Jay Perlis , Joseph Wegsten [d] , Naur, Peter , Bernard Vauquois [d] . Adrian van Wiingaarden , Greene, Julien y John McCarthy |
sido influenciado | Fortran |
Algol ( Inglés Algol de lenguaje algorítmico - "lenguaje algorítmico") es el nombre de una serie de lenguajes de programación utilizados en la compilación de programas para resolver problemas científicos y técnicos en una computadora . Desarrollado por el comité lingüístico de alto nivel de la IFIP en 1958 - 1960 (Algol 58 [1] [2] , Algol 60 [3] [4] ). Cardinalmente revisado en 1964-1968 ( Algol 68 ) . Uno de los primeros lenguajes de alto nivel . Fue popular en Europa, incluida la URSS, como lenguaje de programación práctico y académico (el lenguaje para publicar algoritmos en artículos científicos), pero en los EE . UU. y Canadá no pudo superar a Fortran , que era común allí . Tuvo una influencia notable en todos los lenguajes de programación imperativos desarrollados posteriormente , en particular, en el lenguaje Pascal .
Por lo general, el nombre Algol (sin especificar la versión) se llama Algol 60, mientras que Algol 68 se considera un lenguaje independiente.
Algol se desarrolló en 1958 en una conferencia de una semana en ETH (Zurich, Suiza) como un lenguaje de programación de propósito general para una amplia gama de aplicaciones, y un comité establecido por la Federación Internacional para el Procesamiento de la Información (IFIP) lo perfeccionó aún más. . El comité incluía a varios científicos e ingenieros lingüísticos destacados de Europa y América. Entre ellos estaban: John Backus , uno de los creadores de Fortran , Joseph Wagsten , posteriormente dirigió el comité para el desarrollo del lenguaje Kobol , John McCarthy , el autor del lenguaje Lisp , desarrollado simultáneamente con Algol, Peter Naur , posteriormente finalizó el "Forma normal de Backus", completando el desarrollo de BNF . Edsger Dijkstra es un científico holandés que más tarde se hizo ampliamente conocido como uno de los fundadores de la programación estructurada y partidario del enfoque matemático de la programación, futuro ganador del Premio Turing .
Al principio, el trabajo enfrentó grandes dificultades de naturaleza sin principios. Por ejemplo, uno de los miembros del comité recordó la "tormenta decimal", una discusión extremadamente acalorada entre los participantes estadounidenses y europeos sobre qué carácter usar como separador entre el número entero y la parte fraccionaria del número . Los americanos defendieron el punto, los europeos exigieron el uso de la coma, tradicional en Europa, y por tal bagatela, la obra corría verdadero peligro de fracasar. Para evitar conflictos por cuestiones menores, se decidió que la descripción de Algol sería de tres niveles, incluido el nivel de descripciones, publicaciones e implementación. Cuestiones menores, como la elección entre un punto y una coma o el alfabeto utilizado, se trasladaron al segundo o tercer nivel, lo que permitió resolver cuestiones fundamentales con relativa rapidez. En el nivel de publicación, acordado más tarde, se permitió el uso de palabras clave nacionales y estándares de presentación de datos (incluido el punto decimal), el nivel de implementación determinó el idioma de manera bastante estricta; según él, los traductores debían construirse.
Después de la adopción en 1958 de la primera versión de la descripción del lenguaje Algol 58 (originalmente se suponía que se llamaría el lenguaje IAL - Lenguaje Algebraico Internacional, pero esto fue abandonado [5] ), los problemas se dieron cuenta rápidamente, para la solución de los cuales el comité formó una nueva versión del estándar - Algol 60; se convirtió en el Algol "clásico". En 1959, John Backus desarrolló la Forma Normal de Backus (BNF), una forma formal de describir lenguajes algorítmicos. El primer lenguaje cuya especificación se registró en BNF fue Algol 58. Posteriormente, luego de las mejoras propuestas por Peter Naur, surgió la forma Backus-Naur (la misma abreviatura - BNF o BNF), que se utilizó para la especificación del lenguaje ALGOL 60. ya en la etapa de su desarrollo.
El nuevo lenguaje encontró adeptos y críticos. En los Estados Unidos, Algol fue recibido con frialdad, era popular solo en el entorno académico, y aún así no en todas partes. Aquellos que intentaron implementar Algol enfrentaron una serie de dificultades. Entonces, por ejemplo, se descubrió que ninguna de las computadoras que existían entonces admitía la entrada-salida de las 116 letras que componían el alfabeto Algol.
SHARE, la Asociación Estadounidense de Usuarios de Computadoras IBM , exigió que la empresa implementara Algol para sus máquinas, pero el compilador Algol para IBM OS / 360 que apareció al final fue extremadamente incómodo de usar: es bastante natural que IBM , que invirtió mucho sumas en Fortran , no tenía ningún incentivo para crear un nuevo producto que solo competiría con el anterior. Al mismo tiempo, las deficiencias de Fortran obligaron a IBM a buscar un reemplazo y llevaron al desarrollo de PL/I , un lenguaje sucesor de Fortran en el que la influencia de Algol fue muy notoria.
Pero en Europa, Algol fue aceptado con entusiasmo. Rápidamente ganó popularidad en el entorno académico, se estaban desarrollando compiladores en todas partes, muchos de los cuales, a pesar de las dificultades de implementación, resultaron ser muy exitosos. Algol se extendió desde Gran Bretaña hasta el Lejano Oriente de la URSS , convirtiéndose tanto en un lenguaje universal para describir algoritmos en publicaciones científicas como en un medio de programación real.
En la URSS, en el Centro de Computación de la Academia de Ciencias de la URSS en el Laboratorio de Programación, bajo la dirección de V. M. Kurochkin , se creó un traductor del lenguaje ALGOL 60 para la computadora BESM-6 . Durante muchos años sirvió como una herramienta importante para resolver problemas aplicados en varios campos de las ciencias naturales y fue ampliamente utilizado en muchas organizaciones de la URSS.
El lenguaje Algol fue adoptado por Burroughs Corporation en sus modelos a partir del B5000 ; este lenguaje se llamó Elliott ALGOL. Las LGP-30 lenguaje Dartmouth ALGOL 30
Incluso cuando el lenguaje Algol casi dejó de usarse para la programación, siguió siendo el lenguaje oficial para publicar algoritmos durante mucho tiempo.
Antes del texto de la descripción de la lengua se utilizó un epígrafe del Tractatus Logico-Philosophicus de Ludwig Wittgenstein : “Lo que se puede decir se puede decir claramente; y sobre lo que es imposible hablar, sobre eso se debe callar. [6]
Las características del lenguaje Algol se han vuelto típicas de la mayoría de los lenguajes imperativos creados más tarde. Fue en Algol que la idea de un programa apareció no como una secuencia libre de comandos, sino como una estructura de bloques que constaba de partes claramente descritas y separadas. El bloque principal del programa en Algol es el propio programa principal. Contiene su parte ejecutable encerrada en un bloque delimitado por un par de palabras clave beginy end, así como descripciones de subrutinas. Cada subrutina es un programa en miniatura que tiene sus propios datos descritos en su interior, una interfaz definida de forma única en forma de un nombre y una lista de parámetros formales, y un bloque de código. En este caso, los subbloques se pueden asignar en el bloque.
Se identificaron estructuras de control estructural: ramas, bucles, secciones secuenciales que ejecutan condicionalmente o conjuntos de declaraciones anidadas múltiples, también limitadas por las mismas palabras clave beginy end, lo que hizo posible describir la lógica del programa sin usar saltos incondicionales: el infame operador goto , que provoca la creación de programas confusos y mal estructurados.
Para los programadores modernos, tal estructura de programa parece obvia, algo anticuada y no siempre conveniente (a menudo begin se critican los infinitos enden los programas Pascal, que heredaron esta característica de Algol), pero en el momento en que apareció Algol, todo esto fue un notable paso adelante. Los programas se volvieron regulares, lo que permitió aumentar su volumen, manteniéndolos visibles, comprensibles, accesibles para el análisis y la corrección. Fue sobre la base de Algol y sus lenguajes descendientes que se llevó a cabo un trabajo exitoso sobre la prueba analítica de la corrección de los programas.
Una propiedad extremadamente importante de Algol era la posibilidad de organizar procedimientos recursivos , que anteriormente habían estado ausentes de los lenguajes industriales (líderes del mercado - Fortran y Cobol - la recursividad está directamente prohibida), pero ampliamente utilizada en Lisp . El uso de cálculos recursivos en algunos casos puede simplificar significativamente la estructura del programa y hacerlo más comprensible debido a la proximidad a la descripción matemática del algoritmo para resolver el problema.
Por supuesto, no todas las características de Algol ahora pueden llamarse exitosas y completamente pensadas. Por ejemplo, el estándar de idioma ignoraba por completo las funciones de E/S; los desarrolladores decidieron que cada implementación del lenguaje puede resolver este problema de forma independiente, según las características de la máquina de destino y las necesidades de los usuarios. Por otro lado, el concepto de programación modular utilizando bibliotecas estándar de subrutinas simplemente no existía en ese momento, y los operadores de E/S debían incluirse directamente en el lenguaje. Esto llevó al hecho de que cada implementación organizó la E / S a su manera, y en esta parte de los programas de Algol para diferentes compiladores resultó ser casi incompatible.
En Algol, se propusieron dos métodos para pasar parámetros a una subrutina: por nombre y por valor . El segundo método es muy utilizado en la gran mayoría de idiomas hasta el día de hoy. El primero supone que el nombre del parámetro real se pasa al procedimiento, y el procedimiento funciona como si su código estuviera escrito en el punto de referencia, donde se escribe el nombre del parámetro real en lugar del parámetro formal. Las funciones con tales parámetros se implementan fácilmente utilizando un preprocesador (como en el lenguaje C); sin embargo, generar código objeto para ellas es bastante complicado: de hecho, para pasar expresiones complejas por nombre, el compilador tuvo que crear una función especial sin nombre que evalúa esta expresión en su propio entorno, el llamado hundido . El análogo más cercano a un thunk es un cierre , pero un thunk ocurre solo en el contexto específico del paso de parámetros. Esta característica del lenguaje Algol 60, que por lo demás está razonablemente organizado, es notable por su sorprendente combinación de completa inutilidad práctica con extrema complejidad e ineficiencia de implementación. Por lo tanto, en el desarrollo posterior de los lenguajes de programación, se abandonó el paso de parámetros por nombre. En el lenguaje PL / I, que en general heredó mucho de Algol-60, en esta ola, al mismo tiempo, abandonaron el paso de parámetros por valor, dejando, como en los primeros Fortran, el único mecanismo: por referencia. [7] En C , por el contrario, solo quedaba el paso de parámetro por valor (el paso por referencia se puede modelar usando parámetros del tipo "pointer"). Y para aquellos casos en los que tiene sentido pasar parámetros por nombre (es necesario, por ejemplo, si desea crear una función para la cual los valores de los parámetros no se calcularían en el momento de la llamada), se crearon mecanismos sintácticos especiales. .
Escribir en Algol es fuerte y estático .
NúmerosAlgol tiene dos tipos para representar números: entero ( inglés entero ) y punto flotante ( inglés real ), por ejemplo: 200, 100.5, . El punto se usa como separador decimal en Algol. +210-1
Los literales numéricos sin signo son de tipo integer, mientras que todos los demás son de tipo real.
Valores booleanosPara representar valores verdaderos y falsos , se utilizan literales true(verdadero) y false(falso) de tipo Boolean, que son utilizados por operaciones lógicas.
Algol proporciona las operaciones aritméticas más comunes para números enteros y de punto flotante :
Designacion | Operación en progreso | Ejemplo | Resultado de ejemplo |
---|---|---|---|
+ | Suma | 1.45 + 2 | 3.45 |
- | Sustracción | 7-3 | 4 |
× | Multiplicación | 1.2×0.4 | 0.48 |
/ | División | 6 / 3 | 2 |
↑ | exponenciación | 5↑3 | 125 |
Hola, programa mundial en Dartmouth ALGOL 30 [8] dialecto :
EMPEZAR ARCHIVO F(TIPO=REMOTO); ARREGLO EBCDIC E[0:11]; REEMPLAZAR E POR "¡HOLA, MUNDO!"; MIENTRAS SEA VERDADERO EMPEZAR ESCRIBIR(F, *, E); FINAL; FINAL.Para Elliott Algol :
programa HiFolks; comenzar a imprimir "Hola mundo"; fin ;Para IBM OS/360 ALGOL F :
'EMPEZAR' OUTSTRING (1, '('¡HOLA, MUNDO!')'); 'FINAL'Ejemplo de implementación de Elliott 803 ALGOL .
PRUEBA DE ALGOL DE PUNTO FLOTANTE' COMIENZO REAL A,B,C,D' RE AÑADIR' PARA A:= 0.0 PASO D HASTA 6.3 HACER EMPEZAR IMPRIMIR PUNZÓN(3),££L??' B := SIN(A)' C := COS(A)' IMPRIMIR PUNZONADOR(3),SAMELINE,ALINEADO(1,6),A,B,C' FINAL' FINAL'Aquí:
Considere el siguiente programa Algol:
comenzar el procedimiento p(a, b); nombre a, b; entero a, b; empezar por a:=1 paso 1 hasta 10 hacer si := 0 fin p; entero i; matriz de enteros s[1:10]; pag (yo, s[i]) finalDado que los parámetros del procedimiento p se pasan por nombre (ver arriba), llamar al procedimiento p en este caso dará como resultado la puesta a cero de todos los elementos de la matriz s. Este uso de pasar un parámetro por su nombre se ha denominado el "truco de Jensen", en honor al programador que lo propuso por primera vez.
Lenguajes de programación | |
---|---|
|