stringtranslate.com

APL (lenguaje de programación)

APL (llamado así por el libro A Programming Language ) [3] es un lenguaje de programación desarrollado en la década de 1960 por Kenneth E. Iverson . Su tipo de datos central es la matriz multidimensional . Utiliza una amplia gama de símbolos gráficos especiales [4] para representar la mayoría de funciones y operadores, lo que genera un código muy conciso. Ha tenido una influencia importante en el desarrollo de modelos conceptuales, hojas de cálculo , programación funcional , [5] y paquetes matemáticos informáticos. [6] También ha inspirado varios otros lenguajes de programación. [7] [8]

Historia

Notación matemática

Kenneth E. Iverson desarrolló una notación matemática para manipular matrices a partir de 1957 en la Universidad de Harvard . En 1960, comenzó a trabajar para IBM , donde desarrolló esta notación con Adin Falkoff y la publicó en su libro A Programming Language en 1962. [3] El prefacio establece su premisa:

Las matemáticas aplicadas se ocupan en gran medida del diseño y análisis de procedimientos explícitos para calcular los valores exactos o aproximados de varias funciones. Estos procedimientos explícitos se denominan algoritmos o programas . Debido a que una notación eficaz para la descripción de programas exhibe una estructura sintáctica considerable, se le llama lenguaje de programación .

Esta notación se utilizó dentro de IBM para informes breves de investigación sobre sistemas informáticos, como el Burroughs B5000 y su mecanismo de pila, cuando IBM evaluaba máquinas de pila versus máquinas de registro para las próximas computadoras.

Iverson también utilizó su notación en un borrador del capítulo Un lenguaje de programación , escrito para un libro que estaba escribiendo con Fred Brooks , Procesamiento automático de datos , que se publicaría en 1963. [9] [10]

En 1979, Iverson recibió el Premio Turing por su trabajo en APL. [11]

Desarrollo de un lenguaje de programación informática.

Ya en 1962, el primer intento de utilizar la notación para describir un sistema informático completo se produjo después de que Falkoff discutiera con William C. Carter su trabajo para estandarizar el conjunto de instrucciones para las máquinas que más tarde se convertirían en la familia IBM System/360 .

En 1963, Herbert Hellerman, trabajando en el IBM Systems Research Institute, implementó una parte de la notación en una computadora IBM 1620 , y fue utilizada por estudiantes en un curso especial de secundaria sobre cálculo de funciones trascendentales mediante suma de series. Los estudiantes probaron su código en el laboratorio de Hellerman. Esta implementación de una parte de la notación se denominó Traductor de matrices personalizado (PAT). [12]

En 1963, Falkoff, Iverson y Edward H. Sussenguth Jr. , todos trabajando en IBM, utilizaron la notación para una descripción formal de la arquitectura y funcionalidad de las máquinas de la serie IBM System/360 , lo que dio lugar a un artículo publicado en IBM Systems Journal en 1964. Después de la publicación de esto, el equipo centró su atención en una implementación de la notación en un sistema informático. Una de las motivaciones para este enfoque de implementación fue el interés de John L. Lawrence, quien tenía nuevas funciones en Science Research Associates , una empresa educativa comprada por IBM en 1964. Lawrence pidió a Iverson y su grupo que le ayudaran a utilizar el lenguaje como herramienta para Desarrollar y utilizar computadoras en la educación. [13]

Después de que Lawrence M. Breed y Philip S. Abrams de la Universidad de Stanford se unieran al equipo de IBM Research, continuaron su trabajo previo en una implementación programada en FORTRAN IV para una parte de la notación que se había hecho para la computadora IBM 7090 que se ejecutaba en el Sistema operativo IBSYS . Este trabajo se terminó a finales de 1965 y posteriormente se denominó IVSYS (por sistema Iverson). Abrams describió en detalle la base de esta implementación en un informe técnico de la Universidad de Stanford, "An Interpreter for Iverson Notation" en 1966. El aspecto académico de esto fue supervisado formalmente por Niklaus Wirth . [14] Al igual que el sistema PAT de Hellerman anteriormente, esta implementación no incluía el juego de caracteres APL, pero usaba palabras especiales reservadas en inglés para funciones y operadores. Posteriormente, el sistema se adaptó para un sistema de tiempo compartido y, en noviembre de 1966, había sido reprogramado para la computadora IBM System/360 Modelo 50 que se ejecutaba en modo de tiempo compartido y se usaba internamente en IBM. [15]

Hardware

Máquinas de escribir y ruedas de IBM que contienen caracteres griegos APL
Vista de un programador de la distribución del teclado IBM 2741 con el cabezal de impresión del elemento de escritura APL insertado

Un avance clave en la capacidad de utilizar APL de manera eficaz, antes del uso generalizado de terminales de tubo de rayos catódicos ( CRT ), fue el desarrollo de un elemento de escritura especial intercambiable para la máquina de escribir IBM Selectric con todos los caracteres especiales de APL. Esto se utilizó en estaciones de trabajo con terminales de impresión en papel que utilizaban la máquina de escribir Selectric y el mecanismo de elementos de mecanografía, como los terminales IBM 1050 e IBM 2741 . Se podrían colocar teclas sobre las teclas normales para mostrar qué caracteres APL se ingresarían y escribirían cuando se presionara esa tecla. Por primera vez, un programador podría escribir y ver los caracteres APL adecuados tal como se usan en la notación de Iverson y no verse obligado a utilizar incómodas representaciones de palabras clave en inglés. Falkoff e Iverson hicieron diseñar los elementos de escritura especiales APL Selectric, 987 y 988, a finales de 1964, aunque no había ningún sistema informático APL disponible para utilizarlos. [16] Iverson citó a Falkoff como inspiración para la idea de utilizar un elemento de escritura IBM Selectric para el juego de caracteres APL. [17]

Muchos símbolos APL, incluso con los caracteres APL en el elemento de escritura Selectric, aún tenían que escribirse tachando dos caracteres de elementos existentes. Un ejemplo es el carácter de subida de grado , que tuvo que crearse a partir de un delta (shift-H) y un trazo de Sheffer (shift-M). Esto era necesario porque el conjunto de caracteres APL era mucho mayor que los 88 caracteres permitidos en el elemento de escritura, incluso cuando las letras estaban restringidas a mayúsculas (mayúsculas).

Disponibilidad comercial

El primer inicio de sesión interactivo de APL y la creación de un espacio de trabajo de APL fue en 1966 por Larry Breed utilizando una terminal IBM 1050 en los laboratorios IBM Mohansic cerca del Centro de Investigación Thomas J. Watson , el hogar de APL, en Yorktown Heights , Nueva York. [dieciséis]

IBM fue el principal responsable de introducir APL en el mercado. La primera versión disponible públicamente de APL se lanzó en 1968 para el IBM 1130 . IBM proporcionó APL\1130 de forma gratuita pero sin responsabilidad ni soporte. [18] [19] Se ejecutaría con tan solo 8k palabras de memoria de 16 bits y utilizaría un disco duro dedicado de 1 megabyte.

APL se afianzó en los sistemas mainframe de tiempo compartido desde finales de los años 1960 hasta principios de los 1980, en parte porque soportaría múltiples usuarios en sistemas de especificaciones más bajas que no tenían hardware de traducción dinámica de direcciones . [20] Las mejoras adicionales en el rendimiento para sistemas mainframe IBM System/370 seleccionados incluyeron el microcódigo de asistencia APL en el que se incluyó cierto soporte para la ejecución de APL en el firmware del procesador , a diferencia de ser implementado completamente por software de nivel superior. Un poco más tarde, a medida que finalmente se disponía de hardware con un rendimiento adecuado, a mediados y finales de la década de 1980, muchos usuarios migraron sus aplicaciones al entorno de la computadora personal.

Los primeros intérpretes de IBM APL para hardware IBM 360 e IBM 370 implementaron su propia administración multiusuario en lugar de depender de los servicios de host, por lo que eran sus propios sistemas de tiempo compartido. Introducido por primera vez para su uso en IBM en 1966, el sistema APL\360 [21] [22] [23] era un intérprete multiusuario. La capacidad de comunicarse mediante programación con el sistema operativo para obtener información y configurar variables del sistema intérprete se realizó a través de funciones especiales privilegiadas "I-beam", utilizando operaciones monádicas y diádicas . [24]

En 1973, IBM lanzó APL.SV , que era una continuación del mismo producto, pero que ofrecía variables compartidas como medio para acceder a instalaciones fuera del sistema APL, como archivos del sistema operativo. A mediados de la década de 1970, el intérprete de mainframe de IBM incluso se adaptó para su uso en la computadora de escritorio IBM 5100 , que tenía un CRT pequeño y un teclado APL, cuando la mayoría de las otras computadoras pequeñas de la época solo ofrecían BASIC . En la década de 1980, el producto del programa VSAPL disfrutó de un amplio uso entre los usuarios de Conversational Monitor System (CMS), Time Sharing Option (TSO), VSPC , MUSIC/SP y CICS .

