stringtranslate.com

APL (lenguaje de programación)

APL (nombrado 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 las funciones y operadores, lo que da lugar a un código muy conciso. Ha sido una influencia importante en el desarrollo de modelos de conceptos, hojas de cálculo , programación funcional [5] y paquetes de matemáticas informáticas. [6] También ha inspirado a 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 en la Universidad de Harvard en 1957. 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 diversas funciones. Dichos procedimientos explícitos se denominan algoritmos o programas . Dado que una notación eficaz para la descripción de programas presenta una estructura sintáctica considerable, se denomina lenguaje de programación .

Esta notación se utilizó dentro de IBM para informes de investigación breves sobre sistemas informáticos, como el Burroughs B5000 y su mecanismo de pila, cuando IBM estaba evaluando 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 , Automatic Data Processing , 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 se produjo el primer intento de utilizar la notación para describir un sistema informático completo, después de que Falkoff discutiera con William C. Carter su trabajo para estandarizar el conjunto de instrucciones de las máquinas que posteriormente se convertirían en la familia IBM System/360 .

En 1963, Herbert Hellerman, que trabajaba en el IBM Systems Research Institute, implementó una parte de la notación en una computadora IBM 1620 , y los estudiantes la usaron en un curso especial de secundaria sobre el cálculo de funciones trascendentales mediante la 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ó Personalized Array Translator (PAT). [12]

En 1963, Falkoff, Iverson y Edward H. Sussenguth Jr. , todos ellos trabajando en IBM, utilizaron la notación para una descripción formal de la arquitectura y funcionalidad de la máquina de la serie IBM System/360 , lo que dio lugar a un artículo publicado en IBM Systems Journal en 1964. Después de su publicación, 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, que tenía nuevas funciones en Science Research Associates , una empresa educativa comprada por IBM en 1964. Lawrence pidió a Iverson y a su grupo que ayudaran a utilizar el lenguaje como herramienta para desarrollar y utilizar ordenadores 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 realizado para la computadora IBM 7090 que se ejecutaba en el sistema operativo IBSYS . Este trabajo se terminó a fines de 1965 y más tarde se denominó IVSYS (por sistema Iverson). La base de esta implementación fue descrita en detalle por Abrams en un Informe Técnico de la Universidad de Stanford, "Un intérprete para la notación Iverson" en 1966. El aspecto académico de esto fue supervisado formalmente por Niklaus Wirth . [14] Al igual que el sistema PAT de Hellerman anterior, esta implementación no incluía el conjunto de caracteres APL sino que usaba palabras especiales reservadas en inglés para funciones y operadores. El sistema se adaptó más tarde para un sistema de tiempo compartido y, en noviembre de 1966, se había reprogramado para la computadora IBM System/360 Modelo 50 que se ejecutaba en un modo de tiempo compartido y se usaba internamente en IBM. [15]

Hardware

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

Un avance clave en la capacidad de utilizar APL de manera efectiva, antes del uso generalizado de terminales de tubo de rayos catódicos ( CRT ), fue el desarrollo de un elemento de mecanografía intercambiable especial para máquina de escribir IBM Selectric con todos los caracteres especiales de APL en él. Este se utilizó en estaciones de trabajo con terminales de impresión de papel que utilizaban el mecanismo de elemento de mecanografía y máquina de escribir Selectric, como la terminal IBM 1050 e IBM 2741. Se podí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 podía escribir y ver los caracteres APL adecuados tal como se usaban en la notación de Iverson y no verse obligado a usar representaciones extrañas de palabras clave en inglés. Falkoff e Iverson diseñaron los elementos de mecanografía especiales APL Selectric, 987 y 988, a fines de 1964, aunque no había ningún sistema informático APL disponible para usarlos. [16] Iverson citó a Falkoff como la inspiración para la idea de utilizar un elemento de tipado IBM Selectric para el conjunto de caracteres APL. [17]

Muchos símbolos APL, incluso con los caracteres APL en el elemento de mecanografía Selectric, todavía tenían que escribirse sobreponiendo dos caracteres de elementos existentes. Un ejemplo es el carácter de subida de nivel , que tenía que estar formado por un delta (mayúscula-H) y un trazo Sheffer (mayúscula-M). Esto era necesario porque el conjunto de caracteres APL era mucho más grande que los 88 caracteres permitidos en el elemento de mecanografía, incluso cuando las letras estaban restringidas a mayúsculas.

Disponibilidad comercial

El primer inicio de sesión interactivo de APL y la creación de un espacio de trabajo de APL fueron realizados en 1966 por Larry Breed utilizando una terminal IBM 1050 en IBM Mohansic Labs cerca del Centro de Investigación Thomas J. Watson , la sede de APL, en Yorktown Heights , Nueva York. [16]

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

APL se afianzó en los sistemas de tiempo compartido de mainframe desde finales de los años 1960 hasta principios de los años 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 APL Assist Microcode 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, cuando el hardware de rendimiento adecuado finalmente comenzó a estar disponible a mediados y fines de los años 1980, muchos usuarios migraron sus aplicaciones al entorno de la computadora personal.

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

En 1973, IBM lanzó APL.SV , que era una continuación del mismo producto, pero que ofrecía variables compartidas como un medio para acceder a funciones 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 pequeño CRT 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 de programa VSAPL disfrutó de un amplio uso entre los usuarios de Conversational Monitor System (CMS), Time Sharing Option (TSO), VSPC , MUSIC/SP y CICS .

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

En los años 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 América del Norte, 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 entró en el mercado en 1978 con un intérprete APL basado en una versión modificada de Digital Equipment Corp y Carnegie Mellon, que funcionaba 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 más tarde de la computadora personal, a mediados de los años 1980, la industria del tiempo compartido prácticamente había desaparecido.

Sharp APL estuvo 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 colocar uno o más objetos en una sola variable), un sistema de archivos, matrices anidadas y variables compartidas .

