Los cuatro lenguajes iniciales: ALGOL

Los cuatro lenguajes iniciales: ALGOL

En artículos anteriores hablamos sobre Fortran y COBOL y como resolvieron problemas definidos, ahora exploremos un lenguaje más de esta serie: ¡ALGOL!

Para empezar, puedo decir que ALGOL es el lenguaje más influyente y, a su vez, el menos utilizado.

ALGOL: el latín de los lenguajes de programación que  explica algoritmos

Fortran, Cobol y LISP comenzaron en el camino de los lenguajes de alto nivel pero tenían un problema: no eran aptos para describir algoritmos.

¿Qué son algoritmos?

Los algoritmos son la base de la informática. Con ellos podemos describir cómo funciona el software sin tener que implementarlos, ya podemos comprobar si el funcionamiento es correcto o si hay errores en el algoritmo, comprobar la implementación antes de escribir código y comprobar la complejidad de la ejecución.

En ese momento, se necesitaba un lenguaje unificado para describir estos algoritmos que también podrían implementarse en un lenguaje de programación.
Fue entonces cuando surgió ALGOL.

Influyó en la sintaxis de todos los idiomas modernos. Si programas en C, Java, Python, Ruby u otro lenguaje imperativo, estás totalmente influenciado/a por ALGOL, ¿sabes? Aún después de caer en desuso, es un referente para describir algoritmos. Podrá ser antiguo, pero es el más referenciado de todos los tiempos. Por eso es conocido como el latín de los lenguajes de programación.

ALGOL

begin 

file rmt (kind = remote); 

write(rmt, <"Hello, ALGOL!">);

end. 

Hello, ALGOL!

ALGOL ha sido sinónimo de código durante mucho tiempo. ALGOL (ALGOrithmic Language) fue desarrollado conjuntamente por 13 científicos de EE. UU. y de Europa en el Instituto Federal de Tecnología de Zúrich, Suiza, en 1958.

Solo para darte una idea de los pensadores detrás de ALGOL, teníamos a John McCarthy, creador de LISP y John W. Backus, creador de Fortran. De estos 13 científicos, 4 fueron ganadores del Premio ACM Turing, el equivalente al Premio Nobel de computación.

La creación del lenguaje fue un intento de crear un lenguaje universal para computadoras en ese momento y se llamaría IAL (International Algebraic Language), pero el nombre fue rechazado y finalmente se convirtió en ALGOL.

El lenguaje estaba destinado a solucionar algunos problemas de Fortran y unificar a los científicos informáticos de todo el mundo para seguir un estándar. Nos centraremos en las innovaciones aportadas por ALGOL 60 ya que la siguiente versión, ALGOL 68, nunca se desarrolló. A pesar de no tener un éxito estándar y caer en desuso, ALGOL marcó a las siguientes generaciones con su sintaxis y el grupo de trabajo.

Manual de ALGOL

Innovaciones y Código

Lenguaje imperativo, es decir, el programador dice exactamente cada paso del algoritmo. Así, ALGOL definió "código" como lo conocemos en los principales lenguajes: asignación de variables, condicionales, bucles y organización en funciones.

Entrando en más detalles, ALGOL introdujo el concepto de alcance con bloques: organización y límites y ALGOL introduce begin ... end para el código de alcance. Esto en el futuro se convirtió en { ... } de muchos idiomas.
Las Listas Dinámicas o Arreglos fueron otra innovación traída por ALGOL. Muchos lenguajes necesitan que se definan sus listas en tiempo de compilación y su tamaño (como ocurre con C). ALGOL permitía establecer el tamaño de la lista en tiempo de ejecución.

Otra innovación que es muy común en el aprendizaje de funciones con C es "pasar por valor" y "pasar por referencia". Esto permitía modificar datos dentro de una función, simplemente pasando su puntero.

El siguiente código en ALGOL 60 hace un cálculo promedio:

begin

  integer N;

  Read Int(N);


  begin

    real array Data[1:N];

    real sum, avg;

    integer i;

    sum:=0;


    for i:=1 step 1 until N do

      begin real val;

        Read Real(val);

        Data[i]:= if val < 0 then -val else val

      end;


    for i:=1 step 1 until N do

      sum:= sum + Data[i];

    avg:=sum/N;

    Print Real(avg)

  end

end

Este código parece bastante fácil de leer, ¿verdad? Porque estoy seguro de que ya has visto una descripción de algoritmo exactamente en este formato.

Curiosidades

La versión más famosa de ALGOL fue ALGOL 60. Hoy en día no tenemos compiladores de ALGOL porque, en el momento de su creación, solo un fabricante, Burroughs, estaba interesado en el lenguaje. Hoy en día, como lengua extinta, no hay personas interesadas en su desarrollo, salvo algunos proyectos de código abierto. Otra razón por la falta de interés en el lenguaje es que los recursos de Entrada y Salida no han sido definidos oficialmente. En otras palabras, no podrías hacer "Hello, World". Esto solo ha sido definido por cada fabricante.

Años más tarde, en 1968, se especificó ALGOL 68 con muchas más características especificadas por el científico informático Adriaan van Wijngaarden. Si lo estudiamos en profundidad, la creación de van Wijngaarden es una obra maestra de la informática y permitió muchas operaciones nuevas. Por ejemplo, era posible redefinir operadores y cambiar la precedencia entre ellos, es decir, podíamos cambiar reglas de matemáticas como hacer que la suma viniera primero que una multiplicación. Pero el altísimo nivel de ALGOL 68 impuso una tremenda dificultad de implementación y comprensión por parte de los usuarios. Esto hizo que el proyecto no avanzara.

La despedida de ALGOL

Como dependía en gran medida de los fabricantes de hardware para el desarrollo del lenguaje, ALGOL cayó en desuso debido a la falta de interés comercial, siendo un lenguaje extinto. Sin embargo, hay algunos proyectos open source que intentan implementar el lenguaje creado por aficionados.

Y en esta misma analogía, ALGOL dejó un legado de pensamiento algorítmico imperativo, que influyó en todos los lenguajes modernos como C, Pascal, Java, Python, JavaScript y Ruby.

Como ALGOL fue la creación de un grupo relevante de científicos, la forma normal de Backus-Naur (BNF) para definir las sintaxis del lenguaje fue una creación para ALGOL que todavía se usa en los lenguajes modernos en la actualidad. A continuación podemos ver la definición del lenguaje Python que utiliza una versión más moderna de BNF:

Otro legado importante de ALGOL fue su uso para describir algoritmos. Como tenía una sintaxis fácil, Association for Computer Machinery (ACM), una de las asociaciones científicas de computación más grandes del mundo, usó ALGOL durante muchos años como estándar para escribir algoritmos en artículos. Es decir, probablemente ya hayas visto la descripción de un algoritmo en ALGOL en alguna explicación. Esta es una de las razones por las que ALGOL también nos resulta familiar.

Pronto vendrá el capítulo final de esta serie con el último de los lenguajes iniciales: LISP.

¡Hasta luego!