• Autor de la entrada:
  • Tiempo de lectura:22 minutos de lectura

El lenguaje de programación (APL) fue descrito por primera vez en un libro de 1962 del mismo nombre por Kenneth E. Iverson. APL es un lenguaje interactivo e interpretado de tercera generación (3GL) orientado a la expresión rigurosa de notaciones matemáticas por una computadora de manera interpretativa.

APL tiene una representación concisa de matrices y operadores, que se manipulan mientras permite la implementación de la resolución de problemas abstractos. Lo hace desde diversos dominios y expresa algoritmos independientes de las especificaciones de la plataforma informática.

En la actualidad, APL se proporciona en entornos de desarrollo integrados (IDE) por parte de varios proveedores comerciales y no comerciales.

Antes de llegar a ser conocido como APL, el idioma se conocía simplemente como el idioma de Iverson.

APL se usa comúnmente en un conjunto diverso de dominios de problemas, como matemáticas, investigación científica, visualización, ingeniería, robótica y ciencia actuarial. El idioma está escrito con el juego de caracteres APL único y no estándar.

Iverson afirmó que el uso de este conjunto produce una capacidad de notación que supera a un conjunto de caracteres normal.

En consecuencia, el poder de APL se basa en la denotación de operadores de matriz comunes, funciones y sus combinaciones mediante un único símbolo dedicado (primitivo).

El resultado es un lenguaje que no es fácil de leer. Sin embargo, APL tiene una base de usuarios pequeña pero apasionada en aplicaciones financieras, de seguros y matemáticas.

Es más probable que los programas APL se interpreten en el espacio de trabajo de APL en lugar de compilarse. A diferencia de otros lenguajes que se evalúan de arriba a abajo, las expresiones APL se evalúan de derecha a izquierda. Originalmente, APL no contenía estructuras de control.

Sin embargo, las implementaciones modernas generalmente incluyen un conjunto completo de estructuras de control que permiten la separación de datos y el control del flujo de programas.

APL ha sido estandarizado por el Instituto Nacional Estadounidense de Estándares (ANSI) y la Organización Internacional de Estandarización (ISO).

Los programas APL se escriben mejor usando un teclado especial con notación simbólica específica de APL o reasignando un teclado general y usando calcomanías de lenguaje APL para indicar funciones APL.

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.

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 efectiva 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 las máquinas de pila frente a las máquinas de registro para las próximas computadoras.

Iverson también usó 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.

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

Historia del lenguaje de programación APL

En 1962, el primer intento de utilizar la notación para describir un sistema informático completo ocurrió 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, que trabajaba en el Instituto de Investigación de Sistemas de IBM, implementó una parte de la notación en una computadora IBM 1620 y los estudiantes la utilizaron 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ó Traductor de matrices personalizadas (PAT).

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 la máquina de la serie IBM System/360. lo que resultó en un artículo publicado en IBM Systems Journal en 1964.

Después de que se publicó 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 nuevos deberes en Science Research Associates. una compañía educativa comprada por IBM en 1964.

Lawrence le pidió a Iverson y a su grupo que lo ayudaran a usar el lenguaje como una herramienta para Desarrollar y utilizar las computadoras en la educación.

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 anterior 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 ejecuta en el Sistema operativo IBSYS.

