Articulo de referencia

Lenguaje de procesamiento de la información

El lenguaje de procesamiento de información ( IPL ) es un lenguaje de programación creado por Allen Newell , Cliff Shaw y Herbert A. Simon en la RAND Corporation y el Carnegie I...

El lenguaje de procesamiento de información ( IPL ) es un lenguaje de programación creado por Allen Newell , Cliff Shaw y Herbert A. Simon en la RAND Corporation y el Carnegie Institute of Technology alrededor de 1956. Newell se desempeñaba como especificador del lenguaje y programador de aplicaciones, Shaw era el programador del sistema y Simon se desempeñaba como programador de aplicaciones y usuario.

IPL incluía características para facilitar la programación de IA, específicamente la resolución de problemas , como listas, asignación dinámica de memoria , tipos de datos , recursión , funciones como argumentos, generadores y multitarea cooperativa . IPL también introdujo los conceptos de procesamiento de símbolos y procesamiento de listas. Desafortunadamente, todas estas innovaciones estaban escritas en un lenguaje ensamblador complejo . No obstante, IPL-V (la única versión pública de IPL) se ejecutó en muchos ordenadores hasta mediados de la década de 1960.

Conceptos básicos de la IPL

Un ordenador IPL tiene:

  1. Un conjunto de símbolos . Todos los símbolos son direcciones y nombran celdas. A diferencia de los símbolos en lenguajes posteriores, los símbolos constan de un carácter seguido de un número y se escriben H1, A29, 9–7, 9–100.
    1. Los nombres de las celdas que comienzan con una letra son regionales y son direcciones absolutas.
    2. Los nombres de las celdas que comienzan con "9-" son locales y tienen sentido dentro del contexto de una sola lista. El 9-1 de una lista es independiente del 9-1 de otra lista.
    3. Otros símbolos (por ejemplo, números puros) son internos .
  2. Un conjunto de celdas . Las listas se forman a partir de varias celdas, incluyendo referencias mutuas. Las celdas tienen varios campos:
    1. P, un campo de 3 bits que se utiliza para un código de operación cuando la celda se usa como instrucción, y que no se utiliza cuando la celda es un dato.
    2. Q, un campo de 3 valores que se utiliza para referencia indirecta cuando la celda se usa como instrucción, y que no se utiliza cuando la celda contiene datos.
    3. SYMB, un símbolo utilizado como valor en la celda.
  3. Un conjunto de procesos primitivos , que en los lenguajes modernos se denominarían funciones primitivas .

La estructura de datos de IPL es la lista, pero las listas son estructuras más complejas que en muchos lenguajes. Una lista consta de una secuencia enlazada simple de símbolos, como cabría esperar, más algunas listas de descripción , que son listas enlazadas simples subsidiarias interpretadas como nombres y valores de atributos alternados. IPL proporciona primitivas para acceder y modificar el valor de un atributo por su nombre. A las listas de descripción se les asignan nombres locales (de la forma 9-1). Así, una lista llamada L1 que contiene los símbolos S4 y S5, y descrita asociando el valor V1 al atributo A1 y V2 a A2, se almacenaría de la siguiente manera. 0 indica el final de una lista; los nombres de celda 100, 101, etc., son símbolos internos generados automáticamente cuyos valores son irrelevantes. Estas celdas pueden estar dispersas por toda la memoria; solo L1, que utiliza un nombre regional que debe ser conocido globalmente, necesita residir en un lugar específico.

IPL es un lenguaje ensamblador para manipular listas. Cuenta con algunas celdas que se utilizan como registros especiales. H1, por ejemplo, es el contador de programa. El campo SYMB de H1 es el nombre de la instrucción actual. Sin embargo, H1 se interpreta como una lista; el LINK de H1 es, en términos modernos, un puntero al inicio de la pila de llamadas. Por ejemplo, las llamadas a subrutinas insertan el SYMB de H1 en esta pila.

