肯·汤普逊

肯尼斯·蓝·汤普逊（Kenneth Lane Thompson，1943年2月4日），小名肯·汤普逊（Ken Thompson），美国计算机科学学者和工程师。骇客文化圈子通常称他为“ken”。在贝尔实验室工作期间，汤普逊设计和实现了Unix操作系统。他创造了B语言——C语言的前身，而且他是Plan 9操作系统的创造者和开发者之一。2006年，汤普逊进入Google公司工作，与他人共同设计了Go语言。他与丹尼斯·里奇同为1983年图灵奖得主。

此外，肯·汤普逊还参与过正则表达式和UTF-8编码的设计，改进了文本编辑器QED (文本编辑器)，创造了ed编辑器。他曾制造过专门用于下国际象棋的电脑“Belle (机器)”，并建立了残局数据库。

## 生平

肯·汤普逊在美国的新奥尔良出生。有人曾问他如何学会了编程，他表示自己只是因为对逻辑着迷。

<image>

1960年，他就读加州大学柏克莱分校，主修电气工程，1966年取得了电子工程硕士学位。他的导师是美国数学家、计算机科学家埃尔温·伯利坎普。1966年，肯·汤普逊加入贝尔实验室。他参与了贝尔实验室与麻省理工学院以及通用电气公司联合开发的Multics系统项目。在开发Multics系统期间，汤普逊创造了Bon编程语言。与此同时，他又编写了一个名为“Space Travel”的游戏。后来贝尔实验室撤出了Multics计划。为了能够继续玩游戏，汤普逊只好找到一台老式PDP-7机器，重写了他的“Space Travel”游戏。

在把游戏移植好之后，汤普逊又着手把自己的工具扩充成完备的操作系统。他和丹尼斯·里奇带领一些贝尔实验室的成员在PDP-7上面进行开发工作，实现了文件系统、进程、设备文件、命令行解释器和一些小的工具程序等。1970年，在布莱恩·柯林汉的建议下，这个系统命名为“Unix”，与“Multics”名字相对应。在完成Unix系统开发的基本工作之后，汤普逊觉得Unix系统需要一个系统级的编程语言，于是创造了B语言。后来里奇在B语言的基础上创造了C语言。

在60年代，肯·汤普逊还参与了正则表达式的设计，开发了QED (文本编辑器)的相容分时系统版本，并在其中引入正则表达式支持。QED和后来由汤普逊编写的ed编辑器对正则表达式的流行做出了重要贡献。之后正则表达式普遍用于Unix的文本处理程序中。现在，几乎所有使用正则表达式的程序都用到了某种来自汤普逊的记号的变体。汤普逊还发明了Thompson构造法，该算法能够将正则表达式转化为非确定有限状态自动机以提高匹配效率。

<image>

进入70年代，肯·汤普逊和丹尼斯·里奇继续合作开发Unix操作系统。他们二人在Research Unix的开发方面非常有影响力，以至于道格拉斯·麦克罗伊后来写道，“你可以安心地在几乎所有的贡献后面都加上丹尼斯·里奇和肯·汤普逊的名字。”汤普逊在2011年的一次采访中说，Unix的第一个版本是他写的，之后里奇开始提倡这款系统，并且帮助进行开发：

Unix系统的开发也帮助了C语言的发展。肯·汤普逊后来补充道，C语言“随着Unix系统的一次重写而发展，就这样，它成为了系统程式设计的完美选择。”

在1975年，肯·汤普逊从贝尔实验室休假，并回到了他的母校加州大学伯克利分校。在那里，他帮助在PDP-11/70上面安装了Version 6 Unix系统。后来加州大学伯克利分校维护了自己的Unix版本，即柏克莱软件套件（BSD）。

肯·汤普逊和贝尔实验室的约瑟夫·康登共同制作了下棋机器Belle (机器)，汤普逊负责软件部分。汤普逊还编写了生成国际象棋残局走法的程序，即残局数据库。对于所有只剩4到6步的残局，只要程序从数据库中找到了棋谱那么就可以给出“完美”解法。后来他在国际象棋专家约翰·罗伊克罗夫特的帮助下发布了程序生成结果。

