小型机上的研究系统
肯·汤普森(Ken Thompson)是美国计算机科学家,1943年出生于新奥尔良,1965年和1966年先后取得加利福尼亚大学伯克利分校相关专业的学士、硕士学位。1969年,他与贝尔实验室同事丹尼斯·里奇开始发展Unix,在较小的机器上重新建立适合交互使用的系统环境。
早期系统运行于PDP-7等计算机,后来转向PDP-11。Unix并非在一个发布日便具有后来的全部能力。汤普森与里奇1974年的论文明确区分早期版本与论文所述PDP-11/40、11/45系统,文件、设备输入输出、进程和命令接口都在持续调整中。两人共同获得1983年度图灵奖。
从B到C的合作边界
汤普森希望用高级语言编写系统,设计并实现了B。B承接BCPL以机器字为中心的思路,但新机器的字节组织方式及运行效率要求暴露出局限。贝尔实验室保存的历史访谈说明,里奇在B的基础上加入类型、发展编译器,经历称作“NB”的阶段后形成C。
这条路线不是简单改名。语言的数据表示和编译能力必须适合操作系统实际需要。汤普森在1972年尝试用C重写Unix时,进程切换及当时尚不具备的结构体等问题仍构成障碍。随着里奇补充结构体并改进编译器,团队在1973年夏季完成重要重写。因此,汤普森的B设计、里奇的C工作和Unix系统实现,应分别说明而不是合成一个人的单项发明。
用统一接口连接工具与设备
1974年的合著论文可见这种系统设计的具体方式:普通文件保存程序自行解释的字节,目录把名称关联到文件,而设备通过特殊文件进入相近的读写接口。程序得到文件描述符后,便以描述符执行后续读取或写入,不必在每次操作中重新解释完整路径。
这使处理文件的程序能够在合适条件下处理设备输入输出,并让名称与权限机制得到复用。它并不表示设备和磁盘文件行为完全相同,例如某些设备不支持定位操作。论文把这些机制作为系统整体来描述,不能据此将每个细节都独立归功于汤普森;Unix工具和接口的成长始终有其他贝尔实验室成员参与。
参考:[3]
继续以工程问题推动语言设计
汤普森后来的工作并未止于早期Unix。Go项目官方记录中,罗布·派克回忆,他、汤普森与罗伯特·格里泽默在2007年9月开始讨论一种新语言,试图回应谷歌日常软件开发中的工程困难。Go于2009年11月向公众推出,设计启动与公开发布是两个不同阶段。
这段经历延续了在具体使用条件下选择语言和系统机制的实践,同时也显示贡献范围的变化:Go由多位设计者共同启动,之后拥有更广泛的实现与使用群体。汤普森参与其早期设计,并不意味着后来所有标准库、工具和生态项目都出自他个人。
参考:[4]