H2 es la lista de memoria libre. Los procedimientos que necesitan asignar memoria toman celdas de H2; los procedimientos que terminan de usar memoria la colocan en H2. Al entrar en una función, la lista de parámetros se proporciona en H0; al salir, los resultados deben devolverse en H0. Muchos procedimientos devuelven un resultado booleano que indica éxito o fracaso, el cual se coloca en H5. Diez celdas, W0-W9, están reservadas para almacenamiento de trabajo público. Los procedimientos están obligados (según el artículo de CACM) a guardar y restaurar los valores de estas celdas.

Existen ocho instrucciones, basadas en los valores de P: llamada a subrutina, insertar/extraer S en H0; insertar/extraer el símbolo de S en la lista adjunta a S; copiar valor a S; bifurcación condicional. En estas instrucciones, S es el destino. S es el valor del campo SYMB si Q=0, el símbolo de la celda con nombre de SYMB si Q=1, o el símbolo de la celda con nombre de SYMB si Q=2. En todos los casos, excepto en la bifurcación condicional, el campo LINK de la celda indica qué instrucción ejecutar a continuación.

IPL cuenta con una biblioteca de aproximadamente 150 operaciones básicas. Estas incluyen operaciones como:

  • Símbolos de prueba para la igualdad
  • Buscar, establecer o borrar un atributo de una lista.
  • Localizar el siguiente símbolo en una lista; insertar un símbolo en una lista; borrar o copiar una lista completa.
  • Operaciones aritméticas (sobre nombres de símbolos)
  • Manipulación de símbolos; por ejemplo, comprobar si un símbolo denota un número entero o hacer que un símbolo sea local.
  • Operaciones de E/S
  • Los "generadores" se corresponden con los iteradores y filtros en la programación funcional. Por ejemplo, un generador puede aceptar una lista de números y generar la lista de sus cuadrados. Los generadores podrían aceptar funciones diseñadas específicamente —más concretamente, las direcciones de código de dichas funciones— como argumentos.

Historia

IPL se utilizó por primera vez para demostrar que los teoremas de Principia Mathematica , que Bertrand Russell y Alfred North Whitehead habían demostrado laboriosamente a mano, podían, de hecho, demostrarse mediante computación . Según la autobiografía de Simon, Models of My Life , esta aplicación se desarrolló inicialmente mediante simulación manual, utilizando a sus hijos como elementos de cálculo, mientras escribía y sostenía tarjetas de notas como registros que contenían las variables de estado del programa.

IPL se utilizó para implementar varios programas de inteligencia artificial de la primera época , también de los mismos autores: The Logic Theorist (1956), General Problem Solver (1957) y su programa de ajedrez por computadora NSS (1958).

Se crearon varias versiones de IPL: IPL-I (nunca implementada), IPL-II (1957 para JOHNNIAC ), IPL-III (existió brevemente), IPL-IV, IPL-V (1958, para IBM 650 , IBM 704 , IBM 7090 , Philco modelo 212 , muchos otros. Ampliamente utilizada). IPL-VI fue una propuesta para un hardware IPL. [ 1 ] [ 2 ] [ 3 ]

Se desarrolló un coprocesador “IPL-VC” para el CDC 3600 en las Bibliotecas Nacionales de Argonne que podía ejecutar comandos IPL-V. [ 4 ] [ 5 ] Se utilizó para implementar otro programa de damas. [ 6 ] Esta implementación de hardware no mejoró los tiempos de ejecución lo suficiente como para “competir favorablemente con un lenguaje más directamente orientado a la estructura de las máquinas actuales”. [ 7 ]

IPL pronto fue reemplazado por Lisp , que tenía características mucho más potentes, una sintaxis más simple y la ventaja de la recolección automática de basura .

Legado a la programación informática

Podría decirse que IPL introdujo varias características propias de los lenguajes de programación:

  • Manipulación de listas
  • Listas de propiedades —pero solo cuando están adjuntas a otras listas
  • Funciones de orden superior : si bien la programación en lenguaje ensamblador siempre había permitido realizar cálculos con las direcciones de las funciones, IPL fue un intento temprano de generalizar esta propiedad del lenguaje ensamblador de una manera sistemática.
  • Cálculo con símbolos —aunque los símbolos tienen una forma restringida en IPL (letra seguida de número)
  • Máquina virtual