En 1973-1974, Patrick E. Hagerty dirigió la implementación del intérprete APL de la Universidad de Maryland para la línea 1100 de las computadoras centrales Sperry UNIVAC serie 1100/2200 . [25] En 1974, al estudiante Alan Stebbens se le asignó la tarea de implementar una función interna. [26] Xerox APL estuvo disponible desde junio de 1975 para mainframes Xerox 560 y Sigma 6, 7 y 9 con CP-V y para Honeywell CP-6 . [27]

En las décadas de 1960 y 1970, surgieron varias empresas de tiempo compartido que vendían servicios APL utilizando versiones modificadas del intérprete IBM APL\360 [23] . En Norteamérica, las más conocidas fueron IP Sharp Associates , Scientific Time Sharing Corporation (STSC), Time Sharing Resources (TSR) y The Computer Company (TCC). CompuServe también ingresó al mercado en 1978 con un intérprete APL basado en una versión modificada de Digital Equipment Corp y Carnegie Mellon, que corría en las máquinas KI y KL de 36 bits de DEC. El APL de CompuServe estaba disponible tanto para su mercado comercial como para el servicio de información al consumidor. Con la llegada, primero, de mainframes menos costosos, como el IBM 4300 , y luego de la computadora personal, a mediados de la década de 1980, la industria del tiempo compartido prácticamente había desaparecido.

Sharp APL estaba disponible a través de IP Sharp Associates, primero como un servicio de tiempo compartido en la década de 1960 y luego como un producto de programa a partir de 1979. Sharp APL era una implementación avanzada de APL con muchas extensiones de lenguaje, como paquetes (la capacidad de poner uno o más objetos en una sola variable), un sistema de archivos, matrices anidadas y variables compartidas .

También había intérpretes APL disponibles de otros fabricantes de mainframes y minicomputadoras, en particular Burroughs , Control Data Corporation (CDC), Data General , Digital Equipment Corporation (DEC), Harris , Hewlett-Packard (HP), Siemens , Xerox y otros.

Garth Foster de la Universidad de Syracuse patrocinó reuniones periódicas de la comunidad de implementadores de APL en el Centro de Conferencias Minnowbrook de Syracuse en Blue Mountain Lake, Nueva York . En años posteriores, Eugene McDonnell organizó reuniones similares en Asilomar Conference Grounds cerca de Monterey , California , y en Pajaro Dunes cerca de Watsonville , California. El grupo de interés especial SIGAPL de la Association for Computing Machinery continúa apoyando a la comunidad APL. [28]

microcomputadoras

En las microcomputadoras, que estuvieron disponibles a partir de mediados de la década de 1970, BASIC se convirtió en el lenguaje de programación dominante. [29] Sin embargo, algunas microcomputadoras proporcionaron APL en su lugar; la primera fue la MCM/70 basada en Intel 8008 , que se lanzó en 1974 [30] [31] y que se utilizó principalmente en educación. [32] Otra máquina de esta época fue la VideoBrain Family Computer , lanzada en 1977, que se suministraba con su dialecto de APL llamado APL/S. [33]

El Commodore SuperPET , introducido en 1981, incluía un intérprete APL desarrollado por la Universidad de Waterloo . [34]

En 1976, Bill Gates afirmó en su Carta abierta a los aficionados que Microsoft Corporation estaba implementando APL para Intel 8080 y Motorola 6800 pero que tenía "muy pocos incentivos para ponerlo a disposición de los aficionados" debido a la piratería de software . [35] Nunca fue publicado.

APL2

A principios de la década de 1980, el desarrollo de IBM APL, bajo el liderazgo de Jim Brown , implementó una nueva versión del lenguaje APL que contenía como mejora principal el concepto de matrices anidadas , donde una matriz puede contener otras matrices, y nuevas características del lenguaje que facilitó la integración de matrices anidadas en el flujo de trabajo del programa. Ken Iverson, que ya no tenía el control del desarrollo del lenguaje APL, dejó IBM y se unió a IP Sharp Associates , donde una de sus principales contribuciones fue dirigir la evolución de Sharp APL para que estuviera más de acuerdo con su visión. [36] [37] [38] APL2 se lanzó por primera vez para CMS y TSO en 1984. [39] La edición APL2 Workstation (Windows, OS/2 , AIX , Linux y Solaris ) siguió más tarde. [40] [41]

Mientras otros proveedores estaban ocupados desarrollando intérpretes APL para nuevo hardware, en particular microcomputadoras basadas en Unix , APL2 fue casi siempre el estándar elegido para los nuevos desarrollos de intérpretes APL. Incluso hoy en día, la mayoría de los proveedores de APL o sus usuarios citan la compatibilidad con APL2 como un punto de venta para esos productos. [42] [43] IBM cita su uso para la resolución de problemas, diseño de sistemas, creación de prototipos, ingeniería y cálculos científicos, sistemas expertos, [44] para la enseñanza de matemáticas y otras materias, visualización y acceso a bases de datos. [45]

Implementaciones modernas

Varias implementaciones de APL de APLX, Dyalog y otros incluyen extensiones para programación orientada a objetos , soporte para .NET , primitivas de conversión de matrices XML, gráficos, interfaces de sistema operativo y expresiones de cálculo lambda . Las versiones gratuitas incluyen GNU APL para Linux y NARS2000 para Windows (que se ejecuta en Linux bajo Wine). Ambas son versiones bastante completas de APL2 con varias extensiones de idioma.

Lenguajes derivados

APL ha formado la base o ha influido en los siguientes idiomas: [ cita necesaria ]

Características del lenguaje

Conjunto de caracteres

APL ha sido criticado y elogiado por su elección de un conjunto de caracteres único y no estándar. En las décadas de 1960 y 1970, pocos dispositivos terminales o incluso pantallas podían reproducir el juego de caracteres APL. Los más populares empleaban el mecanismo de impresión IBM Selectric utilizado con un elemento especial tipo APL. Uno de los primeros terminales de línea APL (operación en modo de línea únicamente, no en pantalla completa) fue el Texas Instruments TI Modelo 745 ( c.  1977 ) con el conjunto completo de caracteres APL [48] que presentaba modos de telecomunicaciones semidúplex y dúplex completo , para interactuar. con un servicio de tiempo compartido APL o una computadora central remota para ejecutar un trabajo de computadora remota, llamado RJE .

Con el tiempo, con el uso universal de pantallas gráficas de alta calidad, dispositivos de impresión y compatibilidad con Unicode , el problema de las fuentes de caracteres APL se ha eliminado en gran medida. Sin embargo, ingresar caracteres APL requiere el uso de editores de métodos de entrada , asignaciones de teclado, conjuntos de símbolos APL virtuales/en pantalla, [49] [50] o tarjetas de teclado impresas de fácil referencia que pueden frustrar a los principiantes acostumbrados a otros lenguajes de programación. [51] [52] [53] Con principiantes que no tienen experiencia previa con otros lenguajes de programación, un estudio que involucró a estudiantes de secundaria encontró que escribir y usar caracteres APL no obstaculizaba a los estudiantes de ninguna manera mensurable. [54]

En defensa de APL, se requieren menos caracteres para escribir y las asignaciones de teclado se memorizan con el tiempo. En la actualidad también se fabrican y se utilizan teclados APL especiales, al igual que fuentes descargables gratuitamente para sistemas operativos como Microsoft Windows. [55] Las ganancias de productividad reportadas suponen que uno pasa suficiente tiempo trabajando en el idioma para que valga la pena memorizar los símbolos, su semántica y las asignaciones del teclado, sin mencionar una cantidad sustancial de modismos para tareas comunes. [ cita necesaria ]

Diseño

A diferencia de los lenguajes de programación estructurados tradicionalmente, el código APL generalmente se estructura como cadenas de funciones monádicas o diádicas y operadores [56] que actúan sobre matrices . [57] APL tiene muchas primitivas no estándar (funciones y operadores) que se indican mediante un solo símbolo o una combinación de algunos símbolos. Todas las primitivas están definidas para tener la misma precedencia y siempre se asocian a la derecha. Por lo tanto, APL se lee o se comprende mejor de derecha a izquierda .

Las primeras implementaciones de APL ( c.  1970 aproximadamente) no tenían estructuras de control de flujo de bucle de programación , como bucles doo y construcciones. En su lugar, utilizaron operaciones con matrices y el uso de construcciones de programación estructuradas a menudo no era necesario, ya que se podía realizar una operación en una matriz completa en una sola declaración. Por ejemplo, la función ( ) puede reemplazar la iteración del bucle for : ιN, cuando se aplica a un entero escalar positivo, produce una matriz unidimensional (vector), 1 2 3 ... N. Las implementaciones más recientes de APL generalmente incluyen estructuras de control integrales. , de modo que la estructura de datos y el flujo de control del programa se puedan separar clara y limpiamente.whileif-then-elseiotaι