<image>

80年代之后，汤普逊和里奇继续修补Research Unix，在第8到第10版中采用了BSD的代码。在80年代中期，贝尔实验室开始计划用一套新的操作系统来取代Unix，即贝尔实验室九号计划。这个系统是一个利用Unix原理的新系统，计划将更广泛地用于所有主要设备中。汤普逊为计划的设计和实施发挥了重要作用。来自Research Unix的较新版本的一些程序，例如mk和也加入到Plan 9系统中。

汤普逊试验了早期版本的C++语言，但是后来拒绝使用C++，因为在不同版本之间经常发生不兼容的情况。汤普逊在2009年的一次采访中表达了对C++的负面评价，并说“C++做很多事情都是只达到一半的程度，而且它就是一个由各种互相冲突的想法组成的垃圾堆。”

1992年，汤普逊和罗勃·派克设计并实现了UTF-8编码方案，并将其用于Plan 9系统中。现在，UTF-8编码已经成为互联网的主要字符编码，在所有网页中，使用UTF-8编码的网页占了一半以上。1996年，肯·汤普逊继续和丹尼斯·里奇合作，开始从事Inferno操作系统的开发。

2000年下半年，汤普逊离开贝尔实验室，进入美国的Entrisphere公司工作。2006年辞职并加入Google公司。之后他与罗勃·派克和罗伯特·格瑞史莫（Robert Griesemer）二人共同设计了Go语言。在讲述自己的开发过程时，他说他们三人都是从零开始的。出于对C++的厌恶，三个人共同讨论了语言的每一项特性，所以Go语言最终没有任何“无用的垃圾”。

在2009年的一次采访中，汤普逊表示自己正在使用基于Linux的操作系统。

## 荣誉和获奖情况

1980年，汤普逊当选美国国家工程院院士，因为“设计了Unix操作系统，它的效率、广度、力量和风格指导了一代在小型计算机进行开发的人。”

1983年，因“发展了通用操作系统的理论，特别是实现了Unix操作系统”，汤普逊和里奇共同获得了图灵奖。他的演讲以《Reflections on Trusting Trust》（反思对信任的信任）为题。文中提到的向编译器植入的后门后来被人们称为“Thompson hack”，对计算机安全领域产生了重要影响。因为在Unix系统和C语言方面做出的贡献，他们二人在1990年共同获得了IEEE汉明奖，在1997年获得了计算机历史博物馆研究员奖，又在1999年4月27日获得了由美国总统比尔·克林顿颁发的美国国家技术与创新奖章。

1999年，电气电子工程师学会向汤普逊颁发了第一个金井务奖。2011年，汤普逊和里奇二人又共同获得了日本国际奖。

## 外部链接

- 《Reflections on Trusting Trust》，肯·汤普逊的图灵奖演讲
- 《Unix and Beyond: An Interview with Ken Thompson》
- 电脑下棋：照片、视频采访：由计算机历史博物馆提供
- 由肯·汤普逊写的关于国际象棋的论文

## 基本资料

- 日语原文：肯尼斯·蓝·汤普逊
- 原文名：Kenneth Lane Thompson
- 出生日期：1943年2月4日
- 出生地：美国路易斯安那州新奥尔良
- 国籍：美国
- 研究领域：计算机科学
- 机构：贝尔实验室、Entrisphere公司、Google公司
- 母校：加州大学柏克莱分校（1965年取得理学学士，1966年取得理学硕士）
- 知名于：Unix、B语言、Belle (机器)、UTF-8、国际象棋的残局数据库、Go语言
- 获奖：IEEE皮奥尔奖（1982）、图灵奖（1983）、IEEE理察·卫斯里·汉明奖章（1990）、计算机先驱奖（1994）、计算机历史博物馆研究员奖（1997）、美国国家技术与创新奖章（1998）、金井务奖（Tsutomu Kanai Award）（1999）、日本国际奖（2011）