Gemas de software: The Computer History Museum Historical Source Code Series
Ken Iverson en la Universidad de Harvard
En los primeros 50 años de la era de la informática se inventaron miles de lenguajes de programación. Muchos de ellos eran similares, y muchos siguieron un camino tradicional y evolutivo desde sus predecesores.
Pero algunos lenguajes revolucionarios tenían un sesgo que los diferenciaba de sus hermanos de propósito más general. LISP era para el procesamiento de listas. SNOBOL era para la manipulación de cadenas. SIMSCRIPT era para la simulación. Y APL era para las matemáticas, con énfasis en el procesamiento de matrices.
Lo que finalmente se convirtió en APL fue inventado por el profesor de Harvard Kenneth E. Iverson en 1957 como una notación matemática, no como un lenguaje de programación informática. Aunque existían otros sistemas de símbolos orientados a las matrices, incluida la notación tensorial concisa inventada por Einstein, estaban más orientados al análisis matemático y menos a la síntesis de algoritmos. Iverson, que fue alumno de Howard Aiken, enseñó lo que se conoció como «Notación Iverson» a sus alumnos de Harvard para explicar algoritmos.
Iverson fue contratado por IBM en 1960 para trabajar con Adin Falkoff y otros en su notación. En su ahora famoso libro de 1962 «A Programming Language» 1, dice que la notación es para la descripción de «procedimientos… llamados algoritmos o programas», y que es un lenguaje porque «exhibe una considerable estructura sintáctica». Pero en ese momento sólo era una notación para que la gente la leyera, no un lenguaje para programar ordenadores. El libro da muchos ejemplos de su uso como herramienta descriptiva (por ejemplo, para documentar la definición de los conjuntos de instrucciones de los ordenadores) y como medio para expresar algoritmos generales (por ejemplo, para ordenar y buscar). Anticipándose a la resistencia a algo tan novedoso, dice en el prefacio: «La tesis central de este libro es que el poder descriptivo y analítico de un lenguaje de programación adecuado compensa ampliamente el considerable esfuerzo que requiere su dominio». Quizás estaba advirtiendo que dominar el lenguaje no era trivial. Quizás también estaba señalando que, en su opinión, otros lenguajes de notación eran menos que «adecuados».
El equipo, por supuesto, pronto vio que la notación podía convertirse en un lenguaje para programar ordenadores. Ese lenguaje, que se llamó APL a partir de 1966, hacía hincapié en la manipulación de matrices y utilizaba símbolos poco convencionales. No se parecía a ningún otro lenguaje de programación de ordenadores que se hubiera inventado.
El APL se hizo popular cuando IBM introdujo el «APL360» para su ordenador central System/360. A diferencia de la mayoría de los otros lenguajes de la época, APL360 era también un completo entorno de programación interactivo. El programador, sentado ante una máquina de escribir electromecánica conectada a un ordenador de tiempo compartido, podía escribir sentencias en APL y obtener una respuesta inmediata. Los programas podían definirse, depurarse, ejecutarse y guardarse en un ordenador que estaba siendo utilizado simultáneamente por docenas de personas.
Escrita completamente en lenguaje ensamblador 360, esta versión de APL tomaba el control de toda la máquina. Implementaba un completo sistema operativo de tiempo compartido además de un lenguaje de alto nivel.
Con el permiso de IBM, el Museo de Historia de la Computación se complace en poner a disposición el código fuente de la versión «XM6» de 1969-1972 de APL para el System/360 para uso no comercial.
El archivo de texto contiene 37.567 líneas, que incluyen código, macros y definiciones globales. Los 90 archivos individuales están separados por comandos ‘./ ADD». Para acceder a este material, debe aceptar los términos de la licencia que se muestra aquí, que sólo permite el uso no comercial y no le da derecho a licenciarlo a terceros mediante la publicación de copias en otro lugar de la web.
Descargar el código fuente de APL360
Jürgen Winkelmann en ETH Zürich ha hecho un trabajo increíble para convertir este código fuente en un sistema ejecutable. Para más información, véase MVT para APL versión 2.00.
Creación del lenguaje de programación APL
El libro de Iverson «A Programming Language» 1 utiliza una notación gráfica que habría sido difícil de utilizar directamente como lenguaje de programación para ordenadores. Lo consideraba una extensión del álgebra matricial, y utilizaba convenciones tipográficas matemáticas comunes como subíndices, superíndices y distinciones basadas en el peso o la fuente de los caracteres. He aquí, por ejemplo, un programa para ordenar números:
Para linealizar la notación para su uso como lenguaje de programación informática escrito en un teclado, los implementadores de APL tuvieron que renunciar ciertamente al uso de flechas etiquetadas para las transferencias de control. Pero una característica que pudieron conservar, hasta cierto punto, fue el uso de símbolos especiales para las funciones primitivas, como se ilustra en este programa que crea códigos Huffman:
APL utiliza símbolos que están más cerca de las matemáticas estándar que de la programación. Por ejemplo, el símbolo de la división es ÷, no /. Para soportar los símbolos no convencionales, APL360 utilizó un teclado diseñado a medida con símbolos especiales en mayúsculas.
APL360 utilizó un teclado diseñado a medida
Aún así, había más caracteres especiales de los que cabían en el teclado, por lo que algunos se escribían tachando dos caracteres. Por ejemplo, el carácter de «subida de grado» ⍋, un operador primitivo utilizado para clasificar, se creaba escribiendo ∆ (mayúscula H), luego retroceso, y después ∣ (mayúscula M). No quedaba espacio para las letras mayúsculas y minúsculas, por lo que APL sólo admitía las mayúsculas.
Para la impresión de programas, Iverson y Falkoff consiguieron que IBM diseñara una bola tipográfica especial para sus terminales 1050 y 2741, que utilizaban el mecanismo de la máquina de escribir Selectric de IBM.
Ahora los programas podían teclearse e imprimirse. Aquí, por ejemplo, está la versión impresa de un programa del manual del Lenguaje APL 2 que calcula el determinante matemático de una matriz:
Una muestra de APL
APL es un lenguaje de programación conciso de alto nivel que difiere de la mayoría de los desarrollados en la década de 1960 en varios aspectos:
Orden de evaluación: Las expresiones en APL se evalúan de derecha a izquierda, y no existe una jerarquía de precedencia de funciones. Por ejemplo, escribir la expresión
2×4+3
hace que el ordenador escriba inmediatamente el valor resultante
El valor no es, como en muchos otros lenguajes que tienen precedencia de operadores, 11. Por supuesto, los paréntesis pueden usarse para agrupar una subexpresión y cambiar el orden de evaluación. La regla general es que el argumento derecho de cualquier función es el valor de la expresión a su derecha.
Creación automática de vectores y arrays: Una estructura de mayor dimensión se crea automáticamente al evaluar una expresión que la devuelve, y los escalares pueden mezclarse libremente. Por ejemplo,
A ← 2 + 1 2 3
crea el vector «1 2 3», le añade el escalar 2 y crea la variable A para contener el vector cuyo valor es
3 4 5
Las variables nunca se declaran; se crean automáticamente y asumen el tamaño y la forma de cualquier expresión que se les asigne.
Una plétora de primitivas: APL tiene un rico conjunto de funciones incorporadas (y «operadores» que se aplican a las funciones para dar lugar a diferentes funciones) que operan sobre escalares, vectores, matrices, incluso objetos de mayor dimensión, y combinaciones de ellos. Por ejemplo, la expresión para sumar los números del vector «A» creado anteriormente es simplemente
+/A
donde / es el operador de «reducción» que hace que la función de la izquierda se aplique sucesivamente a todos los elementos del operando de la derecha. La expresión para calcular la media de los números en A también utiliza la función primitiva ρ para determinar cuántos elementos hay en A:
(+/A) ÷ ρA
Aquí hay algunas tablas del «Manual del usuario de APL360» 3 de 1970 que dan una idea de la potencia y sofisticación de las funciones y operadores incorporados en APL. (Haga clic en las imágenes para obtener versiones más grandes.)
APL le anima a pensar de forma diferente sobre la programación, y a utilizar estructuras de datos temporales de alta dimensión como valores intermedios que luego se reducen utilizando las potentes primitivas. Un ejemplo famoso es el siguiente programa, corto pero completo, para calcular todos los números primos hasta R.
(~T∊T∘.×T)/T←1↓⍳R
Aquí se evalúa esta expresión:
subexpresión |
que significa |
valor si R es 6 |
|||||||||||||||||||||||||
⍳R |
Generar un vector de números de 1 a R. |
1 2 3 4 5 6 |
|||||||||||||||||||||||||
T←1↓ |
Tira el primer elemento del vector y asigna el resto al vector temporal T. |
2 3 4 5 6 |
|||||||||||||||||||||||||
T∘.×T |
Crea el producto exterior de la multiplicación: una tabla que contiene el resultado de multiplicar cada elemento de T por cada elemento de T. |
|
|||||||||||||||||||||||||
T∊ |
Usa el operador de «pertenencia al conjunto» para encontrar qué elementos de T están en la tabla. |
0 1 0 1 |
|||||||||||||||||||||||||
~ |
Nega el resultado para identificar qué elementos de T no están en la tabla. Son los enteros que no tienen ningún múltiplo en la tabla. |
1 1 0 1 0 |
|||||||||||||||||||||||||
( )/T |
Selecciona los elementos de T que hemos identificado. Estos son todos los primos menores que R. |
2 3 5 |
Nota que no hay bucles en este programa. El poder de las expresiones APL significa que las ramas condicionales y los bucles se requieren con mucha menos frecuencia que en los lenguajes de programación más tradicionales.
Los operadores APL se pueden utilizar de manera fácil para todo tipo de cálculos que normalmente requerirían bucles. Por ejemplo, una expresión que calcula el número de elementos del vector X que son mayores que 100 es
+/X>100
Funciona porque X>100 devuelve un vector de bits de 0’s y 1’s que muestra qué elementos de X son mayores que 100, y +/ suma todos los bits de ese vector.
Pero la ejecución condicional y los bucles son, por supuesto, a veces necesarios. A la luz de los desarrollos posteriores de la programación estructurada, la única primitiva de APL para la transferencia de control, la sentencia «GO TO LINE x» →, es particularmente débil. Este es un ejemplo de una función que calcula el máximo común divisor de sus dos argumentos. La última sentencia crea un bucle bifurcándose al principio. En la línea 2, la transferencia condicional del control a la línea 0 hace que la función salga y devuelva el valor asignado por última vez a G.
Para saber más sobre el lenguaje APL de los años 60, véase el manual de referencia «APL Language» 2 y el «APL360 Primer» 4 de Paul Berry de 1969.
El lenguaje ha evolucionado, por supuesto, a lo largo de los años, y las versiones más recientes incluyen estructuras de control como IF-THEN-ELSE.
Cómo se implementó el APL
La primera implementación informática de la notación APL fue un intérprete del lenguaje orientado a lotes, escrito en FORTRAN en 1965 para el ordenador central IBM 7090, por Larry Breed en el Centro de Investigación de IBM en Yorktown Heights, Nueva York, y Philip Abrams, entonces estudiante de posgrado en la Universidad de Stanford.
La primera versión interactiva se escribió poco después para el 7093 (un 7090 experimental con memoria virtual) por Larry Breed y Roger Moore. Se ejecutaba bajo el sistema de tiempo compartido TSM y se llamaba caprichosamente «IVSYS», que rima con «IBSYS», el nombre del sistema operativo 7090 estándar. En un correo electrónico de 2012 Breed dice,
IVSYS proporcionaba inicio de sesión, cierre de sesión, ejecución inmediata y definición de funciones; proporcionaba espacios de trabajo, tanto activos como almacenados. La implementación de estos era rudimentaria; principalmente usábamos lo que el proyecto TSM nos ofrecía para el login/logout/guardado de archivos. Sólo tuvimos unas pocas semanas para utilizar el 7093 antes de que fuera retirado y Roger y yo empezamos a planificar un sistema independiente en System/360. En esas semanas, Ken y su grupo vieron por primera vez cómo sería el APL ejecutable.
Otra implementación de un subconjunto del lenguaje se realizó en 1967 para el minicomputador IBM 1130.
La primera implementación de APL que consiguió un uso generalizado fuera de IBM fue para el IBM System/360. Llamada «APL360», entró en servicio primero dentro de IBM en noviembre de 1966. (La notación «APL360″, ya que la barra invertida era el operador de «expansión» de APL, también tenía un significado oculto: «APL expande el 360″).
Breed dice de la época inmediatamente anterior,
Este período, a principios de 1966, fue la época de transición de la Notación Iverson a APL. (De hecho, Adin ideó «APL» en la primavera del 66.) El perfeccionamiento y la ampliación del lenguaje y del entorno continuaron durante muchos años. Casi no se añadió código para hacer una versión comercial, sólo papeleo.
En agosto de 1968 APL360 estaba disponible para los clientes de IBM como un programa no soportado («Tipo III») en la «Contributed Program Library» 5 de IBM. Los principales implementadores eran Larry Breed, Dick Lathwell y Roger Moore; otros que habían contribuido eran Adin Falkoff y Luther Woodrum.
Los primeros desarrolladores de APL, de izquierda a derecha: Dick Lathwell, Ken Iverson, Roger Moore, Adin Falkoff, Phil Abrams, Larry Breed. La foto fue tomada alrededor de 1983.
Debido a la naturaleza dinámica de las variables de APL, APL360 fue implementado como un intérprete, no como un compilador que generaba código máquina. Los programas se almacenaban en una forma interna llamada «codestring» que correspondía directamente a lo que el usuario había tecleado. El intérprete examinaba el codestring a medida que se ejecutaba el programa, y asignaba y reconfiguraba dinámicamente las variables a medida que se evaluaban las expresiones.
Las primeras versiones de APL360 tomaban el control de toda la máquina. Por tanto, era una combinación de sistema operativo, sistema de archivos, monitor de tiempo compartido, intérprete de comandos y lenguaje de programación. Dada la limitación de la memoria principal, los espacios de trabajo de los usuarios se trasladaban al tambor o al disco según fuera necesario. El rendimiento era impresionante, lo que Larry Breed atribuye, en su clara y sucinta descripción de la implementación 6, a la capacidad de adaptar el sistema operativo a los requisitos del lenguaje.
APL360 era un lenguaje conversacional que proporcionaba una respuesta rápida y una ejecución eficiente para hasta 50 usuarios simultáneos. Cada usuario tenía un «espacio de trabajo activo» que contenía programas, variables y el estado de la ejecución de programas suspendidos. Comandos del sistema como «)LOAD», «)SAVE» y «)COPY» mantenían la biblioteca de espacios de trabajo almacenados del usuario. Otros comandos del sistema controlaban las características del lenguaje; por ejemplo, con «)ORIGIN» el programador podía controlar si los vectores y las matrices se numeraban empezando por 0 o por 1.
APL fue la primera introducción al tiempo compartido interactivo para muchos de la generación de programadores que habían sufrido la programación por lotes con tarjetas perforadas.
Aplicaciones de APL
Incluso antes de que fuera un lenguaje de programación de ordenadores, la Notación Iverson era útil como lenguaje para documentar algoritmos para las personas. El ejemplo clásico es la definición formal de la arquitectura del conjunto de instrucciones del nuevo ordenador IBM System/360, que fue publicada en un artículo del IBM Systems Journal por Adin Falkoff, Ken Iverson y Ed Sussenguth en 1965 7.
La descripción, que es formal más que verbal, se lleva a cabo mediante un conjunto de programas, que interactúan a través de variables comunes, utilizados junto con tablas auxiliares… Aunque la descripción formal es completa y autocontenida, se proporciona un texto como ayuda para el estudio inicial.
Pero el texto proporcionado en el documento es mucho más que eso. Es una explicación línea por línea de la descripción formal, lo que significa que también es una demostración y explicación del poder descriptivo de APL.
La notación utilizó el estilo gráfico para las transferencias de control que estaba en el libro de Iverson. Aquí, por ejemplo, está la descripción de una operación de acceso a la memoria. (Haga clic en ella para ampliarla.)
Fue la transición de APL de una notación para publicación a un lenguaje de programación informática interactivo lo que lo hizo florecer. Cuando la implementación APL360 estuvo disponible, IBM y otros estimularon su uso produciendo diversas aplicaciones como éstas:
- Starmap: Un conjunto de funciones APL para calcular y trazar las posiciones de las estrellas y los planetas. 8 9 Fue escrito en 1973 por Paul Berry de IBM y John Thorstensen, entonces estudiante de astronomía en el Bryn Mawr college, ahora profesor de física y astronomía en el Dartmouth College. Utiliza soluciones clásicas de las ecuaciones de Kepler para una fecha y hora determinadas y una serie de rotaciones de coordenadas para mostrar dónde aparecerían los planetas y las estrellas en el cuenco del cielo.
- IBGS: Simulación de Juego Interactivo de Negocios: «Una simulación general de gestión por ordenador que implica la toma de decisiones y la planificación en las áreas funcionales de producción, marketing y finanzas.»
- Ceros e integrales en APL: «Utilizando tanto métodos clásicos como los de Newton y Muller como métodos desarrollados recientemente como los de Jenkins y Traub, encuentra ceros reales de una función real, ceros reales y complejos de un polinomio con coeficientes reales de complejos, y ceros complejos de una función compleja.»
- Graphpak – Interactive Graphics Package for APL360: «…capacidades que van desde el soporte de la interfaz gráfica en el nivel más bajo hasta varias áreas de aplicación en niveles superiores… Un componente de trazado… lineal o logarítmico… ajuste de curvas… Un componente de geometría descriptiva permite definir, escalar, ampliar, trasladar, rotar y proyectar objetos tridimensionales.»
- Gráficos e histogramas en APL: «produce curvas y gráficos de barras en un terminal de máquina de escribir».
- Sistema de geometría de coordenadas APL: «resuelve problemas de geometría de coordenadas de forma interactiva en un terminal…para uso de topógrafos, ingenieros civiles, planificadores urbanos…»
- APL/PDTS – Programming Development Tracking System: «…para ayudar a los gestores y planificadores a supervisar el rendimiento frente al plan en los proyectos de desarrollo de la programación». MINIPERT: «Un sistema del Método del Camino Crítico (CPM) para la Gestión de Proyectos»
- APL Lenguaje de Planificación Econométrica: «El economista en ejercicio, el pronosticador de negocios o el profesor disponen de herramientas fáciles de usar para la construcción de modelos interactivos y la resolución de modelos.»
- APL Sistema de Planificación Financiera: «permite al analista y al planificador financiero diseñar informes, especificar sentencias de cálculo, introducir y modificar datos, y obtener informes impresos con entrega inmediata.»
- APL Text Editor and Composer: «Este programa está diseñado para procesar texto de forma interactiva en un terminal… Se incluyen funciones para introducir, revisar, componer, imprimir y almacenar texto… para su uso por parte de secretarias, científicos, ingenieros, administradores o cualquier otra persona que produzca documentos, cartas, informes o especificaciones.»
Muchas de estas aplicaciones hacían hincapié en la interactividad, lo que proporcionaba un enorme aumento de la productividad en comparación con el procesamiento de trabajos por lotes más típico de la época. Además, el APL permitía desarrollar aplicaciones mucho más rápidamente. En un correo electrónico de 2012, Larry Breed señaló,
En todos los campos, la velocidad a la que se pueden escribir programas en APL lo hace valioso para el modelado y la creación de prototipos… Un ejemplo: Alrededor de 1973, Continental Can necesitaba un sistema de inventario para sus 21 plantas de fabricación. Su equipo de programadores de FORTRAN había trabajado durante un año, sin éxito a la vista. Un vendedor de STSC, en un fin de semana, construyó un modelo de trabajo utilizable en APL Plus.
Las áreas en las que APL tuvo mayor penetración fueron en las aplicaciones científicas, actuariales, estadísticas y financieras. Para más detalles sobre la progresión de APL en sus primeros 25 años, véase el número especial de 1991 de la revista IBM System Journal 10 con 12 artículos y un ensayo sobre el tema.
Elogios y críticas a APL APL no fue diseñado originalmente como un lenguaje de programación. Como dijo Iverson,
El motivo inicial para desarrollar APL fue proporcionar una herramienta para escribir y enseñar. Aunque el APL se ha explotado sobre todo en la programación comercial, sigo creyendo que su uso más importante aún está por explotar: como notación simple, precisa y ejecutable para la enseñanza de una amplia gama de temas.11
Con tantos símbolos escuetos e inusuales, los programas de ordenador en APL, al igual que la notación matemática que lo inspiró, tienen una concisión y elegancia que muchos encuentran atractiva. El APL atrae a adeptos fanáticos. Alan Perlis (el primer galardonado con el Premio Turing de la ACM, en 1966) fue uno de ellos:
El barrido del ojo a través de una sola frase puede exponer una intrincada, ingeniosa y hermosa interacción de operación y control que en otros lenguajes de programación es observable sólo en varias páginas de texto. Uno empieza a apreciar la aparición y la importancia del estilo. 12
Muchos encuentran la libertad de expresión en APL liberadora.
Solía describirlo como un ‘lenguaje de programación fascista’, porque es dictatorialmente rígido. …Si Pascal es fascista, APL es anarquista. 13
Pero los programas en APL son a menudo crípticos y difíciles de decodificar. Algunos han bromeado diciendo que es un «lenguaje de sólo escritura» porque incluso el autor de un programa puede tener problemas para entenderlo después. Es una fuente de inspiración para los trucos de programación. Es difícil resistirse al reto de escribir un «one-liner» de APL para implementar un algoritmo complejo completo. Aquí, por ejemplo, hay dos diferentes APL one-liners que implementan versiones del «Juego de la Vida» de John Conway:
life←{1 ω∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂ω}
No es para los pusilánimes, claramente. El informático holandés Edsger Dijkstra dijo,
APL es un error, llevado a la perfección. Es el lenguaje del futuro para las técnicas de programación del pasado: crea una nueva generación de vagos de la codificación. 14
Pero los fans de APL dirían que la codificación críptica de APL es un mal estilo de programación que puede ser una aflicción con cualquier lenguaje. APL proporciona una paleta más rica para expresar algoritmos, dice el argumento, por lo que puede resolver problemas más difíciles más rápido y con menos desorden sintáctico irrelevante.
Sea cual sea su punto de vista, APL y los lenguajes que inspiró, como APL2 y J, siguen siendo una parte activa del diverso universo de los lenguajes de programación.
Una breve biografía de Ken Iverson
Kenneth Eugene Iverson nació el 17 de diciembre de 1920 en una granja cerca de Camrose, Alberta, Canadá. Fue educado en escuelas rurales de una sola aula hasta el final del noveno grado, cuando abandonó la escuela porque era el punto álgido de la Depresión y había trabajo que hacer en la granja familiar. Más tarde dijo que el único propósito de seguir estudiando habría sido convertirse en maestro de escuela, y esa era una profesión que decididamente no quería. Durante los largos meses de invierno estudió cálculo por su cuenta.
Fue reclutado en 1942, y durante su servicio tomó suficientes cursos por correspondencia para casi completar la escuela secundaria. Tras el servicio militar, obtuvo una licenciatura en matemáticas y física en la Universidad de Queen’s, en Kingston, Ontario, y luego un máster en física en la Universidad de Harvard. En 1954 se doctoró con el pionero de la informática Howard Aiken, con una tesis titulada «Machine Solutions of Linear Differential Equations: Aplicaciones a un modelo económico dinámico».
Tras completar su doctorado, Iverson se incorporó a la facultad de Harvard para enseñar en el nuevo programa de procesamiento automático de datos de Aiken. Estuvo allí un año como instructor y cinco años como profesor adjunto. Cada vez se sentía más frustrado por la insuficiencia de la notación matemática convencional para expresar algoritmos, así que empezó a inventar la suya propia.
En 1960 Iverson se incorporó al nuevo Centro de Investigación de IBM en Yorktown Heights, Nueva York, por consejo de Frederick Brooks, que había sido uno de sus compañeros de docencia en Harvard y que ahora estaba en IBM. Ambos colaboraron en el desarrollo continuo de la nueva notación. En 1962 Ken publicó el ya clásico libro «A Programming Language» 1, cuyo título dio el nombre de APL a la notación que hasta entonces se había llamado informalmente «notación de Iverson».
Iverson siguió trabajando en el desarrollo de APL durante todo su mandato en IBM. En 1980 dejó IBM y regresó a Canadá para trabajar en I.P. Sharp Associates, que había establecido un servicio de tiempo compartido basado en APL.
En 1987 se «retiró del empleo remunerado» y se dedicó de lleno al desarrollo de un dialecto más moderno de APL. El APL se estaba utilizando con éxito para fines comerciales, pero Iverson quería desarrollar una nueva notación ejecutable sencilla más adecuada para la enseñanza, que estuviera disponible a bajo coste. La primera implementación de este lenguaje, llamado J, se anunció en la Conferencia de Usuarios de APL90.
La capacidad de Iverson para crear este tipo de lenguajes provenía de su «puro disfrute del lenguaje y las palabras», recuerda su hija Janet Cramer. «Leía los diccionarios como la gente lee las novelas». Iverson pensaba que era importante que el lenguaje, tanto el inglés como las matemáticas, se comunicaran de forma clara y concisa.
Con colaboradores que incluían a su hijo Eric, Iverson siguió trabajando en el desarrollo de J, y continuó publicando prolíficamente. El sábado 16 de octubre de 2004 sufrió un derrame cerebral -mientras trabajaba en un tutorial de J- y murió tres días después, el 19 de octubre, a la edad de 83 años.
Hay muchas historias sobre Ken Iverson. He aquí algunas:
Ken no consiguió la titularidad en Harvard. Cumplió sus cinco años como profesor adjunto y la facultad decidió no proponerle una promoción. Le pregunté qué había fallado y me dijo: «Bueno, el decano me llamó y me dijo: ‘el problema es que no has publicado nada más que un pequeño libro'». Ese pequeño libro recibió más tarde el premio Turing. Creo que es un comentario sobre la mentalidad convencional de los procedimientos de promoción más que un comentario sobre Ken; es un comentario sobre el procedimiento académico y sobre Harvard.
– Fred Brooks, A Celebration of Kenneth Iverson, 2004-11-30
En una de las primeras charlas Ken estaba explicando las ventajas de la comparación tolerante. Un miembro del público preguntó incrédulo: «¿Seguro que no quiere decir que cuando A=B y B=C, A puede no ser igual a C?». Sin perder el tiempo, Ken respondió: «¡Cualquier carpintero lo sabe!» y pasó a la siguiente pregunta.
– Paul Berry
En una conversación social con Ken, le dije: «Sabes, Ken, tú eres mi diseñador de lenguajes favorito y Don Knuth es mi programador favorito». Y Ken dijo inmediatamente: «¿Qué tiene de malo mi programación?».
– Joey Tuttle, A Celebration of Kenneth Iverson, 2004-11-30
En 1973 o 1974 Ken y yo dimos una charla en Kodak, en Rochester, a un grupo de 40 o 50 programadores que debían trabajar en PL/I. En el periodo de preguntas, un miembro del personal superior dijo: «Si entiendo lo que estáis diciendo, estáis sugiriendo que deberíamos adoptar una nueva forma de pensar.» Y Ken se levantó de su silla y dijo: «¡Sí, eso es exactamente lo que estoy diciendo!».
– Joey Tuttle, A Celebration of Kenneth Iverson, 2004-11-30
Agradecimientos
Gracias a Michael Karasick, Yvonne Perkins, Steve Selbst y Ken Edwards de IBM por poner fin a mi odisea de diez años para conseguir el permiso para publicar el código fuente de APL. Gracias a Curtis Jones, Larry Breed, Paul Berry y Roy Sykes por sus comentarios sobre un primer borrador de este artículo.
– Len Shustek
Bibliografía
- K. E. Iverson, A Programming Language, John Wiley and Sons, Inc., 1962.
- IBM, «APL Language,» March 1975.
- IBM, «APL360 User’s Manual», marzo de 1970.
- IBM, Paul Berry, «APL360 Primer – Student Text,» 1969.
- L. M. Breed y R. H. Lathwell, «APL360,» 1968.
- L. M. Breed y R. H. Lathwell, «The Implementation of APL360,» en ACM Symposium on Experimental Systems for Interactive Applied Mathematics, 1967.
- A. D. Falkoff, K. E. Iverson y E. H. Sussenguth, «A Formal Description of SYSTEM/360,» IBM Systems Journal, vol. 3, no. 3, pp. 198-261, 1964.
- P. C. Berry y J. R. Thorstensen, «Starmap», 1978.
- P. C. Berry y J. R. Thorstensen, «Starmap», IBM Systems Development Division, 1975.
- IBM Systems Journal, vol. 30, no. 4, 1991.
- K. E. Iverson, «A Personal View of APL,» IBM Systems Journal, vol. 30, no. 4, 1991.
- A. J. Perlis, «In Praise of APL: A Language for Lyrical Programming», SIAM News, junio de 1977.
- B. McCormick, «A Programming Language», 2000,2002.
- E. W. Dijkstra, «How Do We Tells That Might Hurt?», SIGPLAN Notices, vol. 17, no. 5, mayo de 1982.
- A. D. Falkoff y K. E. Iverson, «The Design of APL», IBM Journal of Research and Development, vol. 17, no. 4, 1973.
- A. D. Falkoff y K. E. Iversion, «The Evolution of APL,» SIGPLAN Notices, vol. 13, no. 8, pp. 45-57, agosto de 1978.
- L. Breed, «How We Got to APL1130,» 10 de mayo de 2004.
- ACM, «Proceedings of the APL’69 Conference on APL», SUNY Binghamton, NY, 1969.
- «The Origins of APL – 1974»; una maravillosa entrevista con los desarrolladores originales de APL.
Las publicaciones históricas del código fuente
- Código fuente de MacPaint y QuickDraw, 18 de julio de 2010
- Código fuente del lenguaje de programación APL, 10 de octubre de 2012
- Código fuente de Adobe Photoshop, 13 de febrero de 2013
- Apple II DOS Source Code, 12 de noviembre de 2013
- Microsoft MS-DOS Early Source Code, 25 de marzo de 2014
- Microsoft Word for Windows Version 1.1a Source Code, 25 de marzo de 2014
- Early Digital Research CP/M Source Code, 1 de octubre de 2014
- Xerox Alto Source Code, 21 de octubre de 2014
- Electronic Arts DeluxePaint Early Source Code, 22 de julio de 2015