El entorno APL se denomina espacio de trabajo . En un espacio de trabajo, el usuario puede definir programas y datos, es decir, los valores de los datos también existen fuera de los programas, y el usuario también puede manipular los datos sin tener que definir un programa. [58] En los ejemplos siguientes, el intérprete de APL primero escribe seis espacios antes de esperar la entrada del usuario. Su propia salida comienza en la columna uno.

El usuario puede guardar el espacio de trabajo con todos los valores, programas y estado de ejecución.

APL utiliza un conjunto de símbolos no ASCII , que son una extensión de la notación aritmética y algebraica tradicional. Tener nombres de un solo carácter para una sola instrucción y funciones vectoriales de datos múltiples ( SIMD ) es una forma en que APL permite la formulación compacta de algoritmos para la transformación de datos, como calcular el Juego de la vida de Conway en una línea de código. [59] En casi todas las versiones de APL, es teóricamente posible expresar cualquier función computable en una expresión, es decir, en una línea de código. [ cita necesaria ]

Debido al inusual juego de caracteres , muchos programadores utilizan teclados especiales con teclas APL para escribir código APL. [60] Aunque hay varias formas de escribir código APL utilizando sólo caracteres ASCII, [61] en la práctica casi nunca se hace. (Se puede pensar que esto respalda la tesis de Iverson sobre la notación como herramienta de pensamiento . [62] ) La mayoría, si no todas, las implementaciones modernas utilizan diseños de teclado estándar, con asignaciones especiales o editores de métodos de entrada para acceder a caracteres que no son ASCII. Históricamente, la fuente APL ha sido distintiva, con caracteres alfabéticos en cursiva mayúscula y números y símbolos verticales. La mayoría de los proveedores siguen mostrando el juego de caracteres APL en una fuente personalizada.

Defensores de APL [ ¿quién? ] afirman que los ejemplos del llamado código de sólo escritura (código mal escrito y casi incomprensible) son casi invariablemente ejemplos de malas prácticas de programación o errores de principiante, que pueden ocurrir en cualquier lenguaje. Los defensores también afirman que son mucho más productivos con APL que con lenguajes informáticos más convencionales, y que el software funcional se puede implementar en mucho menos tiempo y con muchos menos programadores que usando otras tecnologías. [ cita necesaria ]

También pueden afirmar que, debido a que es compacto y conciso, APL se presta bien al desarrollo y la complejidad de software a mayor escala, porque el número de líneas de código se puede reducir considerablemente. Muchos defensores y profesionales de APL también consideran que los lenguajes de programación estándar como COBOL y Java son comparativamente tediosos. APL se encuentra a menudo donde el tiempo de comercialización es importante, como en los sistemas comerciales. [63] [64] [65] [66]

Terminología

APL hace una distinción clara entre funciones y operadores . [56] [67] Las funciones toman matrices (variables, constantes o expresiones) como argumentos y devuelven matrices como resultados. Los operadores (similares a las funciones de orden superior ) toman funciones o matrices como argumentos y derivan funciones relacionadas. Por ejemplo, la función de suma se obtiene aplicando el operador de reducción a la función de suma . Al aplicar el mismo operador de reducción a la función máxima (que devuelve el mayor de dos números) se obtiene una función que devuelve el mayor de un grupo (vector) de números. En el lenguaje J, Iverson sustituyó los términos verbo por función y adverbio o conjunción por operador .

APL también identifica aquellas características integradas en el lenguaje y representadas por un símbolo, o una combinación fija de símbolos, como primitivas . La mayoría de las primitivas son funciones u operadores. Codificar APL es en gran medida un proceso de escritura de funciones no primitivas y (en algunas versiones de APL) operadores. Sin embargo, algunas primitivas no se consideran funciones ni operadores, sobre todo la asignación.

Algunas palabras utilizadas en la literatura APL tienen significados que difieren de los de las matemáticas y de la informática en general.

Sintaxis

APL tiene representaciones explícitas de funciones, operadores y sintaxis, proporcionando así una base para la declaración clara y explícita de funciones extendidas en el lenguaje y herramientas para experimentar con ellas. [71]

Ejemplos

Hola Mundo

Esto muestra " Hola, mundo ":

'Hola Mundo'

Un tema de diseño en APL es definir acciones predeterminadas en algunos casos que producirían errores de sintaxis en la mayoría de los demás lenguajes de programación.

Se muestra la constante de cadena 'Hola, mundo' anterior, porque mostrar es la acción predeterminada en cualquier expresión para la cual no se especifica ninguna acción explícitamente (por ejemplo, asignación, parámetro de función).

exponenciación

Otro ejemplo de este tema es que la exponenciación en APL se escribe como 2*3, lo que indica elevar 2 a la potencia 3 (esto se escribiría como 2^3o 2**3en algunos idiomas, o se relegaría a una llamada de función como pow(2, 3);en otros). Muchos idiomas usan *para indicar multiplicación, como en 2*3, pero APL elige usar 2×3. Sin embargo, si no se especifica ninguna base (como ocurre con la declaración *3en APL o ^3en otros lenguajes), la mayoría de los lenguajes de programación verían esto como un error de sintaxis. APL, sin embargo, supone que la base faltante es la constante del logaritmo natural e y la interpreta *3como 2.71828*3.

Estadísticas simples

Supongamos que Xes una serie de números. Luego (+/X)÷⍴Xda su promedio. La lectura de derecha a izquierda⍴X da el número de elementos en X y, dado que es ÷un operador diádico, también se requiere el término a su izquierda. Está entre paréntesis ya que de lo contrario se tomaría X (de modo que la suma sería de X÷⍴X—cada elemento de X dividido por el número de elementos en X), y +/Xda la suma de los elementos de X. Sobre la base de esto, se presenta lo siguiente La expresión calcula la desviación estándar :

(( + / (( X - ( + / X ) ÷⍴ X ) * 2 )) ÷⍴ X ) * 0,5  

Naturalmente, se definiría esta expresión como una función para uso repetido en lugar de reescribirla cada vez. Además, dado que la asignación es un operador, puede aparecer dentro de una expresión, por lo que lo siguiente colocaría valores adecuados en T, AV y SD:

SD (( + / (( X - AV ( T + / X ) ÷⍴ X ) * 2 )) ÷⍴ X ) * 0,5  

Elige 6 números de lotería

La siguiente expresión en modo inmediato genera un conjunto típico de números de lotería Pick 6 : seis enteros pseudoaleatorios que van del 1 al 40, garantizados sin repetición , y los muestra ordenados en orden ascendente:

x [ x 6 ? 40 ]

Lo anterior hace mucho, de manera concisa, aunque pueda parecer complejo para un nuevo APLer. Combina las siguientes funciones APL (también llamadas primitivas [72] y glifos [73] ):

Dado que no hay ninguna función a la izquierda de la x más a la izquierda para decirle a APL qué hacer con el resultado, simplemente lo muestra en la pantalla (en una sola línea, separada por espacios) sin necesidad de ninguna instrucción explícita para hacerlo.

?también tiene un equivalente monádico llamado roll, que simplemente devuelve un número entero aleatorio entre 1 y su único operando [a su derecha], inclusive. Por tanto, un programa de juego de rol podría utilizar la expresión ?20para lanzar un dado de veinte caras.

números primos

La siguiente expresión encuentra todos los números primos del 1 al R. Tanto en el tiempo como en el espacio, la complejidad del cálculo es (en notación O grande ).

( ~ R R ∘. × R ) / R 1 ↓⍳ R

Ejecutado de derecha a izquierda, esto significa:

(Tenga en cuenta que esto supone que el origen de APL es 1, es decir, los índices comienzan con 1. APL se puede configurar para que use 0 como origen, por lo que es ι6, 0 1 2 3 4 5lo cual es conveniente para algunos cálculos).

Clasificación

La siguiente expresión ordena una lista de palabras almacenada en la matriz X según la longitud de la palabra:

X [ X + . '' ;]

Juego de vida

La siguiente función "vida", escrita en Dyalog APL, [75] [76] toma una matriz booleana y calcula la nueva generación según el Juego de la Vida de Conway . Demuestra el poder de APL para implementar un algoritmo complejo en muy poco código, pero comprenderlo requiere cierto conocimiento avanzado de APL (como lo haría el mismo programa en muchos lenguajes).

vida { 1 . 3 4 = + / + ¯1 0 1 ∘. ¯1 0 1 ¨ }                  

eliminación de etiquetas HTML

