1970年报告记录了什么
Forth由查尔斯·H.摩尔在长期编程实践中逐步形成。1970年,他与杰弗里·C.利奇在纽约州阿姆斯特丹的Mohasco公司写成内部报告《FORTH:交互式计算语言》。报告描述的是一套连接键盘终端与计算机、管理内存和磁盘并容纳应用程序的完整系统,而不只是算术表达式的写法。
报告的进展说明把IBM 1130上的开发追溯到1968年秋,并注明1969年2月已生成Burroughs B-5500版本。因此,1970年对应早期技术说明成文,不是Forth从无到有的单一发布日期。最初应用包括驱动IBM 2250图形显示器,以及选择、排序和打印文件记录。
参考:[1]
词典把程序和命令连在一起
摩尔希望减少应用程序、编译器、装载器与作业控制之间层层分离的操作负担。Forth以词典组织名称、数据和可执行行为:输入解释器读取一个词,找到词典项后执行其动作;数值则可被识别并放入数据栈。程序员还能够定义新词,再用新词组合更大的任务。
1970年报告已经把词典、扫描器和调度队列放在同一系统中。用户请求输入输出等资源时进入队列,系统据此安排共享。词典既表达语言,也参与存储分配;增加一项定义,就是给当前环境加入一项可调用的能力。这种做法使应用程序逐渐呈现为针对具体工作的专用词汇。
参考:[1]
用栈传递参数
数据栈按后进先出的顺序保存中间值。以后来《Starting FORTH》教材采用的写法为例,输入“3 4 +”会先把3和4压栈,再由加法词取出二者,把7放回栈顶。运算符跟在参数后面,不必依靠括号或通常的乘除优先级解释这个序列。
一个求平方的定义可以写成“: SQUARE DUP * ;”。冒号引入新词SQUARE,DUP复制栈顶数,乘法词把两份数相乘,分号结束定义。执行“5 SQUARE”便留下25。新定义可继续用于其他定义;组织程序的重点因而是分清每个词取走什么、留下什么,并将可重复使用的小操作组合起来。
参考:[4]
进入射电望远镜控制室
1971年,摩尔为美国国家射电天文台在亚利桑那州基特峰的11米望远镜建立独立Forth系统。爱德华·K.康克林引入伊丽莎白·D.拉瑟提供当地维护;她学习系统、整理文档,并把使用经验转化为手册和技术交流。
摩尔与拉瑟1973年的论文展示了实际任务:望远镜跟踪、数据采集、操作员打印终端和天文学家图形终端并发工作。观察者能查看谱线、校准数据或试验命令,同时保持跟踪与观测进行。SPECTRA程序把仪器操作和数据处理放进同一个交互环境,让观测现场能够及时判断数据质量。
把一次观测写成一个词
论文给出的例子是“4 ON-OFF”,用于进行四次源位置与邻近空白天空之间的开关观测。用户也可以定义“: G 4 ON-OFF ;”,以后输入G就启动同样的序列。这里的扩展不是修改底层编译器,而是用已有观测词建立便于操作者使用的命令。
ON-OFF所控制的位置切换有助于消除系统和大气影响;MAP组织扫描,校准及拟合词处理接收数据。高级定义经过编译后执行,避免每次运行都重新按文本查找所有词。论文同时强调常驻的汇编器、编译器和解释器,使系统能随接收设备和观测方式变化而修改。
参考:[3]
从现场系统到不同实现
1973年,摩尔、拉瑟和康克林成立FORTH, Inc.,把这套方法用于商业小型机项目。推广依靠移植系统、交付具体应用以及教授用户编程,而非先颁布一套固定语言再等待采用。1976年出现面向微处理器的microFORTH,1970年代末的Forth兴趣小组又推动可公开取得的实现与移植。
不同硬件和使用群体随后形成多种方言与标准化工作。早期Forth留下的共同方法,是在有限资源内把交互执行、词典扩展和应用控制紧密结合;1970年内部报告、天文台系统和后来的商业产品,分别记录了说明、应用与传播的不同阶段。