肯·湯普遜

肯尼斯·藍·湯普遜（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）