共计 4145 个字符,预计需要花费 11 分钟才能阅读完成。
在各种编程语言当中,C 语言因其简洁、有效、通用的特性而始终占据一席之地。自 C 语言出现后,以 C 语言为根基的 C++、Java 和 C# 等面向对象语言相继诞生,并在各自领域大获成功。
直到今天,C 语言依旧在系统编程、嵌入式编程等领域占据着统治地位。
了解过去,我们才能知其然,更知其所以然。今天我们就来分享 C 语言的发明者,“C 语言之父”—— 丹尼斯·里奇,这位传奇人物的奇闻轶事。
除了是 C 语言的创造者、也是 UNIX 操作系统的关键开发者,他在 1983 年获得图灵奖,因为他为黑客圈做的“贡献”,黑客圈子通常称他为「dmr」。
“假如有一个能够把计算机放大的显微镜,你会看到里面到处都是他的贡献。”
里奇的成长史
丹尼斯·里奇生于美国纽约州布隆克维。他的父亲是《开关电路设计》作者之一、贝尔实验室的资深科学家阿利斯泰尔·里奇。
1954 年,13 岁的里奇跟着他的父亲,电气工程师阿利斯泰尔•里奇举家从纽约州的布朗克斯维尔,搬到几十公里外的新泽西。目的是离他父亲的工作单位“贝尔实验室”更近一些。
可能是受到父亲的影像,里奇的理科成绩一直很优异,高中毕业后进入哈佛大学学习应用数学和物理学。1967 年,在父亲的介绍下,26 岁的丹尼斯·里奇进入贝尔实验室,从事当时非常前沿的一项工作 —— 计算机研究。
加入贝尔实验室的第二年,里奇在计算机科学家帕特里克·C·费希尔的指导下发表了博士论文《程序结构与计算复杂性》,但不知道为什么,里奇始终没有正式获得博士学位 …
丹尼斯·里奇为人所知,主要是因为他创造了 C 语言,作为关键开发者参与了 Unix 操作系统的开发。但在此外,里奇还参与了贝尔实验室九号项目、Inferno 操作系统以及 Limbo 语言的开发,而这些项目也都是基于他以前的成果进一步开发的。
贝尔实验室在 20 世纪 90 年代中期重组时,他转到了朗讯科技。在朗讯,他曾领导系统软件研究部门,直到 2007 年退休为止。
退休之后,有人问里奇是什么启发他如此设计 C 语言时,里奇回答说“看来是件值得做的事”(”looked like a good thing to do”)。
他说任何人在同一地方、同一时间也会像他那样做的。但是许多人认为这只是里奇的谦言,例如里奇在贝尔实验室的同事、C++ 的创造者和设计师比雅尼·斯特劳斯特鲁普曾说:“假如里奇决定在那十年里将他的精力花费在稀奇古怪的数学上,那么 Unix 将胎死腹中”。
在里奇去世之后,计算机历史学家保罗·茨露吉评价说:“里奇的名字并不容易让人察觉,也不为人熟知,但是……假如有一个能够把计算机放大的显微镜,你会看到里面到处都是他的贡献。”
开发 UNIX,只为了打游戏?
上世纪六十年代时,大部份计算机都是采用批处理的方式(也就是说,当作业积累一定数量的时候,计算机才会进行处理)。为了解决这个问题,美国电话及电报公司(AT&T)、通用电器公司(GE)及麻省理工学院(MIT)计划合作开发一个多用途、分时及多用户的操作系统,命名为 MULTICS,这也是里奇在加入贝尔实验室后,参与的第一个项目。
不过,这个项目由于太过复杂,整个目标过于庞大,进展速度非常慢,几年下来都没有任何成果,而且性能都很低。于是在 1969 年的 2 月,贝尔实验室决定退出这个项目。
可能是对工作中第一个项目的执念,里奇一直对此耿耿于怀,试图解决这一难题。
贝尔实验室中的有个叫 Ken Thompson 的人,他曾经为 MULTICS 这个操作系统写了个叫「Space Travel」的游戏,在 MULTICS 上经过实际运行后,他发现游戏速度很慢而且耗费昂贵 —— 每次运行会花费 75 美元。在贝尔实验室退出这个项目以后。他为了让这个游戏能玩,所以找来 Dennis Ritchie 为这个游戏开发一个极其简单的操作系统。
当时 Ken 的老婆正好回娘家度假,就把里奇拉到了家里,两个好基友夜以继日的搞,工作之外的时间基本都搞在一起,终于在 1969 年的圣诞节搞出来了一个操作系统,也就是我们熟悉的 UNIX。
值得一提的是,当时他们本想在 DEC-10 上写,后来没有申请到,只好在实验室的墙角边找了一台被人遗弃的 Digital PDP-7 的迷你计算机进行他们的计划,这台计算机上连个操作系统都没有,于是他们用汇编语言仅一个月的时间就开发了一个操作系统的原型,他们的同事 Brian Kernighan 非常不喜欢这个系统,嘲笑他们说:“你写的系统好真差劲,干脆叫 Unics 算了。”Unics 的名字是他们对 MULTICS 的一种戏称,也是根据这个名字,里奇最后把系统的名字定为了 Unix。
于是,Unix 就在这样被游戏和玩笑创造了,当时是 1969 年 8 月。巧合的是,也就是这一年,Linux 之父 Linus Torvalds 在芬兰出生了。
之前 Multics 操作系统研发中的失败经验后,里奇将 UNIX 的设计原则定为 Keep it simple & stupid(大道至简)。
UNIX 的特点:
- Everything (including hardware) is a file
- Configuration data stored in text
- Small, single-purpose program
- Avoid captive user interfaces
- Ability to chain program together to perform complex tasks
- 所有的事物(甚至硬件本身)都是一个的文件。
- 以文本形式储存配置数据。
- 程序尽量朝向小而单一的目标设计
- 尽量避免令人困惑的用户接口
- 将几个程序连结起来,处理大而复杂的工作。
UNIX 的出现一改 Multics 操作系统的大型程序的复杂性,每个单一执行目的的小程序都是简洁高效,开发时间短,稳定性却更好。
UNIX 由许多小程序构成,每个小程序只能完成一个功能,任何复杂的操作都必须分解成一些基本步骤,再由小程序逐一完成。虽然看起来很低效,实际上这些小程序可以像七巧板一样自由组合,轻易就能完成意想不到的大任务。
后来,在此基础上又衍生了好几代的 UNIX 系统,直至目前的 Mac OS 和 Linux。
由于 UNIX 诸多优点,人们将它称为软件中的瑞士军刀。
顺手发明 C 语言
作为一门伟大的编程语言,C 语言是借助 UNIX 操作系统的翅膀而起飞的,UNIX 操作系统也由于 C 语言的存在而得以快速落地生根,两者相辅相成,成就了软件史上最精彩的一幕。而这一幕,离不开丹尼斯·里奇的一手操办。
最初的 UNIX 系统就是用汇编语言编写的,而当时的一些应用是由叫做 B 语言的解释型语言和汇编语言混合编写的,在移植的过程中遇到不少麻烦。一开始他们想尝试用 Fortran(福传,源自于“公式翻译”的缩写,是世界上第一个被正式采用并流传至今的高级编程语言。),可是失败了。后来他们用一个叫 BCPL(Basic Combined Programming Language)的语言开发,他们整合了 BCPL 形成 B 语言,后来里奇觉得 B 语言还是不能满足要求,在 UNIX 的移植方面依然不尽人意,此后又对 B 语言做了改进,C 语言这才正式诞生。
C 语言也贯彻了 UNIX 大道至简的原则,语法简洁,结构清晰。为此里奇还自己写了本教材《C 编程语言》,只有 100 页 ….
公众号后台回复:C,即可查看 PDF 版编程手册
他还是黑客之父 …
由于 C 语言和 Unix 系统 两项成就,里奇成为许多编程爱好者膜拜的对象。里奇在 1978 年出版的《C 程序设计语言》被程序员们称为「白皮书」,获得狂热拥戴。
然而,由于 C 语言的简洁和高效,也成为入侵他人电脑的利器之一。里奇因此被诸多电脑黑客尊为导师,虽然里奇本人并不认可这一说法。
这里还有一个小故事。
在 Unix 研发成功后不久,安装了这一程序的 PDP-11 被放在贝尔实验室供大家使用。有一天,大家发现两位创始人总是可以得到最高的权限轻松进入他们的帐户,在贝尔实验室这种高人云集的地方,这简直是太不能容忍的事情了。
于是,若干愤懑的同事仔细分析 Unix 代码,找到后门,修改后再重新编译整个 Unix 程序。当所有人都以为这个世界应该从此清静了的时候,却发现他们的帐户权限还是很容易泄露。
直到很多年后,肯和里奇才道出其中的原委,原来代码里确实存在后门,不过并不在 Unix 代码中,而是藏在编译 Unix 的编译器里。
知乎上有个问题“真正的黑客是什么样的?”,我认为在里奇面前,其他的黑客全都是弟弟,真正的黑客,是搞底层入侵,让你从根儿上防无可防 …
传奇谢幕
那个年代社交网络还很不发达,再加上里奇一直没有结婚,日常的生活也比较宅,所以从他在退休之后就一直没有太多的资料可考。就连他的准确去世时间,我们都不得而知。
维基百科上的说法是:2011 年 10 月 12 日,里奇于新泽西州伯克利·海茨镇的家中去世,享年 70 岁。去世的消息由他之前的同事罗勃·派克提供,但未指明具体的去世时间和原因。
不知道传奇人物的一生是不是充满了巧合。乔布斯老爷子的去世日期是 2011 年 10 月 5 日,两人相差不超一个星期。但人们对里奇的思念,远不及对乔布斯的铺天盖地。
原因不难理解:乔老爷子的影响力我们大部分人都能了解到,但大众对于里奇作出的贡献知之甚少。
也许你看到这,会感到一丝伤感,有人因此说他是史上最惨的图灵奖得主。但其实不必,他也许就觉得这样挺好。有些人天生不喜欢给周围的人添麻烦,他们充实的活在自己的世界。
在里奇去世后的每年,计算机爱好者们都会以特有的方式纪念这位编程语言的重要奠基人。许多网友的发帖中没有片言只字,仅仅留下一个分号“;”。
在 C 语言中,英文分号标志着一行指令语句的结束,网友们以此来悼念“C 语言之父”,美国著名计算机专家丹尼斯·里奇 (Dennis Ritchie) 所引领的时代悄然远去。
-END-
扫描下方二维码,关注社区官方公众号,后台回复关键字「C」,查看 PDF 版《C 编程语言手册》
部分内容素材来源于网络,如:
Wikipedia 词条:Dennis Ritchie
C 语言网:《记:丹尼斯·里奇 (Dennis Ritchie)》
Techorange:《改變世界的男人- C 語言之父 Dennis Ritchie 逝世;沒有他,就沒有 Linux、BSD、Mac OS》
知乎:《丹尼斯里奇是什么人?》
差评:《没他, 还玩个鸟手机, 上个鸟网, 而绝大多数人并不知道他 …》
书生剑客:《肯·汤普森、丹尼斯·里奇与 UNIX、C 语言》