Los intérpretes APL también estaban disponibles en 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 el 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 de APL. [28]

Microcomputadoras

En los microordenadores, que se empezaron a comercializar a partir de mediados de los años 1970, BASIC se convirtió en el lenguaje de programación dominante. [29] Sin embargo, algunos microordenadores proporcionaban APL en su lugar: el primero fue el MCM/70 basado 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 el VideoBrain Family Computer , lanzado 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 tenía "muy pocos incentivos para ponerlo a disposición de los aficionados" debido a la piratería de software . [35] Nunca fue lanzado.

APL2

A principios de los años 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 facilitaban la integración de matrices anidadas en el flujo de trabajo del programa. Ken Iverson, que ya no controlaba el 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, la mayoría de los proveedores de APL o sus usuarios citan la compatibilidad con APL2 como un argumento 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 por parte de APLX, Dyalog, etc., incluyen extensiones para programación orientada a objetos , soporte para .NET , primitivas de conversión de matrices XML, gráficos, interfaces de sistemas operativos 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 lenguaje.

Lenguajes derivados

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

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 los años 1960 y 1970, pocos dispositivos terminales o incluso pantallas podían reproducir el conjunto de caracteres APL. Los más populares empleaban el mecanismo de impresión IBM Selectric utilizado con un elemento de tipo APL especial. Uno de los primeros terminales de línea APL (operación solo en modo de línea, no en pantalla completa) fue el Texas Instruments TI Modelo 745 ( c.  1977 ) con el conjunto de caracteres APL completo [48] que presentaba modos de telecomunicaciones half y full duplex , para interactuar con un servicio de tiempo compartido APL o un mainframe remoto 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 soporte Unicode , el problema de las fuentes de caracteres APL se ha eliminado en gran medida. Sin embargo, la introducción de 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 descubrió que escribir y usar caracteres APL no obstaculizaba a los estudiantes de ninguna manera mensurable. [54]

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

