Lenguaje de Procesamiento de Información - Enciclopedia

Idioma de Procesamiento de Información (IPL) es un lenguaje de programación creado por Allen Newell, Cliff Shaw y Herbert A. Simon en la Corporación RAND y el Instituto de Tecnología Carnegie aproximadamente en 1956. Newell tenía el trabajo de especificador de lenguaje-programador de aplicación, Shaw era el programador del sistema, y Simon tenía el trabajo de programador de aplicación-usuario.

IPL incluía características para facilitar la programación de inteligencia artificial, 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 multitasking cooperativo. Además, IPL introdujo los conceptos de procesamiento de símbolos y procesamiento de listas. Desafortunadamente, todas estas innovaciones fueron implementadas en un estilo de ensamblador difícil. No obstante, IPL-V (la única versión pública de IPL) corrió en muchos computadores hasta mediados de los años 1960.


Fundamentos de IPL
Un computador IPL tiene:

Un conjunto de símbolos. Todos los símbolos son direcciones y celdas de nombre. A diferencia de los símbolos en los lenguajes posteriores, los símbolos consisten en un carácter seguido de un número y se escriben como H1, A29, 9–7, 9–100.
Los nombres de celdas que comienzan con una letra son regionales y son direcciones absolutas.
Los nombres de celdas que comienzan con "9-" son locales y tienen significado dentro del contexto de una lista única. Uno de los 9-1 de una lista es independiente del 9–1 de otra lista.
Otros símbolos (por ejemplo, números puros) son internos.
Un conjunto de celdas. Las listas se hacen con varias celdas, incluyendo referencias mutuas. Las celdas tienen varios campos:
P, un campo de 3 bits utilizado como código de operación cuando la celda se utiliza como instrucción y no se utiliza cuando la celda es datos.
Q, un campo de 3 valores utilizado para referencia indirecta cuando la celda se utiliza como instrucción y no se utiliza cuando la celda es datos.
SYMB, un símbolo utilizado como el valor en la celda.
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 consiste en una secuencia enlazada de símbolos, como se podría esperar, más algunas listas de descripción, que son listas enlazadas simples interpretadas como nombres de atributos y valores alternos. IPL proporciona primitivos para acceder y mutar valores de atributos por nombre. Las listas de descripción se dan nombres locales (del tipo 9–1). Por lo tanto, una lista llamada L1 que contiene los símbolos S4 y S5, y descrita 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 esparcidas 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 de ensamblador para manipular listas. Tiene algunas celdas que se utilizan como registros de propósito especial. Por ejemplo, H1 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, en términos modernos, es un puntero al principio de la pila de llamadas. Por ejemplo, las llamadas a subrutinas empujan el SYMB de H1 a esta pila.
H2 es la lista libre. Los procedimientos que necesitan asignar memoria toman celdas de H2; los procedimientos que se han acabado con la memoria la ponen 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 el éxito o el 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" (citando el artículo de CACM) a guardar y restaurar los valores de estas celdas.
Hay ocho instrucciones, basadas en los valores de P: llamada a subrutina, empujar/sacar S a H0; empujar/sacar el símbolo en S a la lista adjunta a S; copiar valor a S; saltos condicionales. En estas instrucciones, S es el destino. 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 el salto condicional, el campo LINK de la celda indica qué instrucción ejecutar a continuación.

IPL tiene una biblioteca de alrededor de 150 operaciones básicas. Estas incluyen operaciones como:

Probar símbolos para la igualdad
Encontrar, 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 (en nombres de símbolos)
Manipulación de símbolos; por ejemplo, probar si un símbolo denota un entero o hacer un símbolo local
Operaciones de E/S
"Generadores", que corresponden a iteradores y filtros en la programación funcional. Por ejemplo, un generador puede aceptar una lista de números y producir la lista de sus cuadrados. Los generadores pueden aceptar funciones diseñadas adecuadamente—estrictamente, las direcciones del código de las funciones diseñadas adecuadamente—as argumentos.


Historia
IPL fue utilizado por primera vez para demostrar que los teoremas en Principia Mathematica que fueron probados laboriosamente a mano, por Bertrand Russell y Alfred North Whitehead, podrían en realidad ser probados por computación. Según la autobiografía de Simon, Models of My Life, esta aplicación se desarrolló originalmente primero mediante simulación a mano, utilizando a sus hijos como elementos de cómputo, mientras escribía y sostenía tarjetas de notas como registros que contienen las variables de estado del programa.