En el siguiente ejemplo, también Dyalog, la primera línea asigna código HTML a una variable txty luego usa una expresión APL para eliminar todas las etiquetas HTML (explicación):

 txt '<html><body><p>Este es texto <em>enfatizado</em>.</p></body></html>' { /⍨ ~ { ∨≠ \ } '<>' } txt Este es texto enfatizado .       

Nombrar

APL deriva su nombre de las iniciales del libro de Iverson A Programming Language , [3] a pesar de que el libro describe la notación matemática de Iverson, en lugar del lenguaje de programación implementado descrito en este artículo. El nombre se utiliza sólo para implementaciones reales, comenzando con APL\360.

Adin Falkoff acuñó el nombre en 1966 durante la implementación de APL\360 en IBM :

Mientras caminaba por la oficina que compartían los tres estudiantes, pude escuchar sonidos de una discusión. Asomé la cabeza por la puerta y Eric me preguntó: "¿No es cierto que todo el mundo sabe que la notación que estamos usando se llama APL?" Lamenté tener que decepcionarlo confesándole que nunca había oído que se llamara así. ¿De dónde había sacado la idea de que era bien conocido? ¿Y quién había decidido llamarlo así? De hecho, ¿por qué tenía que llamarse de alguna manera? Un tiempo después escuché cómo se llamaba. Cuando comenzaron los esfuerzos de implementación en junio de 1966, también comenzó el esfuerzo de documentación. Supongo que cuando tuvieron que escribir sobre "eso", Falkoff e Iverson se dieron cuenta de que tendrían que darle un nombre. Probablemente se hicieron muchas sugerencias en ese momento, pero sólo he oído hablar de dos. Un grupo de la SRA de Chicago que estaba desarrollando materiales didácticos utilizando la notación se mostró a favor del nombre "Mathlab". Esto no tuvo éxito. Otra sugerencia fue llamarlo "Las mejores matemáticas de Iverson" y luego dejar que la gente acuñara el acrónimo apropiado. Esto se consideró una broma.

Entonces, un día, Adin Falkoff entró en la oficina de Ken y escribió "Un lenguaje de programación" en la pizarra, y debajo el acrónimo "APL". Así nació. Aproximadamente una semana después de esto, Eric Iverson me hizo su pregunta, en un momento en que el nombre aún no había encontrado su camino en las trece millas de Taconic Parkway desde IBM Research hasta IBM Mohansic.

—Eugene  McDonnell , [77]

APL se reinterpreta ocasionalmente como lenguaje de programación de matrices o lenguaje de procesamiento de matrices , [78] convirtiendo así a APL en un backronym .

Bolsa para portátil para conferencias de la Asociación Británica de APL (BAPLA)

Logo

Siempre ha habido cooperación entre los proveedores de APL, y se celebraron conferencias conjuntas de forma regular desde 1969 hasta 2010. [79] En dichas conferencias, a menudo se entregaba mercancía de APL, con motivos de APL o una colección de logotipos de proveedores. Comunes eran las manzanas (como un juego de palabras con la similitud en la pronunciación de Apple y APL ) y el fragmento de código que son los símbolos producidos por la distribución clásica del teclado APL al mantener presionada la tecla modificadora APL y escribir "APL".*

A pesar de todos estos esfuerzos de la comunidad, no surgió ningún logotipo universal independiente del proveedor para el lenguaje de programación. A medida que los lenguajes de programación populares han establecido cada vez más logotipos reconocibles, Fortran obtuvo uno en 2020, [80] La Asociación Británica de APL lanzó una campaña en la segunda mitad de 2021 para establecer dicho logotipo para APL, y después de una elección comunitaria y múltiples rondas de comentarios. , se eligió un logotipo en mayo de 2022. [81]

Usar

APL se utiliza para muchos propósitos, incluidas aplicaciones financieras y de seguros , [82] inteligencia artificial , [83] [84] redes neuronales [85] y robótica . [86] Se ha argumentado que APL es una herramienta de cálculo y no un lenguaje de programación; [87] su naturaleza simbólica y sus capacidades de matriz lo han hecho popular entre los expertos en el dominio y los científicos de datos [88] que no tienen ni requieren las habilidades de un programador informático . [ cita necesaria ]

APL se adapta bien a la manipulación de imágenes y la animación por computadora , donde las transformaciones gráficas se pueden codificar como multiplicaciones de matrices. Una de las primeras empresas comerciales de gráficos por computadora, Digital Effects , produjo un producto de gráficos APL llamado Visions , que se utilizó para crear comerciales de televisión y animación para la película Tron de 1982 . [89] Últimamente, el simulador de navegación Stormwind utiliza APL para implementar su lógica central, su interfaz con el middleware del proceso de renderizado y una parte importante de su motor de física . [90]

Hoy en día, APL sigue utilizándose en una amplia gama de aplicaciones comerciales y científicas, por ejemplo, gestión de inversiones , [82] gestión de activos , [91] [ cita necesaria ] atención médica , [92] y elaboración de perfiles de ADN . [93] [94]

Implementaciones notables

APL\360

La primera implementación de APL que utilizó símbolos APL reconocibles fue APL\360, que se ejecutó en IBM System/360 y se completó en noviembre de 1966 [1] aunque en ese momento permanecía en uso sólo dentro de IBM. [39] En 1973, sus implementadores, Larry Breed , Dick Lathwell y Roger Moore , recibieron el premio Grace Murray Hopper de la Association for Computing Machinery (ACM). Fue otorgado "por su trabajo en el diseño e implementación de APL\360, estableciendo nuevos estándares en simplicidad, eficiencia, confiabilidad y tiempo de respuesta para sistemas interactivos". [95] [96] [97]

En 1975, la microcomputadora IBM 5100 ofrecía APL\360 [98] como uno de los dos lenguajes interpretados basados ​​en ROM integrados para la computadora, completo con un teclado y una pantalla que admitía todos los símbolos especiales utilizados en el idioma. [99]

Los desarrollos importantes de APL\360 incluyeron CMS/APL, que hizo uso de las capacidades de almacenamiento virtual de CMS y APLSV, que introdujeron variables compartidas , variables del sistema y funciones del sistema. Posteriormente fue portado a las plataformas IBM System/370 y VSPC hasta su lanzamiento final en 1983, después de lo cual fue reemplazado por APL2. [39]

APL\1130

En 1968, APL\1130 se convirtió en el primer sistema APL disponible públicamente, creado por IBM para el IBM 1130 . [100] Se convirtió en el software de biblioteca IBM Tipo III más popular que lanzó IBM. [101]

APL*Plus y Sharp APL

APL*Plus y Sharp APL son versiones de APL\360 con extensiones adicionales orientadas a los negocios, como formato de datos y funciones para almacenar matrices APL en archivos externos. Fueron desarrollados conjuntamente por dos empresas, empleando a varios miembros del equipo de desarrollo original de IBM APL\360. [102]

Las dos empresas eran IP Sharp Associates (IPSA), una empresa de servicios APL\360 formada en 1964 por Ian Sharp, Roger Moore y otros, y STSC , una empresa de servicios de consultoría y tiempo compartido formada en 1969 por Lawrence Breed y otros. Juntos, los dos desarrollaron APL*Plus y posteriormente continuaron trabajando juntos, pero desarrollaron APL por separado como APL*Plus y Sharp APL. STSC portó APL*Plus a muchas plataformas con versiones para VAX 11, [103] PC y UNIX, mientras que IPSA adoptó un enfoque diferente a la llegada de la computadora personal e hizo que Sharp APL estuviera disponible en esta plataforma utilizando PC-XT adicional. Hardware /360 . En 1993, se formó Soliton Incorporated para respaldar Sharp APL y desarrolló Sharp APL en SAX (Sharp APL para Unix). A partir de 2018 , APL*Plus continúa como APL2000 APL+Win.

En 1985, Ian Sharp y Dan Dyer de STSC recibieron conjuntamente el premio Kenneth E. Iverson por su destacada contribución a APL . [104]

APL2

APL2 fue una reimplementación significativa de APL por parte de IBM, que se desarrolló a partir de 1971 y se lanzó por primera vez en 1984. Proporciona muchas adiciones al lenguaje, de las cuales la más notable es la compatibilidad con matrices anidadas (no rectangulares). [39] Todo el equipo de productos y servicios de APL2 recibió el premio Iverson en 2007. [104]

En 2021, IBM vendió APL2 a Log-On Software, quien desarrolla y vende el producto como Log-On APL2 . [105]

APLGOL

En 1972, APLGOL fue lanzado como una versión experimental de APL que agregó construcciones de lenguaje de programación estructuradas al marco del lenguaje. Se agregaron nuevas declaraciones para el control interestatal, la ejecución de declaraciones condicionales y la estructuración de declaraciones, así como declaraciones para aclarar la intención del algoritmo. [106] Se implementó para Hewlett-Packard en 1977. [107]

