丹尼斯•里奇:史蒂夫•乔布斯所站的肩膀
译者 后溪金
1972年,(站着的)丹尼斯·里奇和肯·汤普森在PDP-11旁(照片:蒙贝尔实验室惠允)
悼念丹尼斯·里奇无法与史蒂夫·乔布斯死后互联网上滔滔不绝的颂扬之河相比。然而,人们应该。
而且还远不止此。
“上周,史蒂夫·乔布斯去世时,人们呼天抢地,十分感人,也合情合理。但是,丹尼斯有过更大的影响,公众却不知道他是谁,”罗布·派克说,这位程序设计传奇人物和现在的Googler人在负有盛名的贝尔实验室与里奇相隔一幢办公大楼工作了20年。
星期三傍晚,派克在Google+发布一则讣告说,里奇在长期生病之后周末死于新泽西家中,虽然行内中坚科技人员反应强烈,但整个网络的总体颂词却没有公平对待里奇对现代世界范围广泛的影响。丹尼斯·里奇是C程序设计语言之父,并和贝尔实验室研究员肯·汤普森一起用C语言建造UNIX系统,世上那么多东西就建立在这个操作系统之上——包括被史蒂夫·乔布斯监管的苹果帝国。
“几乎网上的一切都用到那两样东西:C语言和UNIX系统,”派克告诉《连线》。“浏览器用C语言编写。差不多整个国际互联网都运行在用C语言编写的UNIX内核之上。Web服务器用C语言编写,而且如果不用C,就用C语言的衍生物Java或C++编写,或者用由C语言实现的Python或Ruby编写。并且我几乎可以保证,运行这些程序的所有网络硬件都用C语言编写。
“建立在丹尼斯所做的工作之上的现代信息经济实际上很难夸大多少。”
即使Windows也曾经用C语言编写,他补充说,而UNIX为苹果桌面操作系统Mac OS X和运行iPhone与iPad的iOS两者打下基础。“乔布斯是有形之王,而里奇很大程度上是无形之王,”麻省理工学院电气工程与计算机科学教授、计算机科学与人工智能实验室人员马丁·里纳德说。
“乔布斯的天才是因其鉴赏力开发出这些人们真正喜欢用的产品,并且也能创造出一些人们确实感到不可抗拒的东西。里奇创建的是技术专家可以用来开发核心基础设施的事物,这些普通人每天都在用,却几乎再也不必了解多少。”
从B语言到C语言
丹尼斯·里奇创建了C语言是因为他和肯·汤普森需要更好的工具开发UNIX系统。原来的UNIX内核是用汇编语言编写的,但他们很快就作出抉择,他们需要某种“高级”语言,让他们能够更多地控制所有涵盖操作系统的数据(结构)。大约在1970年,他们尝试用Fortran语言开发第二个版本,但这次完全没有修剪成,于是里奇就在汤普森创建的名叫B的语言的基础上提出一种新的语言。
B语言不是以汤普森的妻子邦妮(Bonnie)命名,就是以1960年代中期在剑桥开发的BCPL语言命名,这取决于你信哪一个传说。但无论情况怎样,B生下C。
B是解释型语言——这意味着要由运行在CPU之上的一段中间层软件来执行程序——但C是编译型语言。把程序翻译成机器代码,然后直接在CPU上运行。但在那时候,C被认为是高级语言。C语言会给里奇和汤普森他们需要的灵活性,而且与此同时,速度很快。
C语言的第一版并非完全不同于我们今天所熟悉的C语言——尽管当时像一个比较单纯的小男孩。它提供充分的数据结构和“类型”定义变量,而这就是里奇和汤普森用来建立他们的UNIX新内核的东西。“他们为了写一个程序而创建了C语言,”十年后加入贝尔实验室的派克说。“而他们想要编写的程序就是UNIX内核。”
里奇说的笑话四处流传,C语言具有“汇编语言的功能和…汇编语言的便利。”换句话说,他承认C语言与硬件的关系仍然十分密切,决非好极了。今天,C语言被看作是低级语言,而不是高级语言。不过,里奇的玩笑对这种新的语言颇为不公。在提供真正的数据结构方面,C语言的操作水平正好足够高。
“编写大型程序的时候——而UNIX就是大型程序——必须设法对付各种各样不同组成部分:所有用户、文件系统、磁盘、程序执行之间的相互作用,而且为了有效控制,对于工作用的信息,就需要有良好的表示。那就是我们称为数据结构的东西,”派克说。
“和有数据结构作为组成部分并且数据结构有如UNIX拥有的优美雅致相比,在没有数据结构的情况下编写内核将是一个非常非常困难的艰巨任务。他们需要一个把涵盖操作系统的所有数据组织起来的方法,而用Fortran语言就没有那种方法。”
当时,那是独特的编写操作系统方法,而且也是允许里奇和汤普森最终想到把这个操作系统移植到其他平台的东西,他们在1970年代后期做了移植。“那为UNIX系统到处运行打开了闸门,”派克说。“用C语言就可能做到这一切。”
苹果、微软等等
同时,C语言在世界上闯出自己的路,从贝尔实验室进入全世界各所大学,也进入1980年代爆发的软件公司微软公司。“C程序设计语言大踏步向前发展,而且是最恰当的妥协…C语言适当的平衡给人印象深刻,一点不错,它让你编写高水平的程序并且更加富有成效,而在需要的时候,能够准确控制要发生的事情,”著名显示芯片生产商NVIDIA首席科学家、斯坦福大学工程学贝尔讲座教授比尔·达利说。“[C语言]给后来几十年程序设计的方法定下基调。”
正如派克指出的,里奇构建在C语言中的数据结构最后发展成为像C++和Java这些现代语言使用的面向对象范式。
这场革命始于1973年,里奇在那一年发表了他研究C语言的论文,五年后,他和同事布赖恩·克奈汉出版了权威的C语言教科书《C程序设计语言》。克奈汉早就编过C语言的辅导材料,而在某种程度上,是他“强迫里奇”和他一起编书。
派克还是多伦多大学的一名大学生就读到这本书,他有一天请病假,在下午回家的路上偶然发现。“那本参考手册与后来的各种手册相比,是思维清晰且明白可读的范本。它无可非议是一部经典著作,”他说。“我躺在病床读书,结果使我忘记生病。”
像许多大学生一样,派克早已开始使用C语言了。因为贝尔实验室开始分发UNIX源代码,所以,C语言传遍各个大学校园。除了其他许多方方面面,这个操作系统还引发了现代开放源代码运动。派克说到里奇的工作影响不可能被夸大的时候,他并没有夸大其词,而尽管里奇接受了1983年的图灵奖和1998年的国家科技奖章,但他仍然没有得到他应该得到的东西。
正如克奈汉和派克所描述的,里奇异乎寻常地内向。“我和他相隔一幢办公大楼工作超过20年,可是我觉得好象还没有到完全了解他的地步,”派克说。但这并不能完全解释他的低调。史蒂夫·乔布斯也内向,但他坚持不受公众干扰的姿态只会激化围着他的人对名人的狂热崇拜。
里奇生活的时代和工作环境与像乔布斯等人很不相同。这样才能讲清楚他不会得到他应该得到的东西的道理。“用牛顿说过站在巨人肩膀上的话,”克奈汉说。“我们都站在里奇的肩膀上。”