#思否编辑部出品#
部分内容素材由
思否社区用户
提供
文末赠书福利
在各种编程语言当中,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将胎死腹中”
。
在里奇去世之后,计算机历史学家保罗·茨露吉评价说:“里奇的名字并不容易让人察觉,也不为人熟知,但是……
假如有一个能够把计算机放大的显微镜,你会看到里面到处都是他的贡献。
”
上世纪六十年代时,大部份计算机都是采用批处理的方式
(也就是说,当作业积累一定数量的时候,计算机才会进行处理)
。为了解决这个问题,美国电话及电报公司(AT&T)、通用电器公司(GE)及麻省理工学院(MIT)计划合作开发一个多用途、分时及多用户的操作系统,命名为 MULTICS,这也是里奇在加入贝尔实验室后,参与的第一个项目。
不过,
这个项目由于太过复杂,整个目标过于庞大,进展速度非常慢,几年下来都没有任何成果,而且性能都很低。
于是在1969年的2月,贝尔实验室决定退出这个项目。
可能是对工作中第一个项目的执念,里奇
一直对此耿耿于怀,试图解决这一难题。
贝尔实验室中的有个叫 Ken Thompson 的人,他曾经为 MULTICS 这个操作系统写了个叫「Space Travel」的游戏,在 MULTICS 上经过实际运行后,他发现游戏速度很慢而且耗费昂贵 —— 每次运行会花费75美元。
在贝尔实验室
退出这个项目以后。
他为了让这个游戏能玩,所以找来 Dennis Ritchie 为这个游戏开发一个极其简单的操作系统。
Ken & Ritchie
当时 Ken 的老婆正好回娘家度假,就把里奇拉到了家里,两个好基友夜以继日的搞,工作之外的时间基本都搞在一起,终于在 1969年的圣诞节搞出来了一个操作系统,也就是我们熟悉的 UNIX。
值得一提的是,当时他们本想在 DEC-10 上写,后来没有申请到,只好在实验室的墙角边找了一台被人遗弃的 Digital PDP-7 的迷你计算机进行他们的计划,这台计算机上连个操作系统都没有,于是他们用汇编语言仅一个月的时间就开发了一个操作系统的原型,他们的同事 Brian Kernighan 非常不喜欢这个系统,嘲笑他们说:
“你写的系统好真差劲,干脆叫Unics算了。
”Unics 的名字是他们对 MULTICS 的一种戏称,也是根据这个名字,里奇最后把系统的名字定为了 Unix。
于是,Unix 就在这样被游戏和玩笑创造了,当时是1969年8月。巧合的是,也就是这一年,Linux 之父 Linus Torvalds 在芬兰出生了。
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 语言是借助 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的编译器里。