工业客户为什么需要语言
微处理器进入工业设计时,客户需要把特定功能写成程序,再存入只读存储器,作为最终产品的一部分。熟悉电子电路的工程师却未必熟悉编程,单有芯片并不足以完成产品开发。计算史家Paul E. Ceruzzi将Intel的软件工作放在这一背景下:公司一面提供教学材料和实验套件,一面推出能测试应用程序的开发系统,希望由此带动芯片的大批量销售。受邀开发语言的Kildall当时在加利福尼亚州蒙特雷的海军研究生院任教。他以PL/I为基础设计PL/M,Intel于1973年向客户提供这套工具。厂商关心的是把嵌入式设备做成可用的产品,还没有把普通消费者视为主要使用者。
参考:[1]
语言设计者与支持团队
Intel的Hank Smith在2006年口述访谈中回忆,公司在1972年初成立微计算机系统团队,由他负责,内部结合市场、软件、工程和制造工作。团队先推出帮助客户进行设计的实验板,随后认为还需要高级语言,于是请来Gary Kildall。Smith明确记得Kildall在Intel有办公室,并在那里开发PL/M。参与访谈的Stan Mazor则把早期PL/M-8界定为面向8008的交叉编译语言,说明Kildall与他们并肩工作,但没有成为Intel正式雇员。这些回忆将语言设计与厂商的客户支持联系起来:让工程师能够编程,本身就是推广微处理器的必要工作。这种组织方式把产品推广、技术说明和工具制作放进同一个团队,回应客户从电路设计转向程序设计时遇到的困难;售出器件之后仍需提供服务。
参考:[2]
在大计算机上完成两遍编译
1973年8月14日,Lawrence Livermore Laboratory的W. G. Magnuson, Jr.和T. G. Allison已经为CDC-7600上的PL/M写成操作报告。第一遍检查程序,产生错误清单、中间代码和符号表;发现错误须修改后重跑,检查通过才进入第二遍。第二遍生成8008机器代码,列出源语句与存储地址的对应关系,以及已确定地址的符号表。输出还能转换为纸带,供微计算机装入,或送给模拟程序检查;报告具体说明用CDC-160A完成打孔。报告还要求磁盘输入采用打包的字符格式,文件名最多七个字符,显示出宿主计算机系统的操作约束。因此,编写、编译和运行不必发生在同一台机器上。这份同期文件证明了PL/M在当年的实际使用,报告日期并非语言首发日。
参考:[3]
用条件表达程序意图
Intel标为1973年11月修订、1974年重印的8008用户手册,用比较两个数来说明PL/M的方法:条件成立便把较大值写入结果位置,否则选择另一个值。程序员直接描述判断和赋值,不必逐条安排寄存器操作。以自拟数据说明这一判断:比较7与4时选中7;若把前者改为2,同一个判断就会改选4。数据改变,比较与赋值的结构保持不变,实际选择由运行时的条件结果决定。这样便把底层指令的安排交给编译器。这种表达仍然生成8008能够执行的机器指令。手册称编译器以ANSI标准Fortran IV编写,可较容易地移到大型计算机上;用户可以向Intel取得磁带,也可以通过分时计算服务使用编译器。它还配有INTERP/8模拟程序,允许设置断点、检查寄存器并按符号名追踪执行。供应的对象由此包含翻译和调试所需的软件,而不只是纸面上的语言说明。
参考:[4]
把电传打字机的时序写进程序
Kildall于1974年6月27日在《Electronics》发表的技术文章,为早期8008方法留下了更完整的程序例子。电传打字机连接到输出端口的最低位;外层循环逐个取出消息中的字符,内层循环把每个字符拆成连续脉冲。每轮发送一个起始位、八个数据位和两个停止位,相邻脉冲相隔9.1毫秒。程序通过逻辑运算选取当前位,借助循环移位准备下一位,并调用延时操作保持节奏。字符、字符位置、脉冲位置和下一次输出值分别保存在变量中,内层循环结束才转向后一个字符。循环移位时补入的一位,又使最后两个停止位成为1。这个例子把重复、位处理、端口写入和时间控制放在同一段高级语言程序中,具体展示了PL/M面向机器的设计。文章发表于次年,是对这种开发方法的技术说明,不是1973年的发布公告。
参考:[5]