Este trabajo se terminó a fines de 1965 y luego se denominó IVSYS (por el 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 de la notación de Iverson” en 1966, el aspecto académico de esto fue supervisado formalmente por Niklaus Wirth.

Al igual que el sistema PAT de Hellerman anterior, 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, se había reprogramado para la computadora IBM System / 360 Model 50 que se ejecutaba en modo de tiempo compartido y se usaba internamente en IBM.

Hardware

Un desarrollo clave en la capacidad de usar APL de manera efectiva, antes del uso generalizado de terminales de tubo de rayos catódicos ( CRT ), fue el desarrollo de un elemento de escritura especial intercambiable de máquina de escribir IBM Selectric con todos los caracteres especiales de APL.

Esto se utilizó en estaciones de trabajo de terminales de impresión en papel que utilizan la máquina de escribir Selectric y el mecanismo de elementos de escritura, como IBM 1050 e IBM 2741.

Las teclas se pueden colocar sobre las teclas normales para mostrar qué caracteres APL se ingresarán y escribirán cuando se presione esa tecla. Por primera vez, un programador podía escribir y ver los caracteres APL correctos tal como se usan en la notación de Iverson y no verse obligado a usar representaciones extrañas de palabras clave en inglés.

Falkoff e Iverson tenían los elementos especiales de tipeo APL Selectric, 987 y 988, diseñados a fines de 1964, aunque no había ningún sistema informático APL disponible para usarlos.

Iverson citó a Falkoff como inspiración para la idea de utilizar un elemento de escritura IBM Selectric para el juego de caracteres APL.

Muchos símbolos APL, incluso con los caracteres APL en el elemento de escritura Selectric, aún tenían que escribirse superponiendo dos caracteres de elementos existentes.

Un ejemplo es el carácter de grado superior que tuvo que hacerse a partir de un delta (shift-H) y un trazo de Sheffer (shift-M). Esto era necesario porque el juego de caracteres APL era mucho más grande que los 88 caracteres permitidos en el elemento de escritura, 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 fue en 1966 por Larry Breed utilizando un terminal IBM 1050 en IBM Mohansic Labs cerca del Centro de Investigación Thomas J. Watson. el hogar de APL, en Yorktown Heights. Nueva York.

BM fue el principal responsable de introducir APL en el mercado. La primera versión disponible públicamente de APL se lanzó en 1968 para IBM 1130. IBM proporcionó APL\1130 de forma gratuita pero sin responsabilidad ni soporte.

Funcionaría en tan solo 8k palabras de 16 bits de memoria y usaría un disco duro dedicado de 1 megabyte.

APL se afianzó en los sistemas de tiempo compartido de mainframe desde finales de la década de 1960 hasta principios de la de 1980, en parte porque admitiría múltiples usuarios en sistemas de especificaciones más bajas que no tenían hardware de traducción de direcciones dinámicas.

Las mejoras adicionales en el rendimiento para los sistemas de mainframe IBM System/370 seleccionados incluyeron el microcódigo APL Assist 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 estuvo disponible 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 el 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. Introducido por primera vez para su uso en IBM en 1966, el sistema APL\360 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 realizó a través de funciones especiales privilegiadas “I-beam”, utilizando operaciones tanto monádicas como diádicas.

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 instalaciones fuera del sistema APL, como los 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 del programa VSAPL disfrutó de un amplio uso con 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 de la serie Sperry UNIVAC 1100/2200.

En ese momento, Sperry no tenía nada. En 1974, al estudiante Alan Stebbens se le asignó la tarea de implementar una función interna.

Xerox APL estuvo disponible desde junio de 1975 para los mainframes Xerox 560 y Sigma 6, 7 y 9 que ejecutan CP-V y para Honeywell CP-6.

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.

En América del Norte, los más conocidos 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 se ejecutaba 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 el advenimiento primero de mainframes menos costosos como el IBM 4300, y más tarde la computadora personal, a mediados de la década de 1980, la industria del tiempo compartido casi 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), sistema de archivos, matrices anidadas y variables compartidas.

Los intérpretes APL también estaban disponibles de otros fabricantes de mainframe 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.

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.

Sin embargo, algunas microcomputadoras proporcionaron APL en su lugar; la primera fue la MCM/70 basada en Intel 8008 que se lanzó en 1974 y que se utilizó principalmente en la educación.

Otra máquina de esta época fue VideoBrain Family Computer, lanzada en 1977, que se suministró con su dialecto de APL llamado APL/S. El Commodore SuperPET. presentado en 1981, incluía un intérprete APL desarrollado por la Universidad de Waterloo.

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. Nunca fue lanzado.

APL2

A principios de la década de 1980, el desarrollo de APL de IBM, bajo la dirección de Jim Brown, implementó una nueva versión del lenguaje APL que contenía como principal mejora el concepto de arreglos anidados, donde un arreglo puede contener otros arreglos, y nuevas funciones de lenguaje que facilitó la integración de arreglos anidados 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 estar más de acuerdo con su visión.

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.

Como otros proveedores estaban ocupados desarrollando intérpretes APL para hardware nuevo, 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, cálculos científicos y de ingeniería, sistemas expertos, [44] para la enseñanza de matemáticas y otras materias, visualización y acceso a bases de datos.

Implementaciones modernas

Varias implementaciones de APL por APLX, Dyalog, et al., incluyen extensiones para programación orientada a objetos. compatibilidad con.NET Framework. primitivas de conversión de matriz XML, gráficos, interfaces de sistema operativo y expresiones de cálculo lambda.

Idiomas derivados

