Information Processing Language: Difference between revisions

Content deleted Content added
added influence on LISP link References
minor refactorings: W0-W9 nine -> ten, significance -> legacy, new paragraph history, TODO: "taste of IPL" -?> ??
Line 1:
'''Information Processing Language''' (IPL) is a [[programming language]] developed by [[Allen Newell]], [[Cliff Shaw]], and [[Herbert Simon]] at [[RAND Corporation]] and the [[Carnegie Institute of Technology]] from about 1956. It includes features intended to support programs that could perform general problem solving, including lists, associations, schemas (frames), dynamic memory allocation, data types, recursion, associative retrieval, functions as arguments, generators (streams), and [[cooperative multitasking]]. Newell had the role of language specifier-application programmer, Shaw was the system programmer and Simon took the role of application programmer-user.
 
The language includes features intended to support programs that could perform general problem solving, including lists, associations, schemas (frames), dynamic memory allocation, data types, recursion, associative retrieval, functions as arguments, generators (streams), and [[cooperative multitasking]]. IPL pioneered the concept of list processing, albeit in an assembly-language style.
IPL was used to implement several early [[artificial intelligence]] programs, also by the same authors: the [[Logic Theory Machine]] (1956), the [[General Problem Solver]] (1957), and their [[computer chess]] program [[NSS (chess program)|NSS]] (1958).
 
IPL pioneered the concept of list processing, albeit in an assembly-language style.
 
The first application of IPL was to demonstrate that the theorems in ''[[Principia Mathematica]]'' which were laboriously proven by hand, by [[Bertrand Russell]] and [[Alfred North Whitehead]], could in fact be proven by computation. According to Simon's autobiography ''Models of My Life'', this first application was developed first by hand simulation, using his children as the computing elements, while writing on and holding up note cards as the registers which contained the state variables of the program.
 
Several versions of IPL were created: IPL-I (never implemented), IPL-II (1957 for [[JOHNNIAC]]), IPL-III (existed briefly), IPL-IV, IPL-V (1958, for [[IBM 650]], [[IBM 704]], [[IBM 7090]], many others. Widely used), IPL-VI.
 
However the language was soon displaced by [[Lisp programming language|Lisp]], which had far more powerful features, a simpler syntax, and the benefit of automatic [[garbage collection (computer science)|garbage collection]].
 
==A Taste of IPL==
Line 54 ⟶ 46:
IPL is an [[assembly language]] for manipulating lists. It has a few cells which are used as special-purpose registers. H1, for example, is the program counter. The SYMB field of H1 is the name of the current instruction. However, H1 is interpreted as a list; the LINK of H1 is, in modern terms, a pointer to the head of the call stack. For example, subroutine calls push the SYMB of H1 onto this stack.
 
H2 is the free-list. Procedures which need to allocate memory grab cells off of H2; procedures which are finished with memory put it on H2. On entry to a function, the list of parameters is given in H0; on exit, the results should be returned in H0. Many procedures return a boolean result indicating success or failure, which is put in H5. NineTen cells, W0-W9, are reserved for public working storage. Procedures are "morally bound" (to quote the CACM article) to save and restore the values of these cells.
 
There are eight instructions, based on the values of P: subroutine call, push/pop S to H0; push/pop the symbol in S to the list attached to S; copy value to S; conditional branch. In these instructions, S is the target. S is either the value of the SYMB field if Q=0, the symbol in the cell named by SYMB if Q=1, or the symbol in the cell named by the symbol in the cell named by SYMB if Q=2. In all cases but conditional branch, the LINK field of the cell tells which instruction to execute next.
Line 68 ⟶ 60:
* "generators", which correspond to iterators and filters in functional programming. For example, a generator may accept a list of numbers and produce the list of their squares. Generators could accept suitably-designed functions -- strictly, the addresses of code of suitably-designed functions -- as arguments.
 
== History ==
=== Historical Significance ===
 
The first application of IPL was to demonstrate that the theorems in ''[[Principia Mathematica]]'' which were laboriously proven by hand, by [[Bertrand Russell]] and [[Alfred North Whitehead]], could in fact be proven by computation. According to Simon's autobiography ''Models of My Life'', this first application was developed first by hand simulation, using his children as the computing elements, while writing on and holding up note cards as the registers which contained the state variables of the program.
 
IPL was used to implement several early [[artificial intelligence]] programs, also by the same authors: the [[Logic Theory Machine]] (1956), the [[General Problem Solver]] (1957), and their [[computer chess]] program [[NSS (chess program)|NSS]] (1958).
 
Several versions of IPL were created: IPL-I (never implemented), IPL-II (1957 for [[JOHNNIAC]]), IPL-III (existed briefly), IPL-IV, IPL-V (1958, for [[IBM 650]], [[IBM 704]], [[IBM 7090]], many others. Widely used), IPL-VI.
 
However the language was soon displaced by [[Lisp programming language|Lisp]], which had far more powerful features, a simpler syntax, and the benefit of automatic [[garbage collection (computer science)|garbage collection]].
 
== Legacy to computer programming ==
 
IPL arguably introduced several programming language features:
Line 77 ⟶ 79:
* '''Virtual Machine'''
 
Many of these features were generalized, cleaned up, and incorporated into Lisp <ref>[http://www-formal.stanford.edu/jmc/history/lisp/node2.html]</ref> and from there into a wide spectrum of programming languages over the next several decades.
 
==Publications==