信息处理语言(IPL)是由Allen Newell,Cliff Shaw和Herbert A. Simon在兰德公司和卡内基理工学院于1956年创建的一种编程语言。Newell有语言指定者 - 应用程序员的工作,Shaw是 系统程序员,Simon接受了应用程序员用户的工作。
该语言包括旨在帮助执行简单问题解决操作的程序的功能,例如列表,动态内存分配,数据类型,递归,函数作为参数,生成器和协作式多任务处理。 IPL发明了列表处理的概念,尽管是汇编语言风格。
简介IPL计算机具有:
一组符号。所有符号都是地址和名称单元格。与后面的语言中的符号不同,符号由一个字符后跟一个数字组成,并写成H1,A29,9-7,9-100。
以字母开头的单元名称是区域性的,并且是绝对地址。
以“9-”开头的单元名称是本地的,并且在单个列表的上下文中是有意义的。一个列表的9-1独立于另一个列表的9-1。
其他符号(例如,纯数字)是内部的。
一组细胞。列表由几个持有相互引用的单元构成。单元格有几个字段:
P,当单元用作指令时用于操作代码的3位字段,当单元是数据时未使用。
Q,当单元格用作指令时用于间接引用的3值字段,当单元格是数据时未使用。
SYMB,用作单元格中值的符号。
一组原始过程,在现代语言中称为原始函数。
IPL的数据结构是列表,但列表是比许多语言更复杂的结构。列表由单个链接的符号序列组成,如可能预期的那样加上一些描述列表,它们是被解释为交替属性名称和值的辅助单链表。 IPL提供基元来按名称访问和改变属性值。图一给出了本地名称。因此,如下存储称为L1的列表,其包含符号S4和S5,并且通过将值V1与属性A1和V2相关联来描述。 0表示列表的结尾;单元名称100,101等是自动生成的内部符号,其值是不相关的。这些元素可以分散在整个记忆中;只有使用必须全局知晓的区域名称的L1才需要驻留在特定的位置。
IPL是一种用于操作列表的汇编语言。它有一些用作专用寄存器的单元。例如,H1是程序计数器。 H1的SYMB字段是当前指令的名称。但是,H1被解释为一个列表;从现代的角度来看,H1的LINK是指向调用栈头部的指针。例如,子程序调用将H1的SYMB推送到此堆栈。
H2是免费清单。需要从H2分配内存抓取单元的过程;用记忆完成的程序把它放在H2上。在进入函数时,参数列表以H0给出;在退出时,结果应该在H0中返回。许多过程返回一个表示成功或失败的布尔结果,该结果放在H5中。十个电池W0-W9保留用于公共工作存储。程序是“道德约束”(引用CACM文章)以保存和恢复这些单元格的值。
有八条指令,基于P:子程序调用的值,push/pop S到H0;将S中的符号推送/弹出到附加到S的列表中;将值复制到S;条件分支。在这些说明中,S是目标。如果Q=0则S是SYMB字段的值,如果Q=1则由SYMB命名的单元中的符号,或者如果Q=2,则由SYMB命名的单元中的符号命名的单元中的符号。在除条件分支之外的所有情况下,单元的LINK字段告知下一个要执行的指令。
IPL拥有大约150个基本操作的库。其中包括以下操作:
测试符号是否相等
查找,设置或删除列表的属性
找到列表中的下一个符号;在列表中插入符号;擦除或复制整个列表。
算术运算(在符号名称上)。
操纵符号;例如,测试符号是否表示整数,或者使符号为局部。
I/O操作
“generators”,对应于函数式编程中的迭代器和过滤器。例如,生成器可以接受数字列表并生成它们的正方形列表。生成器可以接受适当设计的函数,严格地说,适当设计的函数的代码地址作为参数。
历史IPL最初用于证明Principal Mathematica中的定理可以通过计算证明Bertrand Russell和Alfred North Whitehead手工证明。根据Simon的自传“我的生活模型”,这个应用程序最初是通过手工模拟开发的,使用他的孩子作为计算元素,同时书写和保持记录卡作为包含程序状态变量的寄存器。
IPL被用于实施几个早期的人工智能程序,也是由同一作者:逻辑理论家(1956),一般问题解决者(1957),以及他们的计算机国际象棋程序NSS(1958)。
创建了多个版本的IPL:IPL-I(从未实现),IPL-II(1957年为JOHNNIAC),IPL-III(简要存在),IPL-IV,IPL-V(1958年,用于IBM 650,IBM 704,IBM 7090,许多其他。广泛使用),IPL-VI。
然而,这种语言很快被Lisp取代,它具有更强大的功能,更简单的语法和自动垃圾收集的好处。
传统计算机编程IPL可以说引入了几种编程语言特性:
列表操作:但只是原子列表,而不是一般列表
属性列表:但仅在附加到其他列表时
高阶函数:除了汇编编程总是能够用要调用的函数的地址进行计算; IPL是一种早期尝试,以原则的方式概括汇编语言的这种属性
用符号计算:除了符号是字母+数字,而不是完整的单词
虚拟机
其中许多功能都被广泛化,清理并整合到Lisp 中,并在未来几十年内从各种编程语言中融入其中。1
本词条内容贡献者为:
王沛 - 副教授、副研究员 - 中国科学院工程热物理研究所