APL ha formado la base o ha influido en los siguientes idiomas:

  • A y A+. un APL alternativo, este último con extensiones gráficas.
  • FP. un lenguaje de programación funcional.
  • Ivy, un intérprete de un lenguaje similar a APL desarrollado por Rob Pike. y que usa ASCII como entrada. [46]
  • J. que también fue diseñado por Iverson, y que usa ASCII con dígrafos en lugar de símbolos especiales. [7]
  • K. una variante patentada de APL desarrollada por Arthur Whitney. [8]
  • LYaPAS. una extensión soviética de APL. [ cita requerida ]
  • MATLAB. una herramienta de cálculo numérico. [6]
  • Nial. un lenguaje de programación de matriz de alto nivel con una notación de programación funcional.
  • Lenguaje de programación polimórfico. un lenguaje interactivo y extensible con un lenguaje base similar.
  • S. un lenguaje de programación estadístico (usualmente visto ahora en la versión de código abierto conocida como R ).
  • Speakeasy. un entorno interactivo de computación numérica.
  • Wolfram Language. el lenguaje de programación de Mathematica.

Características del lenguaje

APL ha sido criticado y elogiado por su elección de un conjunto de caracteres único y no estándar. Algunos de los que lo aprenden se convierten en fervientes adherentes. 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 Model 745 ( c.  1977 ) con el juego de caracteres APL completo que presentaba modos de telecomunicaciones de dúplex medio y dúplex completo. para interactuar con un tiempo compartido APLservicio o 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 compatibilidad con Unicode. el problema de la fuente 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 o tarjetas de teclado impresas de fácil referencia que pueden frustrar a los principiantes acostumbrados a otros lenguajes de programación.

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 medible.

En defensa de APL, requiere escribir menos caracteres y las asignaciones de teclado se memorizan con el tiempo. Hoy en día también se fabrican y utilizan teclados APL especiales, al igual que fuentes que se pueden descargar gratuitamente para sistemas operativos como Microsoft Windows.

Las ganancias de productividad informadas asumen que uno pasa suficiente tiempo trabajando en el idioma para que valga la pena memorizar los símbolos, su semántica y las asignaciones de teclado, sin mencionar una cantidad sustancial de expresiones idiomáticas para tareas comunes.

Diseño

A diferencia de los lenguajes de programación estructurados tradicionalmente, el código APL se estructura normalmente como cadenas de funciones monádicas o diádicas y operadores que actúan sobre matrices. [57] APL tiene muchas primitivas no estándar (funciones y operadores) que se indican con 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 entiende mejor de derecha a izquierda.

Las primeras implementaciones de APL ( c.  1970 más o menos) no tenían estructuras de control de flujo de bucle de programación. como bucles doo y construcciones. En cambio, usaron operaciones de matriz, y el uso de construcciones de programación estructurada a menudo no era necesario, ya que una operación se podía realizar en una matriz completa en una declaració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 puedan separar clara y limpiamente. whileif-then-else iota.

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 existen también fuera de los programas, y el usuario también puede manipular los datos sin tener que definir un programa.

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 que no son 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, 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 la computación del Juego de la vida de Conway en una línea de código.

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.

Debido al juego de caracteres inusual. muchos programadores usan teclados especiales con teclas APL para escribir código APL. Aunque hay varias formas de escribir código APL usando solo caracteres ASCII, en la práctica casi nunca se hace. (Se puede pensar que esto respalda la tesis de Iverson sobre la notación como una herramienta de pensamiento.

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 no 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 juego de caracteres APL en una fuente personalizada.

Defensores de APL afirman que los ejemplos del llamado código de solo escritura (código mal escrito y casi incomprensible) son casi invariablemente ejemplos de mala práctica de programación o errores de principiante, que pueden ocurrir en cualquier idioma. Los defensores también afirman que son mucho más productivos con APL que con los lenguajes informáticos más convencionales, y que el software funcional se puede implementar en mucho menos tiempo y con muchos menos programadores que con otras tecnologías.

También pueden afirmar que debido a que es compacto y conciso, APL se presta bien para el desarrollo y la complejidad de software a mayor escala, porque la cantidad de líneas de código se puede reducir en gran medida.

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 con los sistemas comerciales.

Terminología

APL hace una clara distinción entre funciones y operadores. 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. 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érminosverbo para función y adverbio o conjunción para 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 elementos primitivos.

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, se considera que algunas primitivas no son ni funciones ni operadores, sobre todo asignación.

Algunas palabras utilizadas en la literatura APL tienen significados que difieren de los de las matemáticas y la generalidad de las ciencias de la computación.

Sintaxis

APL tiene representaciones explícitas de funciones, operadores y sintaxis, lo que proporciona una base para la declaración clara y explícita de las funciones extendidas en el lenguaje y las herramientas para experimentar con ellas.

Comparte tu opinión