在提取出這篇自述之前,Cardinal Biggles讓Eric坐在舒適的椅子上思考了超過4小時…
我第一次看到Python是一次偶然,而那時我并不十分喜歡我所看到的。那時是1997年初,Mark Lutz 的書
Programming Python 剛由O'Reilly & Associates出版。在由一些神秘的捐助人經過一些我也無法理解的隨
機過程篩選之后,O'Reilly的新書會不時被送到我家。
其中一本就是Programming Python。由于我喜歡收集不同的計算機語
言,我發現它比較有趣。我知道數十種通用語言,把寫編譯器和解釋器當作樂趣,也曾自己設計過許多種專用語言和標記形式語言。在我寫這篇文章時我完成的最近
一個項目是一個用來操作PNG(Portable Network Graphic)圖像的叫做SNG的專用語言。感興趣的讀者可以參考SNG的主頁http://www.catb.org/~esr/sng。我也曾在我的Retrocomputing Museum網頁(
http://www.catb.org/retro.)上寫過一些罕見的通用語言的實現。
我
已經聽說過許多關于Python的評論,知道它是一種現在所謂的“腳本語言”,一種內建內存管理和優秀的調用或配合其它程序的機制的解釋型語言。于是,帶
著頭腦中一個最迫切的問題:“Python什么地方優于Perl?”我深入研究了Programming Python。
眾所周知,Perl是現
代腳本語言的始祖。它在很大程度上取代了shell成為用于系統管理的腳本語言的最佳選擇。 這一部分歸功于它易于理解的Unix庫和系統調用,一部分歸
功于活躍的Perl社區構建的巨大的Perl模塊集合。這個語言通常被認為是網上85%的內容背后被使用的CGI語言。它的創建者Larry Wall被
公認為開源社區最重要的領導人之一,在黑客名人堂上僅次于Linus Torvalds和Richard Stallman。
那個時候,我已經用
Perl做過不少小型項目。我發現這個語言非常強大,雖然它的語法和其它一些方面顯得過于特別,而且容易給粗心的人帶來麻煩。在我看來,Python作為
另一種腳本語言似乎還有不小的山峰需要翻越,因此在我讀《Learning Python》的時候,我首先注意了它和Perl的區別。
我快速地瀏
覽了大家都注意到的Python的第一個新奇的特性:空白符號(縮進)在這個語言的語法里有明確的含義。這個語言不同于C和Perl中使用括號的語法。取
而代之的是,縮進的改變為語句劃分了界限。同時,和大多數黑客最初了解這一特性時一樣,*FIXME我也經過了反復回味才理解它。*
作為一個老資
格的程序員,我有幸在20世紀70年代有過數月在批處理的FORTRAN下編程的經驗。雖然大部分的黑客并沒有經歷那個時代,但我們的文化中還是保留了一
些對于那些丑陋的 *FIXME 固定格式(原文為fixed-field) *語言的記憶。事實上,那時就被用來形容最
新的使用了在Pascal和C中
面向Token語法的語言的詞匯—自由格式(Free Format)早已被遺忘,早在十年以前,幾乎所有的語言就被以這種方式設計。對于
Python的
這一特性,我們并不能責怪任何人,
*FIXME for initially reacting as though they had unexpectedly stepped in a steaming pile of dinosaur dung.*
那當然是我個人的感覺。我并不是很感興趣地瀏覽了剩下的對這個語言的描述。除了比起Perl十分整潔的語法和對按鍵和菜單等GUI元素的良好支持外我并沒找到其它推薦Python的理由。
我把書放進了書架,心想我以后或許會用Python做一些以GUI為中心的小型項目—僅僅為了確定我確實掌握了這門語言。而那時我并不認為這門語言能對Perl構成威脅。
許
多其他的事情讓我把那件事拋在了腦后。1997年剩下的時間對我而言具有重大意義,這一年我創作并發表了<<大教堂與市集〉〉。但我也抽時間
寫了一些Perl程序,其中兩個也具有一定規模和復雜度。其中之一是keeper, 一個現在還被用來在Metalab的軟件歸檔中對提交的注冊進行輔助
記錄的軟件。你在anthologize%EF%BC%8C%E5%88%99%E8%A2%AB%E7%94%A8%E6%9D%A5%E4%B8%BALinux">http://metalab.unc.edu/pub/Linux/!INDEX.html中看到的網頁就是由他生成的。另一個,anthologize,則被用來為Linux 文檔工程的HOWTOs的Linux第六版自動生成PostScript。這兩個程序都能在Metalab得到。
Writing these programs left me progressively less satisfied with Perl. Larger project size seemed to magnify some of Perl's annoyances into serious, continuing problems. The syntax that had seemed merely eclearcase/" target="_blank" >ccentric at a hundred lines began to seem like a nigh-impenetrable hedge of thorns at a thousand. ``More than one way to do it' lent flavor and expressiveness at a small scale, but made it significantly harder to maintain consistent style across a wider code base. And many of the features that were later patched into Perl to address the complexity-control needs of bigger programs (objects, lexical scoping, ``use strict', etc.) had a fragile, jerry-rigged feel about them.
在寫這些程序的過程中我漸漸對Perl產生了不滿。更大規模的項目似乎把Perl的不足之處放大成了嚴重的,不斷出現的問題。和(to be continued...)