Diseño

A diferencia de los lenguajes de programación estructurados tradicionalmente, el código APL se estructura típicamente como cadenas de funciones monádicas o diádicas y operadores [56] que actúan sobre matrices . [57] APL tiene muchos primitivos no estándar (funciones y operadores) que se indican mediante un solo símbolo o una combinación de unos pocos símbolos. Todos los primitivos están definidos para tener la misma precedencia y siempre asociarse a la derecha. Por lo tanto, APL se lee o se entiende mejor de derecha a izquierda .

Las primeras implementaciones de APL ( alrededor de  1970 ) no tenían estructuras de control de flujo de bucles de programación , como bucles doo y construcciones. En su lugar, usaban operaciones con matrices y, a menudo, no era necesario el uso de construcciones de programación estructurada , ya que se podía realizar una operación en una matriz completa en una sola instrucción. Por ejemplo, la función ( ) puede reemplazar la iteración de bucle for : ιN cuando se aplica a un entero positivo escalar 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 pueden separar de manera clara y nítida.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 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 estados 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 funciones vectoriales de una sola instrucción y múltiples datos ( 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 requerida ]

Debido al inusual conjunto de caracteres , muchos programadores usan teclados especiales con teclas APL para escribir código APL. [60] Aunque hay varias formas de escribir código APL usando solo caracteres ASCII, [61] en la práctica casi nunca se hace. (Se puede pensar que esto apoya la tesis de Iverson sobre la notación como herramienta de pensamiento . [62] ) La mayoría, si no todas, las implementaciones modernas usan 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 continúan mostrando el conjunto de caracteres APL en una fuente personalizada.

Los defensores de APL [¿ quiénes? ] afirman que los ejemplos de código llamado de solo escritura (código mal escrito y casi incomprensible) son casi invariablemente ejemplos de malas prácticas de programación o errores de principiantes, 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 se puede implementar software funcional en mucho menos tiempo y con muchos menos programadores que utilizando otras tecnologías. [ cita requerida ]