IPL se utilizó para implementar varios programas de inteligencia artificial tempranos, también por los mismos autores: el Logic Theorist (1956), el General Problem Solver (1957) y su programa de ajedrez 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, modelo 212 de Philco, muchos otros. Ampliamente utilizado). IPL-VI fue una propuesta para un IPL de hardware.

Se desarrolló un co-procesador “IPL-VC” para el CDC 3600 en las Bibliotecas Nacionales de Argonne que podía ejecutar comandos IPL-V. Se utilizó para implementar otro programa de juego de ajedrez. Esta implementación de hardware no mejoró lo suficiente los tiempos de ejecución para "competir favorablemente con un lenguaje más orientado directamente a la estructura de las máquinas actuales".

IPL pronto fue reemplazado por Lisp, que tenía características más poderosas, una sintaxis más sencilla y el beneficio de la recolección automática de basura.


Legado a la programación de computadores
IPL introdujo, con toda probabilidad, varias características de lenguaje de programación:

Manipulación de listas, pero solo listas de átomos, no listas generales
Listas de propiedades, pero solo cuando están adjuntas a otras listas
Funciones de orden superior—si bien la programación de ensamblador siempre ha permitido calcular con las direcciones de las funciones, IPL fue un intento temprano de generalizar esta propiedad del ensamblador de manera racionalizada
Computación con símbolos, aunque los símbolos tienen una forma restringida en IPL (letra seguida de un número)
Máquina virtual
Muchas de estas características se generalizaron, racionalizaron e incorporaron en Lisp y desde allí en muchos otros lenguajes de programación durante las próximas décadas.


Referencias


Fuentes
Carson, Daniel F.; Robinson, George A. (Mayo de 1966). Gyro II, A Macro-Defined System for List Processing (Informe). División de Matemáticas Aplicadas, Laboratorios Nacionales de Argonne. ANL-7149.
Cowell, W. R.; Reed, M. C. (Octubre de 1965). A Checker-Playing Program for the IPL-VC Computer (Informe). División de Matemáticas Aplicadas, Laboratorios Nacionales de Argonne. ANL-7109.
Hodges, Donald (Mayo de 1964). IPL-VC: A Computer System having the IPL-V Instruction Set (Informe). División de Matemáticas Aplicadas, Laboratorios Nacionales de Argonne. ANL-6888.
Sammet, Jean E. (1969). Programming languages: history and fundamentals. Englewood Cliffs, N.J.: Prentice Hall. pp. 388–400.
Shaw, J. C.; Newell, A.; Simon, H. A.; Ellis, T. O. (1958). "A Command Structure for Complex Information Processing". Proceedings of the May 6–8, 1958, Western Joint Computer Conference: Contrasts in Computers. IRE-ACM-AIEE '58 (Western). Association for Computing Machinery. pp. 119–128. doi:10.1145/1457769.1457803. ISBN 9781450378642. {{cite conference}}: ISBN / Date incompatibility (help)


Leer más
Newell, Allen; Shaw, J. C. (1957). "Programming the Logic Theory Machine". Papers Presented at the February 26–28, 1957, Western Joint Computer Conference: Techniques for Reliability. IRE-AIEE-ACM '57 (Western). Association for Computing Machinery. pp. 230–240. doi:10.1145/1455567.1455606. ISBN 9781450378611. {{cite conference}}: ISBN / Date incompatibility (help)
Newell, Allen; Tonge, Fred M. (1960). "An Introduction to Information Processing Language V". Communications of the ACM. 3 (4). New York, NY, USA: Association for Computing Machinery: 205–211. doi:10.1145/367177.367205. ISSN 0001-0782. S2CID 16609075.
Newell, Allen; Tonge, Fred M.; et al. (1964). Information Processing Language-V Manual. Englewood Cliffs, N.J.: Prentice Hall.
Samuel, Arthur L. (1960). "Programming Computers to Play Games". In Alt, Franz L. (ed.). Advances in Computers Volume 1. Vol. 1. Elsevier. pp. 165–192. doi:10.1016/S0065-2458(08)60608-7. ISBN 9780120121014. ISSN 0065-2458. {{cite book}}: ISBN / Date incompatibility (help)


Enlaces externos
Allen Newell, "Biographical Memoirs", National Academy of Sciences (incluso una sección breve sobre IPL)
Documentos de IPL de BitSavers
Influencia de IPL en Lisp
Un intérprete de LISP común para IPL-V, incluyendo una transcripción funcional del Logic Theory Machine (bajo desarrollo en 2025)