Muchas de estas características se generalizaron, racionalizaron e incorporaron a Lisp [ 8 ] y, desde allí, a muchos otros lenguajes de programación durante las siguientes décadas.

Referencias

  1. Este artículo se basa en material tomado de Information+Processing+Language en el Free On-line Dictionary of Computing antes del 1 de noviembre de 2008 e incorporado bajo los términos de "relicencia" de la GFDL , versión 1.3 o posterior.
  2. Shaw et al. 1958 .
  3. Sammet 1969 , pág. 389.
  4. Hodges 1964 .
  5. Sammet 1969 , pág. 393–394.
  6. Cowell y Reed 1965 .
  7. Carson y Robinson 1966 , pág. 5.
  8. John McCarthy (1979) Historia de Lisp "Prehistoria de LISP - Verano de 1956 a verano de 1958."

Fuentes

  • Carson, Daniel F.; Robinson, George A. (mayo de 1966). Gyro II, un sistema macrodefinido para el procesamiento de listas (Informe). División de Matemáticas Aplicadas, Laboratorios Nacionales Argonne. ANL-7149.
  • Cowell, WR; Reed, MC (octubre de 1965). Un programa para jugar a las damas en la computadora IPL-VC (Informe). División de Matemáticas Aplicadas, Laboratorios Nacionales Argonne. ANL-7109.
  • Hodges, Donald (mayo de 1964). IPL-VC: Un sistema informático con el conjunto de instrucciones IPL-V (Informe). División de Matemáticas Aplicadas, Laboratorios Nacionales Argonne. ANL-6888.
  • Sammet, Jean E. (1969). Lenguajes de programación: historia y fundamentos . Englewood Cliffs, NJ: Prentice Hall. pp. 388–400 . 
  • Shaw, JC; Newell, A.; Simon, HA; Ellis, TO (1958). «Una estructura de comandos para el procesamiento de información compleja». Actas de la Conferencia Conjunta de Computación del Oeste, del 6 al 8 de mayo de 1958: Contrastes en Computadoras . IRE-ACM-AIEE '58 (Occidental). Asociación para la Maquinaria de Computación. págs. 119-128 . doi : 10.1145/1457769.1457803 . ISBN  9781450378642.{{cite conference}}: Incompatibilidad de ISBN/Fecha ( ayuda )

Lecturas adicionales

  • Newell, Allen; Shaw, JC (1957). «Programación de la máquina de teoría lógica». Ponencias presentadas en la Conferencia Conjunta de Computación del Oeste, celebrada del 26 al 28 de febrero de 1957: Técnicas para la fiabilidad . IRE-AIEE-ACM '57 (Occidental). Asociación para la Maquinaria de Computación. págs. 230-240 . doi : 10.1145/1455567.1455606 . ISBN  9781450378611.{{cite conference}}: Incompatibilidad de ISBN/Fecha ( ayuda )
  • Newell, Allen; Tonge, Fred M. (1960). "Una introducción al lenguaje de procesamiento de información V" . Communications of the ACM . 3 (4). Nueva York, NY, EE. UU.: Association for Computing Machinery: 205–211 . doi : 10.1145/367177.367205 . ISSN 0001-0782 . S2CID 16609075 .  
  • Newell, Allen; Tonge, Fred M.; et  al. (1964). Manual del lenguaje de procesamiento de información-V . Englewood Cliffs, NJ: Prentice Hall.
  • Samuel, Arthur L. (1960). «Programación de ordenadores para jugar». En Alt, Franz L. (ed.). Avances en informática, Volumen 1. Vol.  1. Elsevier. pp. 165–192 . doi : 10.1016/S0065-2458(08)60608-7 . ISBN  9780120121014ISSN 0065-2458 {{cite book}}: Incompatibilidad de ISBN/Fecha ( ayuda )
  • Allen Newell, "Memorias biográficas", Academia Nacional de Ciencias (incluye una breve sección sobre IPL)
  • Documentos IPL de BitSavers
  • Influencia de la IPL en LISP
  • Un intérprete de Common LISP para IPL-V, que incluye una transcripción funcional de la máquina de teoría lógica.