También pueden afirmar que, debido a que es compacto y conciso, el APL se presta bien al desarrollo de software a gran escala y a la complejidad, porque se puede reducir en gran medida la cantidad de líneas de código. Muchos defensores y profesionales del APL también consideran que los lenguajes de programación estándar, como COBOL y Java, son comparativamente tediosos. El 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 clara distinción entre funciones y operadores . [56] [67] Las funciones toman matrices (variables o 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 suma se deriva aplicando el operador de reducción a la función suma . Aplicando el mismo operador de reducción a la función máxima (que devuelve el mayor de dos números) se deriva 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 incorporadas al 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. La codificación de 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 ni funciones ni operadores, sobre todo las de asignación.

Algunas palabras utilizadas en la literatura APL tienen significados diferentes a los de las matemáticas y 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 las 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 otros lenguajes de programación.

La constante de cadena 'Hola, mundo' anterior se muestra porque la visualización es la acción predeterminada en cualquier expresión para la que 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, que indica elevar 2 a la potencia 3 (esto se escribiría como 2^3o 2**3en algunos lenguajes, o se relegaría a una llamada de función como pow(2, 3);en otros). Muchos lenguajes usan *para significar multiplicación, como en 2*3, pero APL elige usar 2×3. Sin embargo, si no se especifica ninguna base (como 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 matriz de números. Entonces (+/X)÷⍴Xda su promedio. Leyendo de derecha a izquierda , ⍴Xda el número de elementos en X, y como ÷es un operador diádico, también se requiere el término a su izquierda. Está rodeado por 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, la siguiente 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 6números de lotería

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

x [ x 6 ? 40 ]

Lo anterior hace mucho, de forma concisa, aunque puede parecer complejo para un principiante en APL. 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 indicarle 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 entero aleatorio entre 1 y su único operando [a la derecha de este], ambos inclusive. Por lo tanto, un programa de juego de rol podría usar 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 Big O ).

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

Ejecutado de derecha a izquierda, esto significa:

(Nota: esto supone que el origen de APL es 1, es decir, los índices comienzan con 1. APL se puede configurar para utilizar 0 como origen, de modo que ι6sea 0 1 2 3 4 5, lo 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 la vida

La siguiente función "life", 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 para entenderlo se requieren algunos conocimientos avanzados 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 un código HTML a una variable txty luego utiliza una expresión APL para eliminar todas las etiquetas HTML:

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

Nombramiento

APL deriva su nombre de las iniciales del libro de Iverson A Programming Language [3] , aunque el libro describe la notación matemática de Iverson, en lugar del lenguaje de programación implementado que se describe en este artículo. El nombre se utiliza solo 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 oír 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 al confesarle que nunca había oído que se llamara así. ¿De dónde había sacado la idea de que era tan conocido? ¿Y quién había decidido llamarlo así? De hecho, ¿por qué tenía que llamarse de alguna manera? Mucho tiempo después escuché cómo se llamaba. Cuando comenzó el esfuerzo 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 a "eso". Probablemente hubo muchas sugerencias en ese momento, pero solo he oído hablar de dos. Un grupo de SRA en Chicago que estaba desarrollando materiales didácticos utilizando la notación estaba a favor del nombre "Mathlab". Esto no tuvo éxito. Otra sugerencia fue llamarlo "La mejor matemática de Iverson" y dejar que la gente inventara el acrónimo apropiado, lo que se consideró una broma.

Un día, Adin Falkoff entró en la oficina de Ken y escribió en la pizarra "Un lenguaje de programación" y debajo el acrónimo "APL". Así nació. Fue sólo una semana después de esto cuando Eric Iverson me hizo su pregunta, en un momento en que el nombre aún no había encontrado su camino a lo largo de 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] lo que convierte a APL en un acrónimo inverso .

Bolso para portátil para la conferencia 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 repartían productos de APL, con motivos de APL o una colección de logotipos de proveedores. Los más comunes eran las manzanas (como un juego de palabras sobre 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ó un 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 un logotipo de este tipo para APL y, después de una elección de la comunidad 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 o no requieren las habilidades de un programador de computadoras . [ cita requerida ]

APL es muy adecuado para la manipulación de imágenes y la animación por ordenador , donde las transformaciones gráficas se pueden codificar como multiplicaciones de matrices. Una de las primeras empresas de gráficos por ordenador comerciales, Digital Effects , produjo un producto gráfico APL llamado Visions , que se utilizó para crear anuncios de televisión y animación para la película Tron de 1982. [89] Más tarde, el simulador de navegación Stormwind utiliza APL para implementar su lógica central, su interfaz con el middleware de la canalización de renderizado y una parte importante de su motor de física . [90]

En la actualidad, 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 requerida ] atención sanitaria , [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 solo se usaba en 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). Se les otorgó "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 ofreció 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ían todos los símbolos especiales utilizados en el lenguaje. [99]

Entre los desarrollos más importantes de APL\360 se encuentran CMS/APL, que hizo uso de las capacidades de almacenamiento virtual de CMS y APLSV, que introdujo variables compartidas , variables del sistema y funciones del sistema. Posteriormente se trasladó 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 orientadas a empresas, como formato de datos y funciones para almacenar matrices APL en archivos externos. Fueron desarrolladas en conjunto por dos empresas, que emplearon 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 luego continuaron trabajando juntos, pero desarrollaron APL por separado como APL*Plus y Sharp APL. STSC portó APL*Plus a muchas plataformas con versiones realizadas para VAX 11, [103] PC y UNIX, mientras que IPSA adoptó un enfoque diferente ante la llegada de la computadora personal e hizo que Sharp APL estuviera disponible en esta plataforma utilizando hardware PC-XT/360 adicional. 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 importante 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 el soporte de 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, que desarrolla y vende el producto como Log-On APL2 . [105]

APLGOL

En 1972, se lanzó APLGOL como una versión experimental de APL que agregó construcciones de lenguaje de programación estructurada al marco del lenguaje. Se agregaron nuevas declaraciones para el control entre declaraciones, 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]

