6

clipboard.png

在各种编程语言当中,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 为这个游戏开发一个极其简单的操作系统。

clipboard.png

当时 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语言》

图片描述


思否编辑部
4.3k 声望117k 粉丝

思否编辑部官方账号,欢迎私信投稿、提供线索、沟通反馈。