语言设计背后的系统经验

詹姆斯·阿瑟·高斯林(James Arthur Gosling)出生于加拿大卡尔加里附近,1977年取得卡尔加里大学计算机科学学士学位,1983年在卡内基梅隆大学获得博士学位。在大学阶段,他开发过 Emacs 的一种实现,并参与多处理器 Unix 等系统工作。

他还曾处理 UCSD Pascal 的 p-code 移植问题,通过模拟原有机器环境,使软件在另一平台上运行。这类经验使可移植代码与执行环境之间的关系成为具体工程问题,而非抽象口号。1984年加入 Sun 后,他与同事开发网络窗口系统 NeWS,继续探索网络、图形界面与语言机制的结合。

参考:[1]

从 Green 项目到 Java

1991年,Sun 的 Green 项目由高斯林、迈克·谢里丹、帕特里克·诺顿等人推进,最初面向智能消费设备。高斯林设计的语言称为 Oak,团队以它支持设备软件实验,并在1992年展示了 Star7 原型。项目此后转向互联网应用,语言经过修改并改名为 Java。

高斯林是初始语言设计的关键人物,但 Java 并非一次个人发明就告完成。《Java 语言规范》初版前言列出了早期语言参与者,以及比尔·乔伊、盖伊·斯蒂尔、弗兰克·耶林等人的后续贡献。语法、类型规则、类库、运行时和开发工具需要相互配合,不能把这些层面的全部成果都归到一个名字下。

参考:[1] [2]

把平台差异移到运行环境

Java 的跨平台路径,是把源程序编译为面向抽象机器的字节码,而不是直接锁定某一种处理器的本机指令。目标系统提供相应的虚拟机与运行环境后,便可解释字节码,或将其动态转换成本机代码。变化的是底层实现,程序依赖的语言和运行时规则则尽量保持一致。

这一机制减少了为每种硬件分别分发程序的负担,却不意味着一切环境差异自动消失。运行环境必须在目标平台存在,所需接口与库也须得到支持。1996年的白皮书还强调基本数据类型等语言规定的一致性:只有字节码格式相同,而数值含义等规则不同,仍不足以获得可靠的可移植行为。

参考:[3]

规范、实现与持续协作

语言规范把设计意图转化为编译器和程序员可以共同依赖的约定。其初版前言说明,希望除时间、并发中的不确定性等因素外,程序在不同实现上得到一致结果。这是一项目标与约束,并非承诺程序在所有机器上具有相同速度,也不等于任何程序都会正确完成业务任务。

2010年离开 Sun 后,高斯林又从事过 Google、Liquid Robotics 等机构的工程工作,将注意力延伸至自主海洋机器人等系统。贯穿这些经历的线索,是以语言和运行环境组织复杂系统。他的历史地位既来自 Java 的初始设计,也来自把可移植性落实为可实现、可协作演进的工程方案。

参考:[1] [2]