APL de Dialog

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 plataformas AIX , Linux (incluido Raspberry Pi ), macOS y Microsoft Windows . Se basa en APL2, con extensiones para admitir 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 en el intérprete. [104] Gitte Christensen y Morten Kromberg fueron ganadores conjuntos del premio Iverson en 2016. [114]

NARS2000

NARS2000 es un intérprete APL de código abierto escrito por Bob Smith, un destacado desarrollador e implementador de APL de STSC en los años 1970 y 1980. NARS2000 contiene características avanzadas y nuevos tipos de datos y se ejecuta de forma nativa en Microsoft Windows y otras plataformas bajo Wine . Recibe su 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 compañía británica MicroAPL en 2002. Aunque ya no está en desarrollo ni a la venta comercial, ahora está disponible de forma gratuita en Dyalog. [116]

APL de York

York APL [117] se desarrolló en la Universidad de York , Ontario, alrededor de 1968, y se ejecutaba en mainframes IBM 360. Una diferencia notable entre este y APL\360 era que definía la "forma" (ρ) de un escalar como 1, mientras que APL\360 la definía como el 0, matemáticamente más 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 libre de Extended APL 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 utilizando Cygwin para brindar soporte completo a todas sus funciones de sistema o como un binario nativo de Windows de 64 bits con algunas de sus funciones de sistema faltantes). GNU APL utiliza Unicode internamente y se puede escribir en scripts. Fue escrito por Jürgen Sauermann. [118]

Richard Stallman , fundador del Proyecto GNU , fue uno de los primeros en adoptar APL, utilizándolo 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 , con características de lenguaje tales como tipado de variables débil no muy adecuado para la compilación . [120] Sin embargo, con matrices como su estructura de datos central [121] proporciona oportunidades para ganancias de rendimiento a través del paralelismo , [122] computación paralela , [123] [124] aplicaciones masivamente paralelas , [125] [126] e integración a muy gran 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, rara vez se interpreta de forma pura el APL 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 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 operación única (donde BVes un vector booleano y Aes una matriz), se evita la creación de dos matrices intermedias. [134]

Código de bytes optimizado

El tipado 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, comprobació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]

Compilación

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 lenguaje. [137] [139] APEX es un compilador de APL de investigación que fue escrito por Robert Bernecky y está disponible bajo la Licencia Pública General de GNU . [140]

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

Normas

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), Comité Técnico Conjunto ISO/IEC 1 Subcomité 22 Grupo de Trabajo 3. El lenguaje APL principal está especificado en ISO 8485:1989, y el lenguaje APL extendido está especificado en ISO/IEC 13751:2001.

