肯尼斯·蓝·汤普逊 (英語:Kenneth Lane Thompson ,1943年2月4日— ),小名肯·汤普逊 (英語:Ken Thompson ),美国计算机科学 学者和工程师。駭客文化 圈子通常称他为“ken”[ 1] 。在贝尔实验室 工作期间,汤普逊设计和实现了Unix 操作系统。他创造了B语言 ——C语言 的前身,而且他是Plan 9 操作系统的创造者和开发者之一。2006年,汤普逊进入Google 公司工作,与他人共同设计了Go语言 。他與丹尼斯·里奇 同為1983年圖靈獎 得主。
此外,肯·汤普逊还参与过正则表达式 和UTF-8 编码的设计,改进了文本编辑器QED ,创造了ed 编辑器。他曾制造过专门用于下国际象棋 的电脑“Belle ”,并建立了残局数据库 。
生平
肯·汤普逊在美国的新奥尔良 出生。有人曾问他如何学会了编程,他表示自己只是因为对逻辑着迷。[ 2]
DEC PDP-7 ,Unix 系统最初在它上面运行。
1960年,他就讀加州大學柏克萊分校 ,主修電氣工程,1966年取得了電子工程碩士學位[ 3] 。他的导师是美國数学家、计算机科学家埃尔温·伯利坎普 。1966年,肯·汤普逊加入贝尔实验室 [ 4] 。他參與了貝爾實驗室與麻省理工學院 以及通用電氣公司 聯合開發的Multics 系统項目。在开发Multics系统期间,汤普逊创造了Bon 编程语言[ 5] 。与此同时,他又编写了一个名为“Space Travel ”的游戏。后来貝爾實驗室撤出了Multics計劃。为了能够继续玩游戏,汤普逊只好找到一台老式PDP-7 機器,重寫了他的「Space Travel」遊戲[ 6] 。
在把游戏移植好之后,汤普逊又着手把自己的工具扩充成完备的操作系统。他和丹尼斯·里奇 带领一些贝尔实验室的成员在PDP-7 上面进行开发工作,实现了文件系统 、进程 、设备文件 、命令行解释器 和一些小的工具程序等。1970年,在布萊恩·柯林漢 的建议下,这个系统命名为“Unix”,与“Multics”名字相对应[ 7] 。在完成Unix系统开发的基本工作之后,汤普逊觉得Unix系统需要一个系统级的编程语言,于是创造了B语言 。后来里奇在B语言的基础上创造了C语言 [ 8] 。
在60年代,肯·汤普逊还参与了正则表达式 的设计,开发了QED 的相容分時系統 版本,并在其中引入正则表达式支持。QED和后来由汤普逊编写的ed编辑器 对正则表达式的流行做出了重要贡献。之后正则表达式普遍用于Unix的文本处理程序中。现在,几乎所有使用正则表达式的程序都用到了某种来自汤普逊的记号的变体。汤普逊还发明了Thompson构造法 ,该算法能够将正则表达式转化为非确定有限状态自动机 以提高匹配效率[ 9] 。
在SIMH PDP-11 模拟器上运行Version 6 Unix ,其中能够看到“/usr/ken”这个文件。
进入70年代,肯·汤普逊和丹尼斯·里奇继续合作开发Unix操作系统。他们二人在Research Unix 的开发方面非常有影响力,以至于道格拉斯·麥克羅伊 后来写道,“你可以安心地在幾乎所有的貢獻後面都加上丹尼斯·里奇和肯·湯普遜的名字。”[ 10] 汤普逊在2011年的一次采访中说,Unix的第一个版本是他写的,之后里奇开始提倡这款系统,并且帮助进行开发[ 11] :
“
前两三个版本的Unix系统都是我自己写的,然后丹尼斯成为了布道者。接下来我们用一个称为“C ”的高级语言来重写这个系统。他的大部分工作都在C语言和I/O 系统上面,而其他部分的工作都是我做的。所有的工作都是在PDP-11 机器上完成的。这台机器是侥幸找到的,因为那台机器本来是用于搞学术的。[ 11]
”
Unix系统的开发也帮助了C语言的发展。肯·汤普逊后来补充道,C语言“随着Unix系统的一次重写而发展,就这样,它成为了系統程式設計 的完美选择。”[ 11]
在1975年,肯·汤普逊从贝尔实验室休假,并回到了他的母校加州大学伯克利分校。在那里,他帮助在PDP-11/70 上面安装了Version 6 Unix 系统。后来加州大学伯克利分校维护了自己的Unix版本,即柏克萊軟體套件 (BSD)。[ 12]
肯·汤普逊和贝尔实验室的约瑟夫·康登 共同制作了下棋机器Belle ,汤普逊负责软件部分[ 13] 。汤普逊还编写了生成国际象棋 残局走法的程序,即残局数据库 。对于所有只剩4到6步的残局,只要程序从数据库中找到了棋谱那么就可以给出“完美”解法。后来他在国际象棋专家约翰·罗伊克罗夫特 的帮助下发布了程序生成结果。
貝爾實驗室九號計畫 ,正在运行acme 编辑器和rc 解释器。
80年代之后,汤普逊和里奇继续修补Research Unix,在第8到第10版中采用了BSD的代码。在80年代中期,贝尔实验室开始计划用一套新的操作系统来取代Unix,即貝爾實驗室九號計畫 。这个系统是一个利用Unix原理的新系统,计划将更广泛地用于所有主要设备中。汤普逊为计划的设计和实施发挥了重要作用。来自Research Unix的较新版本的一些程序,例如mk 和rc 也加入到Plan 9系统中。
汤普逊试验了早期版本的C++ 语言,但是后来拒绝使用C++,因为在不同版本之间经常发生不兼容的情况。汤普逊在2009年的一次采访中表达了对C++的负面评价,并说“C++做很多事情都是只达到一半的程度,而且它就是一个由各种互相冲突的想法组成的垃圾堆。”[ 14]
1992年,汤普逊和羅勃·派克 设计并实现了UTF-8 编码方案,并将其用于Plan 9 系统中[ 15] 。现在,UTF-8编码已经成为互联网的主要字符编码,在所有网页中,使用UTF-8编码的网页占了一半以上[ 16] 。1996年,肯·汤普逊继续和丹尼斯·里奇合作,开始从事Inferno 操作系统的开发[ 17] 。
2000年下半年,汤普逊离开贝尔实验室,进入美国的Entrisphere公司工作。2006年辞职并加入Google 公司。之后他与羅勃·派克 和羅伯特·格瑞史莫(Robert Griesemer)二人共同设计了Go语言 。在讲述自己的开发过程时,他说他们三人都是从零开始的。出于对C++的厌恶,三个人共同讨论了语言的每一项特性,所以Go语言最终没有任何“无用的垃圾”[ 11] 。
在2009年的一次采访中,汤普逊表示自己正在使用基于Linux 的操作系统。[ 18]
荣誉和获奖情况
1980年,汤普逊当选美国国家工程院 院士,因为“设计了Unix操作系统,它的效率、广度、力量和风格指导了一代在小型计算机 进行开发的人。”[ 19]
1983年,因“发展了通用操作系统的理论,特别是实现了Unix操作系统”,汤普逊和里奇共同获得了图灵奖 。他的演讲以《Reflections on Trusting Trust》(反思对信任的信任)为题[ 20] 。文中提到的向编译器 植入的后门 后来被人们称为“Thompson hack”,对计算机安全 领域产生了重要影响[ 20] 。因为在Unix系统和C语言方面做出的贡献,他们二人在1990年共同获得了IEEE汉明奖 [ 21] ,在1997年获得了计算机历史博物馆 研究员奖[ 22] ,又在1999年4月27日获得了由美国总统比尔·克林顿 颁发的美國國家技術與創新獎章 。
1999年,电气电子工程师学会 向汤普逊颁发了第一个金井务奖 [ 23] 。2011年,汤普逊和里奇二人又共同获得了日本国际奖 [ 24] 。
参见
参考文献
^ ken . The Jargon File (version 4.4.7). [2016-10-31 ] . (原始内容存档 于2011-06-24).
^ Seibel, Peter. Coders At Work . 2009: 450 .
^ Thesis Students . Elwyn Berlekamp's Home Page. University of California, Berkeley Department of Mathematics. [2016-10-31 ] . (原始内容存档 于2021-03-15).
^ Ken Thompson: developed UNIX at Bell Labs . [2016-10-31 ] . (原始内容 存档于2011-10-10).
^ Ritchie, Dennis. The Development of the C Language . Bell Labs . [2016-10-31 ] . (原始内容存档 于2017-04-03).
^ Ritchie, Dennis M. Space Travel: Exploring the solar system and the PDP-7 . Bell Labs . 2001 [2016-02-04 ] . (原始内容 存档于2015-12-26).
^ Ritchie, Dennis M. The Evolution of the Unix Time-sharing System . [2016-10-31 ] . (原始内容存档 于2015-06-11).
^ Dennis M. Ritchie. The Development of the C Language . Bell Labs/Lucent Technologies. [2016-10-31 ] . (原始内容存档 于2017-04-03).
^ Cox, Russ. Regular Expression Matching Can Be Simple And Fast . [2016-10-30 ] . (原始内容存档 于2010-01-01).
^ McIlroy, M. D. A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF) (技术报告). CSTR. Bell Labs. 1987 [2016-10-31 ] . 139. (原始内容存档 (PDF) 于2017-11-11).
^ 11.0 11.1 11.2 11.3 Dr. Dobb's: Interview with Ken Thompson . 2011-05-18 [2014-11-10 ] . (原始内容存档 于2014-03-13).
^ Salus, Peter H. Chapter 7. BSD and the CSRG. The Daemon, the Gnu and the Penguin . Groklaw. 2005 [2016-10-31 ] . (原始内容存档 于2020-06-14).
^ Joe Condon (obituary) . Physics Today. [2015-11-05 ] . (原始内容存档 于2016-10-18).
^ Seibel, Peter. Coders At Work . 2009: 475 .
^ Pike, Rob. UTF-8 history . 2003-04-30 [2016-10-31 ] . (原始内容存档 于2011-03-01).
^ Davis, Mark. Unicode nearing 50% of the web . Official Google Blog. Google . 2010-01-28 [2010-12-05 ] . (原始内容存档 于2016-06-16).
^ Khamlichi, M.el. Ken Thompson UNIX systems father . Unixmen. [2016-10-31 ] . (原始内容存档 于2020-12-10).
^ Seibel, Peter. Coders At Work . 2009: 479 .
^ Dr. Ken Thompson . National Academy of Engineering. [2016-10-31 ] . (原始内容存档 于2010-11-01).
^ 20.0 20.1 Thompson, Ken. Reflections on trusting trust. Communications of the ACM . 1984, 27 (8): 761–763. doi:10.1145/358198.358210 .
^ IEEE Richard W. Hamming Medal Recipients (PDF) . IEEE . [2011-05-29 ] . (原始内容 (PDF) 存档于2011年7月26日).
^ Ken Thompson . Computer History Museum. [2016-10-29 ] . (原始内容存档 于2019-07-03).
^ Ken Thompson Receives Kanai Award for Impact of Unix System . Bell Labs. 1999-03-25. (原始内容 存档于2013-03-26).
^ Evangelista, Benny. Ken Thompson, Dennis Ritchie win Japan Prize . The San Francisco Chronicle. 2011-01-25 [2016-10-31 ] . (原始内容存档 于2021-04-30).
外部链接
1960年代 1970年代 1980年代 1990年代 2000年代 2010年代 2020年代
1980年代 1990年代 2000年代 2010年代 2020年代