深度剖析Python歷史誕生問題
Guido van Rossum 是Python語言的作者,Python 是一門解釋性的、是一種面向對象、直譯式計算機程序設計語言,也是一種功能強大而完善的通用型語言,已經具有十多年的發展Python歷史了。
他工作的地方被叫做 Centrum voor Wiskunde en Informatica (CWI).從那時開始,Python 在開發者當中日益流行起來,這歸功于 Python 簡明清晰的語法和開發效率高的名聲。這次訪談會分為幾個部分,每周都會發布其中一篇.Van Rossum 會對下列議題給出他的真知灼見:Python 的設計目標,Python 程序員的工作效率來自何處。
弱類型意味著什么,等等.在第一篇中,Van Rossum Python 將對 Python 的歷史,受到的主要影響,及其設計目標娓娓道來.Bill Venners: 如果開發者從沒用過 Python,那你會怎么向他們描述這門語言呢?Guido van Rossum: 從一個方面說,你可以說 Python 是一個非常高階的語言。
而從另一個方面來看,你可以說它是一個非常高階的語言,它實現的方式正好讓它非常注重可交互性.Python 和腳本語言之間有著很多共同點,但是和更傳統的編程語言也有頗多共通之處.
ABC 對 Python 的影響Bill Venners: 您能簡要介紹一下 Python 的歷史么?Guido van Rossum: 在 1980 年代末,我在 Centrum voor Wiskunde en Informatica (CWI) 的一個小組里面做開發工作。
這個小組的任務是設計實現一門叫 ABC 的語言.我不清楚人們對 ABC 對Python歷史的影響有多少了解.我之所以會提及 ABC 的影響,是因為我在從事這個項目的時候,所獲良多,而且從共事的同事身上也學到了很多東西,我對他們非常感激。
ABC 的設計動機非常明確.ABC 希望成為一門編程語言,這門語言是為非計算機程序員或軟件開發者的那種比較聰明的計算機用戶而設計的。在 1970 年代末,ABC 的主設計師曾向這種用戶教授一些傳統的編程語言.他們的學生有各個學科的科學家:從物理學家、社會學家到語言學家。
為了使用超大型計算機,這些科學家需要幫忙.雖然這些人在自己的領域可算出類拔萃,他們還是對傳統語言所有的各種局限感到詫異和不適應.根據用戶的這個反饋,ABC 的設計者試圖去開發一門新的語言.
另一個讓 ABC 的設計者覺得失望的原因是 Basic.那時,Basic 是一門非常蹩腳的語言.雖然 Basic 也是為那種非程序員的計算機用戶而設計的。但是它設計的著眼點是完全不同的。
在那時,市面上所有的 Basic 版本都非常難用.幾乎所有好玩的 Basic 程序都遍布著底層的奇技淫巧,比如說,如果要把屏幕背景色變成黃色的話,就需要修改內存的第 714 字節。Bill Venners: 這個我也有印象.您是什么時候搞 ABC 的?Guido van Rossum: ABC 的作者在 70年代晚期和 80年代初期,開始這門語言的設計工作。
我于 1983 年加入這個小組.我想我們一直干到了 1986 年還是 1987 年.因為種種原因,ABC 項目并沒有獲得很大的成功.或許那時太早了,那個時候還沒有因特網可做大規模的推廣.
Python歷史的誕生
Guido van Rossum: 1986 年,我轉向了 CWI 的另一個叫 Amoeba (阿米巴蟲) 的項目.Amoeba 是一個分布式操作系統。直到 1980年代末,我們意識到需要一個腳本語言.在那個項目中,我享有很大的自由度,所以我啟動了一個迷你項目,這個小項目是服務于當時的我們手頭的 Amoeba 項目的。
那時,我對在 ABC 上獲得的經驗教訓記憶猶新.我決定,想辦法設計一門簡單的腳本語言,它將擁有 ABC 的優點,但卻沒有他的缺點.所以,我挽起袖子開始打鍵盤了.我實現了一個簡單的虛擬機,一個簡單的 parser,還有一個簡單的運行時庫.ABC 中每一個我欣賞的部分我都重新實現了一把。#t#
我還設計了一種基本的語法,它用縮進來表示語句之間的結合關系,而不是用花括號或者 begin-end 塊來表示程序結構。同時,我開發了幾個功能強大的數據結構:哈希表 (用來實現 dictionary,我們這樣稱呼它),列表,字符串,以及數字類型。
ABC 的設計者放棄了用來讀寫文件的 IO 的方法,他們轉而在程序里使用一些全局變量.他們的用戶對全局變量的概念應該了然于胸.所以 ABC 的設計者讓那些全局變量能持久化。
如果你退出一次編程會話,你所有的全局變量就被系統存到磁盤上的一個文件里.等到你下次啟動另一個會話,你所有的全局變量就會恢復回來.在某種程度上說,這一套運作得很好.這和 workspace 有幾分相像,比如說 Smalltalk 里的 workspace 就和這個差不多。
ABC 里有一個 print 語句,可以讓你在屏幕上輸出,還有一個 input 語句,讓你可以從鍵盤上讀入,但是 ABC 卻沒有辦法可以把 IO 重定向到文件,或者從文件重定向到 IO.實際上,可以說他們根本就沒有提供任何 IO 功能。