Python之父:我與Python(CWI部分)
本系列文章譯自Python之父 Guido van Rossum 的系列部落格“The History of Python”。這個部落格系列對我們理解Python及其演變很有幫助,經Guido同意,在這裡翻譯推薦給大家,希望大家喜歡,也請大家多多指教!
1. 開發Python的背景
Python 最初開發於荷蘭阿姆斯特丹的一所研究機構,即 CWI,這是一個荷蘭語縮寫,意思是數學和電腦科學研究學會。CWI 是個很有意思的地方,裡面主要做數學與計算機方面的學術研究,因此總是有很多博士生來來往往,一些老前輩可能還記得它最初的名字是數學研究中心——不過,最為人知的還是在這裡誕生了 Algol 68 程式語言。(譯註:現在則以 Python 的誕生地而聞名)
1982年下半年我到 CWI 上班,那時才剛畢業,一開始是在 Lambert Meertens 和 Steven Pemberton 領導下的 ABC 語言組做程式設計師。4、5年後,ABC 語言專案因為不太成功被停掉了,我到了 Sape Mullender 領導的 Amoeba 組,Amoeba 專案做的是基於微核心的分散式系統,由 CWI 和阿姆斯特丹自由大學聯合研究。1991年,Sape Mullender 去了特溫特大學,我也轉到新成立的多媒體組,當時由 Dick Bulterman 負責。
Python 是我在 CWI 工作經驗的直接產物。ABC 語言提供了靈感,Amoeba 專案提供了動機,而多媒體組則促使其發展。不過,就我所知,CWI 官方並沒有為 Python 的開發提供專用資金——事實上,Python 反而成了 Amoeba 專案和多媒體組所用的一種重要工具。
當時之所以開發 Python,是我感覺 Amoeba 專案需要一門高階程式語言。用 C 語言寫系統管理程式太慢,而且因為各種各樣的原因,很多程式在 Bourne shell (譯註:Version 7 Unix預設的Unix shell)裡無法執行。更關鍵的是,作為一種全新設計的分散式微核心系統,Amoeba 的很多基本操作(元操作 | primitive operations)與 Bourne shell 支援的操作有很大區別(粒度更細)。因此需要一門語言來作為“C語言與shell之間的橋樑”——很長一段時間內,大家也是這麼看待 Python 的。
你可能會問,為什麼不用一門現有程式語言呢?就我看來,當時並沒有什麼適合的語言可供選擇。Perl 3 我也熟悉,不過它對 Unix 系統的依賴甚至比 Bourne shell 更嚴重,而且我也不喜歡 Perl 的語法——個人對程式語言的偏好,主要受 Algol 60、Pascal、Algol 68的影響(都是我最初接觸的語言),當然也包括 ABC 語言,畢竟我在這裡花費了整整4年青春。因此,我決定自己設計一門語言,借鑑 ABC 語言的所有優點,但解決其各種問題(至少是我認為的問題)。
2. Python這個名字的由來
第一個要解決的問題就是這門語言的名字!當初,ABC 語言團隊在取名的時候就比較糾結,最初的名字叫 B 語言,不過因為已經有一門大家更熟悉的 B 語言了,於是不得不放棄。不過 B 語言也只是個暫定名稱(當時的說法是,B 是一個包含語言名稱的變數的名稱,於是乾脆以 B 作為語言名稱)。ABC 語言團隊還組織了一場公開的取名比賽,不過提交的名稱中沒有中意的,最後還是使用了內部備用名稱,也就是 ABC,意思是這門語言要讓程式設計就像“ABC”一樣簡單——然而我從沒這麼覺得。
我想,關於語言的名字,與其複雜化,不如簡單化。於是就用了我想到的第一個詞: Monty Python’s Flying Circus ,一個我最喜歡的滑稽劇團的名字。以一個滑稽劇團的名字命名一個“高階大氣”的實驗室專案,有一種恰到好處的諷刺意味。而 Python 這個詞好記且刺激(蟒蛇),又與用著名人物的名字命名程式語言的傳統相符,比如 Pascal、Ada、Eiffel——Monty Python 的馬戲團可能並不以促進科技發展聞名,但極客們肯定是超喜歡他們的。並且,這樣的命名方式,也與當時 Amoeba 專案中以電視節目的名稱命名程式的習慣一致。
多年以來,我一直拒絕大家將這門語言與蛇聯絡在一起。不過,當 O’Reilly 出版社要在他們出版的第一本 Python 書(Python程式設計 | Programming Python)的封面上放一張蛇的照片的時候,我最終還是同意了。 使用動物照片作為書籍封面是 O’Reilly 出版社的傳統,既然一定要用一種動物,也只能是蛇了。
3. Python的早期歷史
名字的問題解決後,我在1989年12月末開始開發 Python,並在1990年1月有了第一個可用版本。雖然沒有當時的記錄,我還是非常記得我為 Python 寫的第一個實現是一個簡單的 LL(1) 分析器生成器,我把它叫做“pgen”。這個分析器生成器至今依然是 Python 原始碼的一部分,可能也是所有原始碼中改動最少的部分。在1990年,一些CWI 內部人員使用了最初版本的 Python ,主要是 Amoeba 專案的人。除我之外,當時和我一個辦公室的同事,程式設計師 Sjoerd Mullender(Sape Mullender的弟弟) 和 Jack Jansen(在我離開 CWI 以後,他依然為 Python 開發蘋果系統介面很多年) 也是 Python 的主要開發者。
1991年2月20日,我在 alt.sources 新聞組釋出了 Python,這就是 0.9.0 版本。釋出時採用的協議基本與當時 X11 專案所用的 MIT 協議一字不差,並把 CWI 的前身,數學研究中心作為責任機構。因此可以說,與我的絕大多數其它作品一樣,Python 遠在 Eric Raymond 和 Bruce Perens 於1997年提出“開源”這個概念以前就已經開源了。
0.9.0 版本的釋出,立即得到了很多反饋,於是在隨後幾年中,我一直穩定地進行版本更新。同時也開始用 CVS 進行版本管理,一方面也便於與 Sjoerd 和 Jack 協作開發(巧合的是,CVS 起源於 Dick Grune 的幾個 shell 指令碼,而 Dick Grune 也是 ABC 語言團隊的早期成員之一)。我寫了一個 FAQ ,貼在一些新聞組中,正如之後大家把 FAQ 貼在 web 上一樣。另外還發起了一個郵件列表。1993年3月,有了 comp.lang.python 新聞組,不過我並沒有直接參與這個新聞組的建立。這個郵件列表和新聞組之後通過一個雙向介面整合了。現在,這個雙向介面已經成為 GUN Mailman 的一個特性,Mailman 是現在主流的開源郵件列表管理軟體,本身也是用 Python 寫的。
1994年夏天,有人在 comp.lang.python 新聞組裡發了一個“如果吉多(譯註:作者名字)被車撞了怎麼辦?”的帖子,討論快速發展的 Python 社群與我的個人影響的獨立性。不過,隨著 Michael McLay 邀請我去 NIST 做訪問學者,這個討論也就終結了。NIST 是美國國家標準技術研究所,前身是位於馬里蘭州蓋瑟斯堡的美國國家標準局。當時他們有幾個相關專案想使用 Python,邀請我去,主要是為了幫助他們提高 Python 技巧,如果可能的話,也根據他們的需求改進 Python。
1994年11月,由於 NIST 程式設計師 Ken Manheimer 的支援與鼓勵,我在 NIST 舉行了第一次 Python 研討會。當年參加研討會的20個人中,大約有一半依然活躍在 Python 社群,或者領導著他們自己的開源專案(Jim Fulton 的 Zope 專案和 Barry Warsaw 的 GNU Mailman 專案)。也因為 NIST 的支援,我參加了聖達非的 USENIX 小語言大會(譯註:USENIX,高等計算機系統協會),並在會上對大約400人作了一次演講。大會組織者是 Tom Christiansen,一位思想開放的 Perl 支持者,他還把我介紹給 Perl 創始人 Larry Wall 和 Tcl/Tk 的作者 John Ousterhout。
下一篇:我在美國的工作……
個人公眾號: 讀書錄
