ケン・トンプソン

ケネス・レイン・トンプソン（Kenneth Lane Thompson、1943年2月4日 - ）はコンピュータサイエンティストのパイオニアでアメリカ人。ハッカー仲間からはケン・トンプソン (Ken Thompson) と呼ばれている。長年ベル研究所に勤め、オリジナルのUnixを開発した。またC言語の前身であるB言語を開発し、Plan 9の初期の開発者の1人だった。2006年からGoogleで勤務しており、Goを共同開発した。 他の主な業績として、正規表現、テキストエディタQEDとed、UTF-8コードの定義に加え、チェスの終盤定跡データベースやチェスマシンBelleの開発などコンピュータチェスへの貢献がある。1983年に彼の長年の同僚であるデニス・リッチーと共にチューリング賞を受賞した。 アメリカ合衆国のルイジアナ州ニューオーリンズで生まれる。15人の有名プログラマのインタビューをまとめた Coders at Work で、インタビュアーの Peter Seibel から「どうやってプログラムを学んだのですか?」と質問され、「私はいつも論理に魅了されていて、小学生のころ既に二進法などの算数問題を解いていた。それは単に私が魅了されていたからだ」と答えた。 カリフォルニア大学バークレー校で電子工学および計算機科学の学士号 (1965) と修士号 (1966) を取得。修士課程の指導教官はエルウィン・バーレカンプ。 大学卒業後の1966年にAT&Tのベル研究所へ就職。1960年代当時、ベル研ではトンプソンとデニス・リッチーがMulticsシステムの計画に参加していた。トンプソンはMulticsの開発中にプログラミング言語のBonを開発した。またスペース・トラベルというビデオゲームも開発した。その後ベル研はMulticsから撤退。ゲームを遊び続けるため、トンプソンは古いPDP-7を発掘してスペース・トラベルを作り直した。このときトンプソンが開発したツールがUnixになった。PDP-7を使い、トンプソンとリッチーが主導するベル研のチームは、ラッド・カナディと共に、階層型ファイルシステム、プロセス、デバイスファイルの概念を発明し、コマンドライン、プロセス間通信を容易にするパイプ、複数の小さなユーティリティプログラムを開発した。 1970年にブライアン・カーニハンの提案で、MulticsからのダジャレであるUnixという名前になった。初期のUnixが完成すると、トンプソンはシステム開発向けの言語が必要だと考えるようになり、B言語を開発し、それを元にしてリッチーがC言語を開発した。 1960年代に正規表現を開発。CTSS上で動作するテキストエディタのQEDを開発し、文字列の検索に正規表現を使うことができた。QEDと、後に開発したUnixの標準エディタedは正規表現の普及に大きく貢献した。以降に開発されたほぼ全ての正規表現プログラムはトンプソンの表記法がベースとなっている。以前は理論言語学者など限られた間での専門的な記法であった正規表現（日本ではそういった専門分野では正則表現と訳すことがある）は、コンピュータのユーザに身近な頻用されるものとなった。またマッチングを高速化するため、正規表現を非決定性有限オートマトンに変換する「トンプソンの構築アルゴリズム」を発明した。 トンプソンとリッチーは1970年代の間ずっとUnixを共同で開発していた。2人はResearch Unixの研究チームで精力的に活動しており、ダグラス・マキルロイは「ほとんど全てのコードにリッチーとトンプソンの名前が残されていると考えて間違いない」と後に書いている。トンプソンは2011年のインタビューで、Unixの初期バージョンは自分が開発したものであり、後にリッチーが応援を始め、開発を手伝ったと話している。 最初のバージョン3くらいまではUNIXを1人で作りました。デニスがエバンジェリストになりました。それからC言語の元になった高級言語で書き直しました。彼は主に言語とI/Oシステムを担当し、私はOSのそれ以外の部分を全部担当しました。PDP-11用でしたが、これは偶然にも大学で広く普及したコンピュータでした。 トンプソンはUnixの開発にC言語を使うことで言語の熟成に貢献した。C言語はOSを書き直す最中で育ち、OSを書くのに最適な言語になったと後にトンプソンは語った。 1975年にトンプソンはベル研を休職し、母校のカリフォルニア大学バークレー校に登校し、Unixバージョン6をPDP-11/70にインストールする作業を手伝った。バークレー校のUnixは後にバークレーソフトウェアディストリビューション（BSD）として知られる独自のOSとしてメンテナンスされるようになった。 1976年の初めにトンプソンはカリフォルニア大学バークレー校電気工学部コンピューターサイエンス学科でバークレー・パスカルの初期バージョンを開発した（同年後半にビル・ジョイ、チャールズ・ヘイリー、ファカルティアドバイザーのスーザン・グラハムが大幅な改良を加えた)。 1971年にUnixでchessという名前のチェスのプログラムを開発。後にジョセフ・コンドンと共に専用のハードウェアアクセラレーターを搭載したBelleを開発し、コンピュータチェスの世界チャンピオンとなった。また4、5、6駒の終盤の局面全てで、完全な定跡パターンを列挙するプログラムを作成した。これによりプログラムは、一度終盤の定跡に到達すれば、以降は完璧なゲームを進めることができた。終盤の定跡に詳しいチェスの専門家であるジョン・ロイクロフトが後に協力し、終盤定跡データベースをCD-ROM化して配布した。2001年にICGA Journalはケン・トンプソンのコンピューターチェスへの様々な貢献を表彰した。 1983年にトンプソンとリッチーは、「汎用的なオペレーティングシステム理論の開発、特にUNIXオペレーティングシステムの実装に対して」チューリング賞を共同受賞した。授賞式でのスピーチで話した「Reflections on Trusting Trust(信用を信頼することについての考察)」は、現在はトンプソンハックやTrusting Trust攻撃として知られており、これ自体がセキュリティに関する重要な研究成果と認められている。 トンプソンとリッチーは1980年代を通じてResearch Unixのアップデートを続け、バージョン8、バージョン9、バージョン10でBSDコードベースを採用した。1980年代中頃に、Unixの設計思想を受け継ぎながらも全面的に作り変えられた後継OSであるPlan 9の開発がベル研で始まった。mkやrcなど、後のResearch Unixに組み込まれた一部のプログラムも、Plan 9で開発された。 トンプソンはビャーネ・ストロヴストルップが開発したC++の初期バージョンを試験的に使ったが、バージョンアップの度に互換性が失われたため使用を断念した。2009年のインタビューでトンプソンはC ++を批判し、「色々なことが中途半端で、それは多くのことを半分うまくやっており、排他的なアイデアのゴミの山だ」と話した。 1992年にロブ・パイクと共同で文字コードのUTF-8を開発。UTF-8はインターネットで広く普及し、2019年には全Webページの90％以上を占めている。 1990年代にポータブルなバーチャルマシンをベースにした研究用オペレーティングシステムであるInfernoの開発を開始。トンプソンとリッチーはベル研の他の研究者と共同でInfernoのコラボレーションを続けた。 2000年後半にベル研を退職。彼は2006年までEntrisphere, Inc.でフェローとして働き、その後Googleで名誉エンジニアとして所属。最近の業績にはプログラミング言語Goの共同設計などがある。自分を含むGoの開発者たちについて次のように述べている。 私たち3人(トンプソン、ロブ・パイク、ロバート・グリシーマー）は純粋な研究として開発を始めました。3人が集まり、C++が嫌いだということで意気投合しました(笑)。(…Goに話を戻すと)、3人とも言語の全ての機能について説明が求められるという考えでスタートしましたので、いかなる理由があっても言語にゴミを入れませんでした。 2009年のインタビューによると、トンプソンは現在Linuxベースのオペレーティングシステムを使用している。 ケン・トンプソンは既婚者で息子が1人いる。