Diálogo APL

Dyalog APL fue lanzado por primera vez por la empresa británica Dyalog Ltd. [108] en 1983 [109] y, a partir de 2018 , está disponible para las plataformas AIX , Linux (incluso en Raspberry Pi ), macOS y Microsoft Windows . Está basado en APL2, con extensiones para soportar programación orientada a objetos , [110] programación funcional , [111] y programación tácita . [112] Las licencias son gratuitas para uso personal/no comercial. [113]

En 1995, dos miembros del equipo de desarrollo, John Scholes y Peter Donnelly, recibieron el premio Iverson por su trabajo con el intérprete. [104] Gitte Christensen y Morten Kromberg recibieron conjuntamente el Premio Iverson en 2016. [114]

NARS2000

NARS2000 es un intérprete de APL de código abierto escrito por Bob Smith, un destacado desarrollador e implementador de APL de STSC en las décadas de 1970 y 1980. NARS2000 contiene funciones avanzadas y nuevos tipos de datos y se ejecuta de forma nativa en Microsoft Windows y otras plataformas bajo Wine . Lleva el nombre de una herramienta de desarrollo de la década de 1980, NARS (Nested Arrays Research System). [115]

APLX

APLX es un dialecto multiplataforma de APL, basado en APL2 y con varias extensiones, que fue lanzado por primera vez por la empresa británica MicroAPL en 2002. Aunque ya no está en desarrollo ni en venta comercial, ahora está disponible de forma gratuita en Dyalog. [116]

APL de York

York APL [117] fue desarrollado en la Universidad de York , Ontario, alrededor de 1968, ejecutándose en mainframes IBM 360. Una diferencia notable entre este y APL\360 fue que definió la "forma" (ρ) de un escalar como 1, mientras que APL\360 la definió como el 0, más matemáticamente correcto; esto hizo que fuera más fácil escribir funciones que actuaran de la misma manera con escalares y vectores.

GNU-APL

GNU APL es una implementación gratuita de APL extendida como se especifica en ISO/IEC 13751:2001 y, por lo tanto, es una implementación de APL2. Se ejecuta en Linux , macOS, varios dialectos BSD y en Windows (ya sea usando Cygwin para soporte completo de todas las funciones del sistema o como un binario nativo de Windows de 64 bits al que le faltan algunas de las funciones del sistema). GNU APL usa Unicode internamente y puede programarse mediante scripts. Fue escrito por Jürgen Sauermann. [118]

Richard Stallman , fundador del Proyecto GNU , fue uno de los primeros en adoptar APL y lo utilizó para escribir un editor de texto cuando era estudiante de secundaria en el verano de 1969. [119]

Interpretación y compilación de APL.

APL es tradicionalmente un lenguaje interpretado , que tiene características de lenguaje como una tipificación de variables débil que no se adapta bien a la compilación . [120] Sin embargo, con matrices como estructura de datos central [121] proporciona oportunidades para obtener ganancias de rendimiento a través del paralelismo , [122] computación paralela , [123] [124] aplicaciones masivamente paralelas , [125] [126] y aplicaciones muy grandes. integración de escala (VLSI), [127] [128] y desde el principio APL ha sido considerado como un lenguaje de alto rendimiento [129] ; por ejemplo, se destacó por la velocidad con la que podía realizar operaciones matriciales complicadas "porque opera en matrices y realiza operaciones como inversión de matrices internamente". [130]

Sin embargo, APL rara vez se interpreta puramente y las técnicas de compilación o compilación parcial que se utilizan o se han utilizado incluyen las siguientes:

reconocimiento de modismos

La mayoría de los intérpretes de APL admiten el reconocimiento de modismos [131] y evalúan modismos comunes como operaciones únicas. [132] [133] Por ejemplo, al evaluar el modismo BV/⍳⍴Acomo una sola operación (donde BVes un vector booleano y Aes una matriz), se evita la creación de dos matrices intermedias. [134]

Código de bytes optimizado

La escritura débil en APL significa que un nombre puede hacer referencia a una matriz (de cualquier tipo de datos), una función o un operador. En general, el intérprete no puede saber de antemano qué forma tendrá y, por lo tanto, debe realizar análisis, verificación de sintaxis, etc. en tiempo de ejecución. [135] Sin embargo, en determinadas circunstancias, es posible deducir de antemano a qué tipo se espera que haga referencia un nombre y luego generar un código de bytes que se puede ejecutar con una sobrecarga de tiempo de ejecución reducida. Este código de bytes también se puede optimizar utilizando técnicas de compilación como el plegado constante o la eliminación de subexpresiones comunes . [136] El intérprete ejecutará el código de bytes cuando esté presente y cuando se cumplan las suposiciones que se hayan realizado. Dyalog APL incluye soporte para código de bytes optimizado. [136]

Compilacion

La compilación de APL ha sido objeto de investigación y experimentación desde que el lenguaje estuvo disponible por primera vez; Se considera que el primer compilador fue el Burroughs APL-700 [137] , que se lanzó alrededor de 1971. [138] Para poder compilar APL, se deben imponer limitaciones de idioma. [137] [139] APEX es un compilador APL de investigación escrito por Robert Bernecky y está disponible bajo la licencia pública GNU . [140]

El compilador STSC APL es un híbrido de un optimizador de código de bytes y un compilador: permite la compilación de funciones en código de máquina siempre que se declaren sus subfunciones y funciones globales , pero el intérprete todavía se utiliza como biblioteca de tiempo de ejecución y para ejecutar funciones que no lo hacen. no cumple con los requisitos de compilación. [141]

Estándares

APL ha sido estandarizado por el grupo de trabajo X3J10 del Instituto Nacional Estadounidense de Estándares (ANSI) y la Organización Internacional de Normalización (ISO) y la Comisión Electrotécnica Internacional (IEC), el Subcomité 22 del Comité Técnico Conjunto 1 de ISO/IEC, el Grupo de Trabajo 3. El lenguaje principal de APL es especificado en ISO 8485:1989, y el lenguaje APL extendido se especifica en ISO/IEC 13751:2001.

