Information Processing Language ( IPL ) es un lenguaje de programación creado por Allen Newell , Cliff Shaw y Herbert A. Simon en RAND Corporation y el Carnegie Institute of Technology alrededor de 1956. Newell tenía el trabajo de especificador de lenguaje-programador de aplicaciones, Shaw era el programador del sistema y Simon tenía el trabajo de programador de aplicaciones-usuario.
El código incluye funciones destinadas a ayudar con programas que realizan acciones simples de 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 inventó el concepto de procesamiento de listas, aunque en un estilo de lenguaje ensamblador .
Una computadora IPL tiene:
La estructura de datos de IPL es la lista, pero las listas son estructuras más intrincadas que en muchos lenguajes. Una lista consiste en una secuencia de símbolos enlazados de manera simple, como podría esperarse, más algunas listas de descripción , que son listas enlazadas de manera simple subsidiarias interpretadas como nombres y valores de atributos alternativos. IPL proporciona primitivas para acceder y mutar el valor del atributo por nombre. Las listas de descripción reciben nombres locales (del formato 9–1). Por lo tanto, una lista llamada L1 que contiene los símbolos S4 y S5, y se describe asociando el valor V1 al atributo A1 y V2 al 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 usa un nombre regional que debe ser conocido globalmente, necesita residir en un lugar específico.
IPL es un lenguaje ensamblador para manipular listas. Tiene algunas celdas que se utilizan como registros especiales. H1, por ejemplo, es el contador del 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 comienzo de la pila de llamadas. Por ejemplo, las llamadas a subrutinas insertan el SYMB de H1 en esta pila.
H2 es la lista libre. Los procedimientos que necesitan asignar memoria toman celdas de H2; los procedimientos que terminan con la memoria la colocan en H2. Al ingresar a 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, que se coloca en H5. Diez celdas, W0-W9, están reservadas para el almacenamiento de trabajo público. Los procedimientos están "moralmente obligados" (para citar el artículo de CACM) a guardar y restaurar los valores de estas celdas.
Hay ocho instrucciones, basadas en los valores de P: llamada de subrutina, insertar/extraer S a H0; insertar/extraer el símbolo en S a la lista adjunta a S; copiar valor a S; bifurcación condicional. En estas instrucciones, S es el objetivo. S es el valor del campo SYMB si Q=0, el símbolo en la celda nombrada por SYMB si Q=1, o el símbolo en la celda nombrada por el símbolo en la celda nombrada por 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 tiene una biblioteca de unas 150 operaciones básicas, entre las que se incluyen las siguientes:
La primera vez que se utilizó la IPL fue para demostrar que los teoremas de Principia Mathematica , que Bertrand Russell y Alfred North Whitehead habían demostrado laboriosamente a mano , podían demostrarse de hecho mediante computación . Según la autobiografía de Simon , Models of My Life , esta aplicación se desarrolló originalmente mediante simulación manual, utilizando a sus hijos como elementos de computación, 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 tempranos de inteligencia artificial , también de los mismos autores: Logic Theorist (1956), General Problem Solver (1957) y su programa de ajedrez informático 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, y muchas otras. Ampliamente utilizada). IPL-VI fue una propuesta para un hardware IPL. [1] [2] [3]
En las Bibliotecas Nacionales de Argonne se desarrolló un coprocesador “IPL-VC” para el CDC 3600 que podía ejecutar comandos IPL-V. [4] [5] Se utilizó para implementar otro programa para jugar a las 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 el beneficio de la recolección automática de basura .
Podría decirse que IPL introdujo varias características del lenguaje de programación:
Muchas de estas características se generalizaron, racionalizaron e incorporaron a Lisp [8] y de allí a muchos otros lenguajes de programación durante las siguientes décadas.