(This is a translation of masak++'s excellent Perl 6 anniversary post, part 2 of 5.)
(這是 masak++ 為慶祝“樂土專案”即將正式發行所寫的紀念文章的中譯。)
也許你聽說過 Perl 6 最初的「徵求建議(RFC)」過程 。當時 Perl 6 才剛開始,連 Larry Wall 都還不知道要朝哪個方向發展。
於是,Perl 社群建了一套系統,公開徵求對語言功能的建議。
系統上線時,團隊原本估計會收到大約 20~30 份建議書。
結果,總共收到了 361 份!
建議書不只是數量多,而且涵蓋的範圍五花八門,甚至互相衝突。大部份的建議只考慮到一個面向,完全沒有考慮到它會對整體語言造成什麼影響。
如果當時我們竟然把所有建議都實作出來的話,結果也許會像這頭著名的 Perl 6 大怪獸一樣吧。
除此之外,社群對建議書的後續討論裡,往往缺乏「如何實作」的細節。Mark-Jason Dominus 對 Perl 6 RFC 過程的評論如下:
於是「誰來幫貓掛鈴鐺」的問題就出現了。人們提出各種各樣的功能,然後不停討論細節,但其實這些功能根本沒辦法實現。 [...]
這讓討論失去焦點,難以集中到實際可行的權衡取捨上。[...]
最後,就我個人而言,我覺得這種「不求甚解」的態度相當惱人。它讓很多實際瞭解 Perl 內部細節的人不想參與討論。
最後還是 Larry Wall 獨力接下了整合 RFC 的重任,將它們融會貫通成完整的構思。他發佈的文件統稱「啟示錄」,對 RFC 分門別類、逐項點評:有的獲得採納,有的部份保留,也有些遭到駁回。
啟示錄的編號,依照駱駝書的章節順序排列:舉例來說,和第三章「算符」相對應的「啟示錄三」,講的就是 Perl 6 裡該具備哪些算符。
以下是所有已發佈的啟示錄:
- 啟示錄一,2001年5月
- 啟示錄二,2001年5月
- 啟示錄三,2001年10月
- 啟示錄四,2002年1月
- 啟示錄五,2002年6月
- 啟示錄六,2003年3月
- 啟示錄十二,2004年4月
2001 ~ 2004 這三年,可說是 Perl 6 從眾人的意見中逐漸淬煉成形的階段。
與「啟示錄」同時發佈的,還有由 Perl 6 的主要設計者之一 Damian Conway 撰寫的「注疏」。
「啟示錄」注重的是語言的藍圖,以及功能的去留與否。「注疏」則負責展示如何使用新的功能,並對 Perl 5 程式員解釋 Perl 6 提供了哪些改進。
此刻我重讀「注疏」,覺得特別有趣的是當年「Perl 6 只是 Perl 5 的新分支」這個想法。當時的 Perl 6 已經作出許多細部的改進,但是 Damian 在「注疏二」裡,介紹完一長段 Perl 6 程式後,仍然如此敘述:
…事實上,這支程式總共 1779 字,和 Perl 5 的版本之間只差 40 個字。而且幾乎都只是把陣列取值從 $x[…] 改成 @x[…] 而已。不用靠 p52p6 自動翻譯,就有 98% 的相容性… 還不賴!
這個想法如今已然不再。如果你到 #perl6 頻道上問「Perl 6 和 Perl 5 像不像?」我們會這樣回答:雖然這兩種語言的基本概念和目的相以,但是語法卻大有不同。所以,最好把 Perl 6 當作新的語言來學,而不是用寫 Perl 5 的角度來思考。
在 2004 年,Perl 6 團隊對啟示錄作出摘要,去除闡釋的段落,發佈成足以作為語言規格的幾篇「綱要」,以供實作團隊參考。「綱要」雖然言簡意賅,但對於想深入瞭解 Perl 6 語言的人來說,仍然是不可或缺的一批文件。
作為 Perl 6 語言的定義,「綱要」一直持續更新至今。在 perlcabal.org 上,目前共有 33 篇綱要。其中的 S02 ~ S06 已經相當穩定,偶爾有些小幅更動。其餘部份則仍然處於草案階段,有待實作者及使用者的後續回饋,來讓它們更臻完善。
與此同時,許多實作 Perl 6 的計劃紛紛出現,但最終都以放棄收場。
早在擲杯事件和 RFC 之前,Chip Salzenberg 就用 C++ 開始進行「Topaz」計劃,並準備將它發展成 Perl 6。Topaz 原本打算重寫 Perl 5 的內部結構,但卻難以為繼。
當我問 Larry 為何 Topaz 會失敗時,他的回答是:「重新實作過的瘋狂,依然還是瘋狂。」(意思是:「不要試圖把 Perl 5 的核心改裝成 Perl 6。」)
此外還有「Sapphire」專案,只持續了一個星期。它開始於 2000 年 9 月,當時 Perl 6 才剛宣佈不久。Sapphire 也採取了「重寫 Perl 5 核心」的規劃,作為 Perl 6 正式實作前的預習。
不久之後,Parrot 專案開始發展。它是一個專為動態語言設計的虛擬機器,特別適合執行動態程度極高的 Perl 6 所需。
同時開始的還有 Ponie 專案,試圖將 Perl 5 硬生生移植到 Parrot 上運行。正如這篇文章所述,Ponie 因為巴士數太低,以及當時 Parrot 還不夠成熟的緣故,最終在 2006 內正式解散。
當時我是一介旁觀者,只知道有 Parrot,沒聽過其他專案,更不知道 Parrot 上曾經出現過的 Perl 6 實作。
我認真讀完了每篇「啟示錄」和「注疏」,覺得它們很有意思。
可然後呢?這個程式語言有一天能成真嗎?沒人曉得。似乎沒有什麼激動人心的事情發生。
在 2005 年初,有位唐某人在 perl6-all 通信論壇上貼了一段短訊,說自己正在實作一小部份「不產生副作用運算的 Perl 6」。(請留意這篇郵件的口氣,和 Linus Torvalds 著名的那篇「不像 GNU 那麼大規模」聲明的相似程度。)
不知不覺間,這「一小部份」已經成長為完整的 Perl 6 實作,它的名字叫作 Pugs。
Comments