Referencias

  1. ^ ab "Citas y anécdotas de APL". jsoftware.com . Consultado el 14 de abril de 2018 .
  2. ^ "estándar::iota". cppreference.com .
  3. ^ abc Kenneth E. Iverson (1 de diciembre de 1962). Un lenguaje de programación. Wiley . ISBN 978-0-471-43014-8. OL  26792153M. Wikidata  Q105954505 . Consultado el 6 de agosto de 2023 .
  4. ^ McIntyre, Donald B. (1991). "El lenguaje como herramienta intelectual: de los jeroglíficos al APL". Revista de sistemas IBM . 30 (4): 554–581. doi :10.1147/sj.304.0554. Archivado desde el original el 4 de marzo de 2016 . Consultado el 9 de enero de 2015 .
  5. ^ "Mención del premio ACM - John Backus". Premios.acm.org. 1977. Archivado desde el original el 12 de febrero de 2008 . Consultado el 3 de febrero de 2010 .
  6. ^ ab Moler, Cleve. "El crecimiento de MATLAB" (PDF) . Archivado desde el original (PDF) el 11 de abril de 2009 . Consultado el 3 de febrero de 2010 .
  7. ^ ab Hui, Roger. "Una bibliografía de APL y J". jsoftware.com/jwiki . Consultado el 2 de marzo de 2010 .
  8. ^ ab "Una entrevista con Arthur Whitney". Sistemas Kx. 4 de enero de 2004. Archivado desde el original el 4 de abril de 2009 . Consultado el 2 de marzo de 2010 .
  9. ^ Iverson, Kenneth E., "Procesamiento automático de datos: Capítulo 6: Un lenguaje de programación" Archivado el 4 de junio de 2009 en Wayback Machine , 1960, borrador del libro de Brooks e Iverson de 1963, Procesamiento automático de datos .
  10. ^ Brooks, Fred ; Iverson, Kenneth, (1963), Procesamiento automático de datos , John Wiley & Sons Inc.
  11. ^ "Mención del premio Turing 1979". Premios.acm.org. Archivado desde el original el 23 de diciembre de 2009 . Consultado el 3 de febrero de 2010 .
  12. ^ Hellerman, H. (julio de 1964). "Sistema traductor de matrices personalizado experimental". Comunicaciones de la ACM . 7 (7): 433–438. doi : 10.1145/364520.364573 . S2CID  2181070.
  13. ^ Falkoff, Adin D.; Iverson, Kenneth E., "La evolución de APL", Avisos ACM SIGPLAN 13, 1978-08.
  14. ^ Abrams, Philip S., intérprete de "notación Iverson", Informe técnico: CS-TR-66-47, Departamento de Ciencias de la Computación, Universidad de Stanford, agosto de 1966;
  15. ^ Haigh, Thomas (2005). "Biografías: Kenneth E. Iverson". Anales IEEE de la historia de la informática . doi :10.1109/MAHC.2005.4.
  16. ^ ab Breed, Larry, "The First APL Terminal Session", APL Quote Quad , Association for Computing Machinery, volumen 22, número 1, septiembre de 1991, p. 2–4.
  17. ^ 19 de 2009 Adin Falkoff - Museo de Historia de la Computación. "Iverson le dio crédito por elegir el nombre APL y la introducción de la máquina de escribir IBM de pelota de golf con el tipo de letra de reemplazo, que proporcionó el famoso conjunto de caracteres para representar programas".
  18. ^ Raza, Larry (agosto de 2006). "Cómo llegamos a APL\1130". Vector (Asociación Británica APL) . 22 (3). ISSN  0955-1433. Archivado desde el original el 12 de mayo de 2008 . Consultado el 2 de abril de 2007 .
  19. ^ Manual de APL\1130 Archivado el 21 de febrero de 2011 en Wayback Machine , mayo de 1969
  20. ^ "Recordando APL". Quadibloc.com . Consultado el 17 de junio de 2013 .
  21. ^ Falkoff, Adin; Iverson, Kenneth E., "APL\360 Users Guide" Archivado el 29 de febrero de 2012 en Wayback Machine , IBM Research, Thomas J. Watson Research Center, Yorktown Heights, Nueva York, agosto de 1968.
  22. ^ "Sistema terminal APL\360" Archivado el 11 de julio de 2010 en Wayback Machine , IBM Research, Centro de investigación Thomas J. Watson, marzo de 1967.
  23. ^ ab Pakin, Sandra (1968). Manual de referencia de APL\360 . Asociados de investigación científica, Inc. ISBN 978-0-574-16135-2.
  24. ^ Falkoff, Adin D.; Iverson, Kenneth E., The Design of APL, IBM Journal of Research and Development , Volumen 17, Número 4, julio de 1973. "Estas funciones ambientales definidas se basaron en el uso de otra clase más de funciones, llamadas "vigas I". debido a la forma del símbolo utilizado para ellos, que proporciona una facilidad más general para la comunicación entre los programas APL y las partes menos abstractas del sistema. Las funciones I-beam fueron introducidas por primera vez por los programadores del sistema para permitirles ejecutar System/ 360 instrucciones desde dentro de los programas APL y, por lo tanto, utilizan APL como una ayuda directa en su actividad de programación. La conveniencia obvia de funciones de este tipo, que parecían ser parte del lenguaje, llevó a la introducción de la función monádica I-beam para uso directo por cualquier persona. Varios argumentos a favor de esta función arrojaron información sobre el entorno, como el espacio disponible y la hora del día."
  25. ^ Minker, Jack (enero de 2004). "2.3.4 Desarrollos de software informático en el CSC, 1962-1973". Inicio de la Computación y las Ciencias de la Computación en la Universidad de Maryland (PDF) (Reporte). Universidad de Maryland. pag. 38. Archivado desde el original (PDF) el 10 de junio de 2011 . Consultado el 23 de mayo de 2011 .
  26. ^ Stebbens, Alan. "Cómo todo empezó". Archivado desde el original el 4 de marzo de 2016 . Consultado el 22 de mayo de 2011 .
  27. ^ "Manual de referencia de operaciones y lenguaje APL de Xerox" (PDF) . Archivado (PDF) desde el original el 9 de octubre de 2022.
  28. ^ "SIGAPL". Sigapl.org . Consultado el 17 de junio de 2013 .
  29. ^ "Cincuenta años de BASIC, el lenguaje de programación que hizo que las computadoras fueran personales". Tiempo . 29 de abril de 2014 . Consultado el 29 de abril de 2018 .
  30. ^ "Computadoras MCM M70/M700". computadoras-antiguas.com . Archivado desde el original el 3 de abril de 2018 . Consultado el 8 de abril de 2018 .
  31. ^ Stachniak, Stachniak (2011). Inventando la PC: la historia del MCM/70. Prensa de la Universidad McGill Queens. ISBN 978-0-7735-3852-8.
  32. ^ Miller, Michael (17 de diciembre de 2014). "PC que allanaron el camino para Altair". Revista PC . Ziff Davis . Consultado el 29 de abril de 2018 .
  33. ^ "VideoBrain Family Computer", Popular Science , noviembre de 1978, anuncio.
  34. ^ "Una mirada a SuperPet". ¡Calcular! . Small System Services Inc. Diciembre de 1981 . Consultado el 29 de abril de 2018 .
  35. ^ Gates, Bill (31 de enero de 1976). "Una carta abierta a los aficionados". Boletín del Homebrew Computer Club . Consultado el 29 de abril de 2018 .
  36. ^ Hui, Roger. "Recordando a Ken Iverson". keiapl.org . KEIAPL . Consultado el 10 de enero de 2015 .
  37. ^ "Kenneth E. Iverson". Premio ACM AM Turing . ACM . Consultado el 10 de enero de 2015 .
  38. ^ "APL2: Los primeros años: ¿puede y debe ceder en cuestiones técnicas?". Capítulo SIGPLAN sobre lenguajes de programación de matrices . ACM . Consultado el 10 de enero de 2015 .
  39. ^ abcd Falkoff, Adin D. (1991). "La familia IBM de sistemas APL". Revista de sistemas IBM . 30 (4): 416–432. doi :10.1147/sj.304.0416. S2CID  19030940.
  40. ^ "IBM APL2". EDM2 . 2019-10-09 . Consultado el 17 de noviembre de 2021 .
  41. ^ "APL2: Novedades". ibm.com . IBM . Consultado el 22 de abril de 2018 .
  42. ^ Micro APL. "Descripción general del sistema APL". microapl.com . Micro APL . Consultado el 10 de enero de 2015 .
  43. ^ Robertson, Graeme. "Una visión personal de APL2010". archive.vector.org.uk . Vector - Revista de la Asociación Británica de APL. Archivado desde el original el 2 de abril de 2015 . Consultado el 10 de enero de 2015 .
  44. ^ Rodríguez, P.; Rojas, J.; Alfonseca, M.; Burgos, JI (1989). "Un sistema experto en síntesis química escrito en APL2/PC". ACM SIGAPL APL Cotización Cuádruple . 19 (4): 299–303. doi :10.1145/75144.75185. S2CID  16876053.
  45. ^ "APL2: un lenguaje de programación para resolución de problemas, visualización y acceso a bases de datos". www-03.ibm.com . IBM . Consultado el 10 de enero de 2015 .
  46. ^ Pike, Rob (25 de marzo de 2018). "Hiedra". GoDoc . Archivado desde el original el 13 de agosto de 2019.
  47. ^ "Preguntas frecuentes sobre Wolfram Language". Wolframio . Consultado el 20 de febrero de 2020 . LISP y APL fueron dos de las primeras influencias
  48. ^ Instrumentos de Texas (1977). "Anuncio de página completa de TI 745: Presentación de un nuevo conjunto de personajes". Mundo de la informática . 11 (27): 32 . Consultado el 20 de enero de 2015 .
  49. ^ Diálogo. "Fuentes y teclados APL". www.dyalog.com . Diálogo . Consultado el 19 de enero de 2015 .
  50. ^ Smith, Bob. "Teclado NARS2000". www.sudleyplace.com . Bob Smith/NARS2000 . Consultado el 19 de enero de 2015 .
  51. ^ "Introducción a APL - Símbolos APL". www.microapl.co.uk . MicroAPL Ltd. Consultado el 8 de enero de 2015 .
  52. ^ Marrón, James A.; Halcones, Brent; Trimble, Ray (1993). "Ampliación del juego de caracteres APL". ACM SIGAPL APL Cotización Cuádruple . 24 (1): 41–46. doi :10.1145/166198.166203.
  53. ^ Kromberg, Morten. "Soporte Unicode para APL". archive.vector.org.uk . Vector, Revista de la Asociación Británica de APL. Archivado desde el original el 20 de enero de 2015 . Consultado el 8 de enero de 2015 .
  54. ^ Hsu, Aarón. "Divulgación y educación en informática con APL". Dialog, Ltd. Consultado el 15 de julio de 2016 .
  55. ^ Dyalog, Inc. Fuentes y teclados APL. https://www.dyalog.com/apl-font-keyboard.htm
  56. ^ ab MicroAPL. "Operadores". www.microapl.co.uk . MicroAPL . Consultado el 12 de enero de 2015 .
  57. ^ Funciones primitivas. "Funciones primitivas". www.microapl.co.uk/ . Consultado el 1 de enero de 2015 .
  58. ^ Espacio de trabajo. "El espacio de trabajo". www.microapl.co.uk . Consultado el 1 de enero de 2015 .
  59. ^ "ejemplo". Catpad.net. Archivado desde el original el 8 de julio de 2013 . Consultado el 17 de junio de 2013 .
  60. ^ "Ingresar símbolos APL". www.microapl.co.uk . Consultado el 1 de enero de 2015 .
  61. ^ Dickey, Lee (1993). "Una lista de esquemas de transliteración APL". Archivado desde el original el 29 de septiembre de 2006.
  62. ^ Iverson, KE (agosto de 1980). "La notación como herramienta de pensamiento". Comunicaciones de la ACM . 23 : 444–465. Archivado desde el original el 20 de septiembre de 2013.
  63. ^ Batenburg. "Eficiencia APL". www.ekevanbatenburg.nl . Consultado el 1 de enero de 2015 .
  64. ^ Hombre vax. "Excelente programación de APL" (PDF) . www.vaxman.de . Archivado (PDF) desde el original el 9 de octubre de 2022 . Consultado el 1 de enero de 2015 .
  65. ^ Janko, Wolfgang (mayo de 1987). "Investigación sobre la eficiencia del uso de APL para la programación de una máquina de inferencia". ACM SIGAPL APL Cotización Cuádruple . 17 (4): 450–456. doi :10.1145/384282.28372.
  66. ^ Boreal. "¿Por qué APL?". www.aplborealis.com . Consultado el 1 de enero de 2015 .
  67. ^ Iverson, Kenneth E. (1987). "Un diccionario de APL". www.jsoftware.com . Consultado el 20 de enero de 2015 .
  68. ^ abcdef "Conceptos de APL". Microapl.co.uk . Consultado el 3 de febrero de 2010 .
  69. ^ "Teoría de matrices anidadas". Nial.com. Archivado desde el original el 9 de julio de 2011 . Consultado el 3 de febrero de 2010 .
  70. ^ abc "Programmera i APL", Bohman, Fröberg, Studentlitteratur , ISBN 91-44-13162-3 
  71. ^ Iverson, Kenneth E. (1983). "Sintaxis y semántica de APL". www.jsoftware.com . Asociados de IP Sharp . Consultado el 11 de enero de 2015 .
  72. ^ MicroAPL. "Primitivas de APL". www.microapl.co.uk . MicroAPL . Consultado el 11 de enero de 2015 .
  73. ^ "Fuente APL: glifos APL adicionales". wiki.nars2000.org . NARS2000 . Consultado el 11 de enero de 2015 .
  74. ^ Fox, Ralph L. "Números sistemáticamente aleatorios". www.sigapl.org . SIGAPL . Consultado el 11 de enero de 2015 .
  75. ^ Scholes, John (26 de enero de 2009). El juego de la vida de Conway en APL (vídeo). YouTube . Consultado el 20 de noviembre de 2021 .
  76. ^ Más detalles técnicos en el artículo de APL Wiki "Conway's Game of Life". Consultado el 20 de noviembre de 2021.
  77. ^ McDonnell, EE La introducción a A Source Book in APL, APL Press, 1981. (escaneo completo del libro)
  78. ^ Acharya, R; Pereira, (904567457) Lenguaje de programación NE APL Archivado el 3 de noviembre de 2021 en Wayback Machine . Documento para CS5314 (Conceptos de lenguajes de programación) en Virginia Tech.
  79. ^ Wiki de APL. Conferencia APL. Consultado el 13 de octubre de 2021.
  80. ^ Jacob Williams. Cónica Degenerada: Sangre Nueva. Consultado el 13 de octubre de 2021.
  81. ^ Wiki de APL. Logotipo de APL. Consultado el 20 de mayo de 2022.
  82. ^ ab "Informe anual 2017" (PDF) . SimCorp. 1 de febrero de 2018. Archivado (PDF) desde el original el 9 de octubre de 2022 . Consultado el 3 de abril de 2018 . Sofia es una plataforma de gestión de inversiones integral como SimCorp Dimension. ... Sofia se basa en el lenguaje de codificación APL al igual que algunas partes de SimCorp Dimension.
  83. ^ Lee, Georges; Lelouche, Ruddy; Meissonnier, Vicente; Zarri, Gian Piero (1 de septiembre de 1982). "Uso de APL en un entorno de Inteligencia Artificial". ACM SIGAPL APL Cotización Cuádruple . 13 (1): 183-191. doi : 10.1145/390006.802242 . Consultado el 3 de abril de 2018 .
  84. ^ Fordyce, K.; Sullivan, G. (1985). "Ayuda para el desarrollo de la inteligencia artificial". Cuádruple de cotizaciones de APL . APL 85 Conf. Proc. (15): 106-113. doi : 10.1145/255315.255347 .
  85. ^ Alfonseca, Manuel (julio de 1990). "Redes neuronales en APL". ACM SIGAPL APL Cotización Cuádruple . 20 (4): 2–6. doi : 10.1145/97811.97816 . Consultado el 3 de abril de 2018 .
  86. ^ Kromberg, Morten. "Programación de robots en APL". www.dyalog.com/ . Consultado el 6 de enero de 2015 .
  87. ^ Holmes, WN (mayo de 1978). "¿Es APL un lenguaje de programación?". La revista informática . 21 (2): 128-131. doi : 10.1093/comjnl/21.2.128 .
  88. ^ Hsu, Aaron (18 de noviembre de 2017). "Patrones de diseño versus antipatrón en APL". funcionalconf.com . Archivado desde el original el 23 de marzo de 2018 . Consultado el 7 de abril de 2018 .
  89. ^ Magnenat-Thalmann, Nadia; Thalmann, Daniel (1985). Teoría y práctica de la animación por ordenador. Springer-Verlag . pag. 38.ISBN 9784431684336. Consultado el 3 de abril de 2018 . Digital Effects es otra productora que trabajó en Tron. Utilizaron un sistema de escaneo láser para digitalizar, almacenar y reproducir imágenes. Judson Rosebush, presidente de Efectos Digitales, es el diseñador principal de APL VISION y FORTRAN VISION, dos paquetes de animación por computadora que se utilizan actualmente.
  90. ^ Gutsell, Sam (17 de octubre de 2017). "Simulador de Ventormenta en Dyalog '16". www.optima-systems.co.uk . Sistemas óptimos . Consultado el 3 de abril de 2018 . Stormwind es un [simulador de navegación en 3D] que ha despertado un gran interés en la comunidad APL.
  91. ^ "OP-Pohjola ja Tieto hoitivat sovelluksen muutostyöt sujuvalla yhteistyöllä" [Cooperación fluida entre OP-Pohjola y Tieto permitió la modificación de la aplicación] (PDF) . www.tieto.com (en finlandés). Atar a . Archivado desde el original (PDF) el 9 de octubre de 2022 . Consultado el 3 de abril de 2018 .[ enlace muerto permanente ]
  92. ^ "Vi idag" [Nosotros hoy]. profdoccare.se (en sueco) . Consultado el 3 de abril de 2018 . Mediante la elección de APL como plataforma técnica, es relativamente fácil construir rápidamente una solución que pueda denominarse prototipo ejecutable (traducido del original).
  93. ^ Brennero, Charles. "Tecnología de identificación de ADN y APL". ADN-view.com . Presentación en la Conferencia de Usuarios de APL 2005 . Consultado el 9 de enero de 2015 .
  94. ^ Brennero, Charles. "Hay ADN en todas partes: una oportunidad para APL". www.youtube.com . YouTube. Archivado desde el original el 14 de noviembre de 2021 . Consultado el 9 de enero de 2015 .
  95. ^ "Premios - 1973 - Lawrence Breed". Asociación para Maquinaria de Computación. Archivado desde el original el 2 de abril de 2012.
  96. ^ "Premios - 1973 - Richard Lathwell". Asociación para Maquinaria de Computación. Archivado desde el original el 2 de abril de 2012.
  97. ^ "Premios - 1973 - Roger Moore". Asociación para Maquinaria de Computación. Archivado desde el original el 2 de abril de 2012.
  98. ^ "IBM 5100". computadoras-antiguas.com . Archivado desde el original el 30 de abril de 2018 . Consultado el 8 de abril de 2018 .
  99. ^ "Bienvenido, IBM, a la informática personal". Byte . Diciembre de 1975. p. 90 . Consultado el 29 de abril de 2018 .
  100. ^ "Cronología de APL y sus influencias en el desarrollo del lenguaje informático". www.sigapl.org . ACM . Consultado el 29 de abril de 2018 .
  101. ^ Larry Breed (agosto de 2006). "Cómo llegamos a APL\1130". Vector (Asociación Británica APL) . 22 (3). ISSN  0955-1433. Archivado desde el original el 12 de mayo de 2008 . Consultado el 29 de abril de 2018 .
  102. ^ Roger Moore (2005). "Historia de la red y el tiempo compartido de IP Sharp Associates". Rogerdmoore.ca . Roger Moore. Archivado desde el original el 4 de abril de 2019 . Consultado el 7 de marzo de 2018 .
  103. ^ Blumenthal, Marcia (18 de mayo de 1981). "Los VAX-11 adquieren el procesador APL". Mundo de la informática . Consultado el 22 de abril de 2018 .
  104. ^ abc "Premio Kenneth E. Iverson por su destacada contribución a APL". Capítulo SIGPLAN sobre lenguajes de programación de matrices (SIGAPL). Archivado desde el original el 26 de febrero de 2012.
  105. ^ Mark Schora (26 de enero de 2021). "Log-On Software anuncia Log-On APL2". Software de inicio de sesión . Consultado el 17 de noviembre de 2021 .
  106. ^ Kelley, RA (1973). "APLGOL, un lenguaje de programación estructurado experimental". Revista IBM de investigación y desarrollo . 17 : 69–73. doi :10.1147/rd.171.0069.
  107. ^ Johnston, Ronald L. (julio de 1977). "APLGOL: Instalaciones de programación estructuradas para APL". Diario de Hewlett-Packard.
  108. ^ "Sitio web de Dyalog Ltd" . Consultado el 6 de junio de 2018 .
  109. ^ "Dialog a los 25" (PDF) . Revista vectorial . Asociación Británica de APL. Septiembre de 2008 . Consultado el 14 de abril de 2018 .[ enlace muerto permanente ]
  110. ^ Kromberg, Morten (22 de octubre de 2007). "Matrices de objetos" (PDF) . Actas del simposio de 2007 sobre lenguajes dinámicos . pag. 20. doi :10.1145/1297081.1297087. ISBN 9781595938688. S2CID  18484472. Archivado (PDF) desde el original el 9 de octubre de 2022 . Consultado el 27 de agosto de 2018 .
  111. ^ Scholes, Juan. "D: un subconjunto funcional de Dyalog APL". Asociación Británica de APL.
  112. ^ Scholes, Juan. "Traducción de funciones D a forma tácita". Dialog Ltd.
  113. ^ "Dyalog - Precios y Licencias".
  114. ^ "El premio Iverson 2016 reconoce al CEO y CXO de Dyalog" . Consultado el 6 de junio de 2018 .
  115. ^ "Sistema de investigación de matrices anidadas - NARS2000: un intérprete APL experimental". NARS2000 . Software Sudley Place . Consultado el 10 de julio de 2015 .
  116. ^ "APLX ha sido retirado de la venta comercial pero se puede descargar de forma gratuita". Microapl.com . Consultado el 14 de abril de 2018 .
  117. ^ "APL de Nueva York".
  118. ^ "GNU-APL". directorio.fsf.org . Directorio de software libre . Consultado el 28 de septiembre de 2013 .
  119. ^ Stallman, Richard M. "RMS Berättar". Archivado desde el original el 26 de noviembre de 2018 . Consultado el 22 de abril de 2018 .
  120. ^ Budd, Timoteo (1988). Un compilador APL. Springer-Verlag. ISBN 978-0-387-96643-4.
  121. ^ "¿Qué es APL?". www.sigapl.org . SIGAPL . Consultado el 20 de enero de 2015 .
  122. ^ Ju, Dz-Ching; Ching, Wai-Mee (1991). "Explotación del paralelismo de datos APL en una máquina MIMD de memoria compartida". Boletín Avisos ACM SIGPLAN . 26 (7): 61–72. doi :10.1145/109625.109633. S2CID  8584353.
  123. ^ Hsu, Aaron W.; Bowman, William J. "Revisando APL en la era moderna" (PDF) . www.cs.princeton.edu . Archivado (PDF) desde el original el 9 de octubre de 2022 . Consultado el 20 de enero de 2015 .
  124. ^ Ching, WM; Ju, D. (1991). "Ejecución de programas APL paralelizados automáticamente en RP3". Revista IBM de investigación y desarrollo . 35 (5/6): 767–777. doi :10.1147/rd.355.0767. Archivado desde el original el 3 de marzo de 2016 . Consultado el 20 de enero de 2015 .
  125. ^ Blelloch, Guy E.; Sabot, Gary W. (1990). "Compilación de lenguajes orientados a colecciones en computadoras masivamente paralelas". Revista de Computación Paralela y Distribuida . 8 (2): 119-134. CiteSeerX 10.1.1.51.5088 . doi :10.1016/0743-7315(90)90087-6. Los lenguajes orientados a colecciones incluyen APL, APL2 
  126. ^ Jendrsczok, Johannes; Hoffman, Rolf; Ediger, Patricio; Keller, Jörg. "Implementación de funciones paralelas de datos similares a APL en una máquina GCA" (PDF) . www.fernuni-hagen.de . págs. 1–6. Archivado desde el original (PDF) el 22 de enero de 2015 . Consultado el 22 de enero de 2015 . GCA – Automatización Celular Global. Inherentemente masivamente paralelo. "Se ha elegido APL debido a su capacidad para expresar estructuras matriciales y vectoriales".
  127. ^ Brenner, normando (1984). "Diseño de circuitos VLSI utilizando APL con subrutinas fortran". ACM SIGAPL APL Cotización Cuádruple . 14 (4): 77–79. doi : 10.1145/800058.801079. S2CID  30863491. APL para interactividad y facilidad de codificación
     • Brenner, normando (1984). "Diseño de circuitos VLSI utilizando APL con subrutinas fortran". Actas de la conferencia internacional sobre APL - APL '84 . ACM SIGAPL. ISBN 978-0897911375.
  128. ^ Apuesta, DJ; Hobson, RF (1989). "Hacia un entorno gráfico/procedimental para la construcción de generadores de módulos VLSI". Actas de la conferencia Conferencia IEEE Pacific Rim sobre comunicaciones, computadoras y procesamiento de señales . págs. 606–611. doi :10.1109/PACRIM.1989.48437. S2CID  7921438. Se describen los generadores de módulos VLSI. APL y C, como ejemplos de lenguajes interpretados y compilados, pueden conectarse a una pantalla de gráficos avanzada.
  129. ^ Lee, Robert S. (1983). "Dos implementaciones de APL". Revista PC . 2 (5): 379 . Consultado el 20 de enero de 2015 .
  130. ^ "El lenguaje informático APL". MARTA y LLAMA . Archivado desde el original el 13 de febrero de 2015 . Consultado el 20 de enero de 2015 .
  131. ^ Metzger, Robert; Wen, Zhaofang (2000). Reconocimiento y reemplazo automático de algoritmos: un nuevo enfoque para la optimización de programas. La prensa del MIT. ISBN 9780262133685. Consultado el 6 de mayo de 2018 .
  132. ^ Snyder, Lawrence (1982). "Reconocimiento y selección de modismos para la optimización de código". Acta Informática . 17 (3). doi :10.1007/BF00264357. S2CID  8369972.
  133. ^ Cheng, Feng Sheng (1981). Coincidencia de idiomas: una técnica de optimización para un compilador APL (Tesis). Universidad del Estado de Iowa . Consultado el 6 de mayo de 2018 .
  134. ^ "Reconocimiento de modismos". dyalog.com . Consultado el 6 de mayo de 2018 .
  135. ^ Strawn, George O. (marzo de 1977). "¿APL realmente necesita análisis en tiempo de ejecución?". Software: práctica y experiencia . 7 (2): 193–200. doi :10.1002/spe.4380070207. S2CID  1463012.
  136. ^ ab "Guía del usuario del compilador" (PDF) . www.dyalog.com . Dyalog Ltd. Archivado (PDF) desde el original el 9 de octubre de 2022 . Consultado el 7 de mayo de 2018 .
  137. ^ ab Driscoll, Graham C. Jr.; Orth, Donald L. (noviembre de 1986). "Compilación de APL: el traductor APL de Yorktown". Revista IBM de investigación y desarrollo . 30 (6): 583–593. doi :10.1147/rd.306.0583. S2CID  2299699.
  138. ^ "Cronología de APL". www.sigapl.org . ACM . Consultado el 7 de mayo de 2018 .
  139. ^ Wai-Mee, Ching (noviembre de 1986). "Análisis de programas y generación de código en un compilador APL/370". Revista IBM de investigación y desarrollo . 30 (6): 594–602. doi :10.1147/rd.306.0594. S2CID  17306407.
  140. ^ "El Proyecto APEX".
  141. ^ "Compilador APL (mensaje de Jim Weigang al grupo de noticias comp.lang.apl)". 5 de abril de 1994.

Otras lecturas

Video

enlaces externos

Recursos en línea