Referencias

  1. ^ ab "Citas y anécdotas de APL". jsoftware.com . Consultado el 14 de abril de 2018 .
  2. ^ "std::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 a la APL". IBM Systems Journal . 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". Awards.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 "Entrevista con Arthur Whitney". Kx Systems. 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". Awards.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 experimental de matrices personalizadas". 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", ACM SIGPLAN Avisos 13, 1978-08.
  14. ^ Abrams, Philip S., Un intérprete para la "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". IEEE Annals of the History of Computing . doi :10.1109/MAHC.2005.4.
  16. ^ ab Breed, Larry, "La primera sesión de terminal APL", APL Quote Quad , Association for Computing Machinery, Volumen 22, Número 1, septiembre de 1991, pág. 2–4.
  17. ^ 19, 2009 Adin Falkoff – Museo de Historia de la Computación. "Iverson le atribuyó el mérito de haber elegido el nombre APL y de haber introducido la máquina de escribir IBM con forma de pelota de golf y cabezal de repuesto, que proporcionaba el famoso conjunto de caracteres para representar programas".
  18. ^ Breed, Larry (agosto de 2006). "Cómo llegamos a APL\1130". Vector (British APL Association) . 22 (3). ISSN  0955-1433. Archivado desde el original el 2008-05-12 . Consultado el 2007-04-02 .
  19. ^ Manual del APL\1130 Archivado el 21 de febrero de 2011 en Wayback Machine , mayo de 1969
  20. ^ "Recordando a APL". Quadibloc.com . Consultado el 17 de junio de 2013 .
  21. ^ Falkoff, Adin; Iverson, Kenneth E., "Guía del usuario de APL\360" Archivado el 29 de febrero de 2012 en Wayback Machine , IBM Research, Thomas J. Watson Research Center, Yorktown Heights, NY, agosto de 1968.
  22. ^ "Sistema de terminal APL\360" Archivado el 11 de julio de 2010 en Wayback Machine , IBM Research, Thomas J. Watson Research Center, marzo de 1967.
  23. ^ ab Pakin, Sandra (1968). Manual de referencia APL\360 . Science Research Associates, 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 definidas por el entorno se basaban en el uso de otra clase de funciones, llamadas "I-beams" debido a la forma del símbolo utilizado para ellas, que proporcionan 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 de sistemas para permitirles ejecutar instrucciones System/360 desde dentro de los programas APL y, por lo tanto, utilizar APL como una ayuda directa en su actividad de programación. La obvia conveniencia de las funciones de este tipo, que parecían ser parte del lenguaje, condujo a la introducción de la función I-beam monádica para uso directo por parte de cualquier persona. Varios argumentos para 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 la CSC, 1962-1973". Comienzos de la informática y las ciencias de la computación en la Universidad de Maryland (PDF) (Informe). Universidad de Maryland. pág. 38. Archivado desde el original (PDF) el 10 de junio de 2011 . Consultado el 23 de mayo de 2011 .
  26. ^ Stebbens, Alan. "Cómo empezó todo". 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) del original el 2022-10-09.
  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". Time . 29 de abril de 2014 . Consultado el 29 de abril de 2018 .
  30. ^ "MCM Computers M70/M700". old-computers.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 de MCM/70. McGill Queens's University Press. ISBN 978-0-7735-3852-8.
  32. ^ Miller, Michael (17 de diciembre de 2014). "PCs That Paved the Way for the Altair" (PC Magazine) . Ziff Davis . Consultado el 29 de abril de 2018 .
  33. ^ "VideoBrain Family Computer", Popular Science , noviembre de 1978, anuncio.
  34. ^ "Una mirada a SuperPet". Compute! . Small System Services Inc. Diciembre de 1981 . Consultado el 29 de abril de 2018 .
  35. ^ Gates, Bill (31 de enero de 1976). "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 Turing de la ACM . ACM . Consultado el 10 de enero de 2015 .
  38. ^ "APL2: Los primeros años: ¿Se puede y se debe llegar a acuerdos 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. Archivado desde el original el 2021-11-17 . Consultado el 2021-11-17 .
  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 Quote Quad . 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. Archivado desde el original el 22 de noviembre de 2013 . Consultado el 10 de enero de 2015 .
  46. ^ Pike, Rob (25 de marzo de 2018). "Ivy". GoDoc . Archivado desde el original el 13 de agosto de 2019.
  47. ^ "Preguntas frecuentes sobre el lenguaje Wolfram". Wolfram . Consultado el 20 de febrero de 2020 . LISP y APL fueron dos influencias tempranas
  48. ^ Texas Instruments (1977). «Anuncio de página completa de la TI 745: presentación de un nuevo conjunto de caracteres». Computerworld . 11 (27): 32 . Consultado el 20 de enero de 2015 .
  49. ^ Dyalog. "Fuentes y teclados APL". www.dyalog.com . Dyalog . 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. ^ Brown, James A.; Hawks, Brent; Trimble, Ray (1993). "Extensión del conjunto de caracteres APL". ACM SIGAPL APL Quote Quad . 24 (1): 41–46. doi :10.1145/166198.166203.
  53. ^ Kromberg, Morten. "Compatibilidad con Unicode para APL". archive.vector.org.uk . Vector, Journal of the British APL Association. Archivado desde el original el 20 de enero de 2015 . Consultado el 8 de enero de 2015 .
  54. ^ Hsu, Aaron. "Divulgación y educación en ciencias de la computación con APL". Dyalog, Ltd. Archivado desde el original el 17 de agosto de 2016 . 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. ^ "Introducción de 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 del pensamiento". Communications of the ACM . 23 (8): 444–465. doi :10.1145/358896.358899. 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. ^ Vaxman. "APL Great Programming" (PDF) . www.vaxman.de . Archivado (PDF) del original el 2022-10-09 . 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 Quote Quad . 17 (4): 450–456. doi :10.1145/384282.28372.
  66. ^ Borealis. "¿Por qué APL?". www.aplborealis.com . Consultado el 1 de enero de 2015 .
  67. ^ Iverson, Kenneth E. (1987). "A Dictionary of APL" (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 . IP Sharp Associates . Consultado el 11 de enero de 2015 .
  72. ^ MicroAPL. "Primitivas 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 aleatorios sistemáticos". 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 (video). 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 la APL. Conferencia de la APL. Consultado el 13 de octubre de 2021.
  80. ^ Jacob Williams. Degenerate Conic: New Blood. 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) del original el 9 de octubre de 2022 . Consultado el 3 de abril de 2018 . Sofia es una plataforma de gestión de inversiones de principio a fin 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, Vincent; Zarri, Gian Piero (1 de septiembre de 1982). "Uso de APL en un entorno de inteligencia artificial". ACM SIGAPL APL Quote Quad . 13 (1): 183–191. doi :10.1145/390006.802242 . Consultado el 3 de abril de 2018 .
  84. ^ Fordyce, K.; Sullivan, G. (1985). "Ayudas para el desarrollo de la inteligencia artificial". APL Quote Quad . 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 Quote Quad . 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?". The Computer Journal . 21 (2): 128–131. doi : 10.1093/comjnl/21.2.128 .
  88. ^ Hsu, Aaron (18 de noviembre de 2017). "Patrones de diseño frente a antipatrones en APL". functionalconf.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 . pág. 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 Digital Effects, 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). "Stormwind Simulator at Dyalog '16". www.optima-systems.co.uk . Optima Systems . 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). Tieto . 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. Gracias a la elección de APL como plataforma técnica, es relativamente fácil construir rápidamente una solución que se puede denominar prototipo ejecutable (traducido del original)[ enlace muerto permanente ]
  93. ^ Brenner, Charles. "Tecnología de identificación de ADN y APL". dna-view.com . Presentación en la Conferencia de usuarios de APL de 2005. Consultado el 9 de enero de 2015 .
  94. ^ Brenner, Charles (17 de octubre de 2014). "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 Informática. Archivado desde el original el 2 de abril de 2012.
  96. ^ "Premios – 1973 – Richard Lathwell". Asociación para Maquinaria Informática. Archivado desde el original el 2 de abril de 2012.
  97. ^ "Premios – 1973 – Roger Moore". Asociación para Maquinaria Informática. Archivado desde el original el 2 de abril de 2012.
  98. ^ "IBM 5100". old-computers.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 de lenguajes informáticos". www.sigapl.org . ACM . Consultado el 29 de abril de 2018 .
  101. ^ Larry Breed (agosto de 2006). «Cómo llegamos a APL\1130». Vector (British APL Association) . 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). "VAX-11s Acquire APL Processor". Computerworld . 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". Log-On Software . 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: recursos de programación estructurada para APL". Revista Hewlett-Packard.
  108. ^ "Sitio web de Dyalog Ltd" . Consultado el 6 de junio de 2018 .
  109. ^ "Dyalog a los 25" (PDF) . Revista Vector . 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). "Arrays of objects" (PDF) . Actas del simposio de 2007 sobre lenguajes dinámicos . p. 20. doi :10.1145/1297081.1297087. ISBN. 9781595938688. S2CID  18484472. Archivado (PDF) del original el 9 de octubre de 2022. Consultado el 27 de agosto de 2018 .
  111. ^ Scholes, John. "D: Un subconjunto funcional de Dyalog APL". Asociación Británica de APL.
  112. ^ Scholes, John. "Traducción de funciones D a la forma tácita". Dyalog 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 . Sudley Place Software . 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 York".
  118. ^ "GNU APL". directory.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, Timothy (1988). Un compilador de 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 ACM SIGPLAN Avisos . 26 (7): 61–72. doi :10.1145/109625.109633. S2CID  8584353.
  123. ^ Hsu, Aaron W.; Bowman, William J. "Revisiting APL in the Modern Era" (PDF) . www.cs.princeton.edu . Archivado (PDF) desde el original el 2022-10-09 . Consultado el 20 de enero de 2015 .
  124. ^ Ching, W.-M.; Ju, D. (1991). "Ejecución de programas APL automáticamente paralelizados en RP3". IBM Journal of Research & Development . 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). "Compiling Collection-Oriented Languages ​​onto Massively Parallel Computers" (Compilación de lenguajes orientados a colecciones en computadoras masivamente paralelas). Journal of Parallel and Distributed Computing (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; Hoffmann, Rolf; Ediger, Patrick; 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 paralela. 'Se ha elegido APL debido a la capacidad de expresar estructuras matriciales y vectoriales'.
  127. ^ Brenner, Norman (1984). "Diseño de circuitos VLSI utilizando APL con subrutinas de Fortran". Actas de la conferencia internacional sobre APL - APL '84 . Vol. 14. págs. 77–79. doi :10.1145/800058.801079. ISBN 0-89791-137-7. S2CID  30863491. APL para interactividad y facilidad de codificación.
     • Brenner, Norman (1984). "Diseño de circuitos VLSI utilizando APL con subrutinas de Fortran". Actas de la conferencia internacional sobre APL – APL '84 . ACM SIGAPL. ISBN 978-0897911375.
  128. ^ Gamble, DJ; Hobson, RF (1989). "Hacia un entorno gráfico/procedimental para la construcción de generadores de módulos VLSI". Actas de la conferencia IEEE Pacific Rim Conference on Communications, Computers and Signal Processing . 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, se pueden interconectar con una pantalla gráfica avanzada.
  129. ^ Lee, Robert S. (1983). "Two Implementations of APL". PC Magazine . 2 (5): 379 . Consultado el 20 de enero de 2015 .
  130. ^ "El lenguaje informático APL". MARTHA 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. The MIT press. ISBN 9780262133685. Recuperado el 6 de mayo de 2018 .
  132. ^ Snyder, Lawrence (1982). "Reconocimiento y selección de modismos para la optimización de código". Acta Informatica . 17 (3). doi :10.1007/BF00264357. S2CID  8369972.
  133. ^ Cheng, Feng Sheng (1981). Coincidencia de expresiones idiomáticas: una técnica de optimización para un compilador APL (Tesis). Universidad Estatal de Iowa . Consultado el 6 de mayo de 2018 .
  134. ^ "Reconocimiento de expresiones idiomáticas". dyalog.com . Consultado el 6 de mayo de 2018 .
  135. ^ Strawn, George O. (marzo de 1977). "¿Realmente necesita APL 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) del original el 2022-10-09 . Consultado el 7 de mayo de 2018 .
  137. ^ ab Driscoll, Graham C. Jr.; Orth, Donald L. (noviembre de 1986). "Compiling APL: The Yorktown APL Translator". 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". IBM Journal of Research and Development . 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.

Lectura adicional

Video

External links

Online resources