专栏名称: SegmentFault思否
SegmentFault (www.sf.gg)开发者社区,是中国年轻开发者喜爱的极客社区,我们为开发者提供最纯粹的技术交流和分享平台。
目录
相关文章推荐
程序猿  ·  41岁DeepMind天才科学家去世:长期受 ... ·  23 小时前  
程序员的那些事  ·  印度把 DeepSeek ... ·  2 天前  
OSC开源社区  ·  升级到Svelte ... ·  4 天前  
程序猿  ·  “我真的受够了Ubuntu!” ·  2 天前  
程序员小灰  ·  DeepSeek做AI代写,彻底爆了! ·  4 天前  
51好读  ›  专栏  ›  SegmentFault思否

最惨图灵奖得主?C语言之父、开发UNIX系统,逝世的时间却没人知道...

SegmentFault思否  · 公众号  · 程序员  · 2019-08-30 11:45

正文


#思否编辑部出品#

部分内容素材由 思否社区用户 提供

文末赠书福利



在各种编程语言当中,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 & 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语言



作为一门伟大的编程语言,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的编译器里。







请到「今天看啥」查看全文