转载唐凤的博客 :: Perl 6 十周年慶

转载唐凤的博客 :: Perl 6 十周年慶,第1张

概述2010.07.19 Perl 6 十周年慶: 前言 (五之一) (This is a translation of masak++'s excellent Perl 6 anniversary post, part 1 of 5.) (這是 masak++ 一篇網誌的中譯,分五部刊出,這是第一部份。) 十年前的今天,Jon Orwant 在一場會議上摔咖啡杯。 據維基百科記載,Perl 6 計劃 2010.07.19 Perl 6 十周年慶: 前言 (五之一) (This is a translation of masak++'s excellent Perl 6 anniversary post,part 1 of 5.) (這是 masak++ 一篇網誌的中譯,分五部刊出,這是第一部份。) 十年前的今天,Jon Orwant 在一場會議上摔咖啡杯。 據維基百科記載,Perl 6 計劃是從十年前的七月十九日開始的。 而前一天的擲杯事件,可以說是觸發 Perl 6 誕生的火苗。 Jon 為什麼要扔杯子呢?請看 Larry Wall 的口述歷史: 頭一小時裡,我們討論的都是些無聊沉悶的政治組織問題。 開會開到一半,Jon Orwant 走進房間,站在一邊聽了幾分鐘。 然後他很淡定地走向咖啡桌,上面大約有20個咖啡杯。 他拿起一個杯子,往對面的牆壁扔去。然後再丟一個。 他邊扔邊說: 「我們得想想辦法激勵社群,不然就都完了。大家越來越無聊,都去做別的事了。」 他說對了。原本他也許是想辦一場更大的 Perl 會議,或是讓 Perl 某些功能更強等等。但他說得很對, 他刺激了我們。 他接著說: 「我不管你們怎麼做,可你們得搞些大事出來。」然後他掉頭就走。 你要知道,這是我見過最完美的一場暴走。如果你認識 Jon,就會知道他很能自制。 他發這場脾氣完全是事前計劃好的。非常驚人。 我當時就想: 「我是不是也該站起來摔杯子呢?」 在構思這篇網誌時,我只聽說過這件事,但不確定它是哪天發生的。我上網查了些資料,還是找不到確切的日期。 不過,我找到了一份電子郵件,上面列出了有哪些人在場,以及 Jon 到底丟了幾個杯子。 最後,我決定在 IRC 頻道上直接問 Larry。接下來這段充滿雙關的對話紀錄,很能代表 #perl6 的氣氛: <TimToady> masak: 對了,那些杯子是前一天扔的。  <jnthn> 那些?我以為只扔了一個杯子!  <masak> jnthn: 五個。  <masak> jnthn: 不過,只有一個摔破了。  <masak> TimToady: 感謝。這樣我還來得及寫周年紀念文。  <jnthn> masak: 礸!  <TimToady> 我當時應該把碎片留作紀念的。  <masak> 「Perl 6: 相容性、咖啡杯,2000 年起都砸碎。」  * pmichaud 打開 photoshop,準備放上 cafepress  <masak> pmichaud: 「Perl 6: 打破杯具,再創豐杯。」 <pmichaud> 「語言有難時,請擊碎此杯。」  <jnthn> 「Perl 6: 比 Perl 5 更牆一杯。」  <pmichaud> 「Perl 6 大破大立、碎碎平安!」  <masak> "if $杯 === all @碎片 {say '夠了,太杯撞了!'}  <jnthn> 你杯得動的。:P  * masak 笑到杯桁了  <TimToady> 「Jon 為什麼要扔甜甜圈呢?」 -- 拓樸學家 <masak> :P  <TimToady> 「這是碎杯。<mug> 這是你嗑了碎杯的腦袋。              <camelia> 有問題嗎?」  <masak> 「Perl 6: 十年聖杯碎,今請尋其蹤。」  <jnthn> 「杯比怎麼昇出來的?」  <masak> 都被 Jon Orwant 搞大了。  <jnthn> 五杯無寸鐵,何人竟害之!  <masak> 我為清潔工祈倒。  <masak> 「Perl 6: 杯已擲下。」 Perl 6 至今已有十年的歷史了。接下來,我會從(主要是)我個人的觀點,敘述這十年來的經過。 除了紀錄史實之外,我也希望能分享我對這個專案的熱情,以及為什麼我認為 Jon Orwant 的一擲,造就了現代程式語言史上最酷的計劃之一。 2010.07.21 Perl 6 十周年慶: 遠古時期 (五之二) (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。 Perl 6 十周年慶: Pugs:黃金年代 (五之三) (This is a translation of masak++'s excellent Perl 6 anniversary post,part 3 of 5.) (這是 masak++ 為慶祝“樂土專案”即將正式發行所寫的紀念文章的中譯。) 我還記得初次踏入 #perl6 頻道的感覺。 有人真的拿「綱要」來實作,這已經夠驚人了。而唐鳳又是個極富生產力的黑客,像磁鐵一般,以前所未見的速度吸引眾人投入開發。 待在 #perl6 頻道上,就像是站在颱風眼附近;事情像奇蹟般陸續發生,無論是因為唐鳳又完成了一組更動,或是旁邊又有人開始了某個很酷的專案。有趣的想法和點子,日夜不停湧入頻道當中。 而我們所有人都真的在跑(早期的)Perl 6!算符、副程式、類型、多載... 一個接著一個,我們期待以久的功能陸續開始運作。 很快,我們就寫出了在頻道上即時運行 Perl 6 代碼的機器人。 無論是誰,只要一提出改進 Perl 6 的想法,唐鳳就送他一個提交權。這招還真管用!數以百計的人獲得了提交權,卻完全沒有像圍紀系統上常見的破壞行為出現。許多人踴躍加入,主動做出貢獻。 當時我們的口號是「信任安那其」,現在回想起來仍然很聳動。 唐鳳興高采烈地站在漩渦中心,引導大家發展各式相關計劃,幾乎每天都邊寫網誌,邊提交出鉅量的代碼,為逐漸成形的 Perl 6 社群注入活力。 Pugs 是用 Haskell 寫成的,因此早期 #perl6 的文化深受 Haskell 文化的影響。 Pugs 黑客團隊的綽號是「浪達駱駝(Lambdacamels)」;頻道上大量出現資訊科學類的的論文、關於 Haskell 的書藉,以及其他編程相關的深奧論著。這些參考書目今天仍然可以在 Pugs 的 READTHEM 文件裡看到。 頻道上的幽默相當機智,主題往往也和電腦有關。 <audreyt> Alias_:我的眼鏡是 <Alias_> 無所謂 <Alias_> 人眼的感光邊界會自動加上 border: solID 1px #9999 <audreyt> 說得對 <audreyt> 不過以我的視力來說,更像是 rIDged * audreyt 望著頻道上的高度技客傾向嘆氣 ... <audreyt> 這顯然要 blame malaire++ <audreyt> 我的意思是 praise <audreyt> 不然說 annotate 好了 頻道上主要的感嘆詞是「讚!(woot!)」。主要說「讚!」的人是唐鳳。業力(Karma)取代了貨幣,由機器人在頻道上統計,並在即時公佈提交訊息時,一併幫提交者加分。 我要說明一點:當時在 #perl6 上,我只是個粉絲。我對 Pugs 沒有作出什麼重大貢獻,對「綱要」和語言設計也沒有幫上什麼忙。至於在頻道上搞笑嘛,我倒是不遺餘力。:-) 2005 年 3 月,我的傻言傻語換來了一份提交權: <autrijus> 歡迎上船! <masak> 謝謝。因為 Pugs 的關係,我幾乎整晚沒睡。:-) <autrijus> 開心嗎? <masak> 太興奮了 <autrijus> 這感覺我懂 :))) 唐鳳保持著很高的開發速度,頻道上經常出現關於他生產力的玩笑: <autrijus> 待會見 - 洗澡去 & <geoffb> 所以說唐鳳在浴室連 IRC 的謠言不是真的嘍... <geoffb> 也許他把筆記型電腦放在浴簾外,邊洗邊看螢幕。 <autrijus> 沒錯。 <autrijus> 通常是這樣。 <autrijus> 我都拿牙刷按鍵盤,以免鍵盤進水。 <geoffb> *大笑* ... <Juerd> 每本講 Perl 6 的書都太舊了。 <Juerd> 它們送印後兩小時就過時了。 <Juerd> 等它們進到書店,已經過期一個月了。 <Juerd> 等你買到書準備看時,autrijus 已經把 Perl 6 實作出來了。:) <mauke> 在睡夢裡實作的! <castaway> autrijus 會睡覺? <nothingmuch> castaway: 有時候他宣稱自己去睡了。 * castaway 完全不信 <mauke> 也許他和電腦之間有神經界面,讓他在夢裡寫程式。 <castaway> 這我一點都不意外 :) <Juerd> castaway: 嗯,有時後他說要去睡,可是沒幾個小時後               就出現了一大份提交。所以我才不信呢。:) <castaway> 嘻嘻 <castaway> 據我看來,他每次最多只睡 30 分鐘。 <Juerd> 我想他有超線程功能。 唐鳳曾經說過:「人們以為我是了不起的程序員,但其實是 Haskell 和 Parsec(Haskell 的剖析結合函式庫)太強大了。」不過,這並沒有讓人們停止議論他的產能。 2006 年的某一天,Larry Wall 加入了 #perl6 頻道。他再也沒有離開過。 <avar> ?eval <物美 迅速 價廉>.pick(2) <evalbot_r16148>("物美","價廉") <TimToady> 這是在說我們沒錯... 不過,我們確實失去了唐鳳。在他進入跨性別旅程後,產量雖然有增無減,但在 2007 年一次艱難的重構任務中,唐鳳突然爆發急性肝炎,於是離開了頻道,再也沒有回來。 Pugs 中斷開發。在唐鳳離開後,頻道頓時安靜了許多。 Pugs 還在,但已不再更新,也還沒完全達成對 Perl 6 規格的實作。社群裡的成員都在,但核心人物卻消失了。 當時我不知道未來會如何,只好盼望有更多像 Pugs 一樣的計劃出現。 (唐鳳沒有回頻道的原因,直到兩年之後才在他的一篇網誌裡揭曉。) 2010.07.28 Perl 6 十周年慶: Rakudo:白銀年代 (五之四) (This is a translation of masak++'s excellent Perl 6 anniversary post,part 4 of 5.) (這是 masak++ 為慶祝“樂土之星”即將正式發行所寫的紀念文章的中譯。) Pugs 帶來了決定性的變化。隨著唐鳳的「非官方」Perl 6 實作完成度愈來愈高,不少人也開始發展自己的「小規模」實作。 從 2005 年到今天,有十來個「小規模」實作陸續出現,其中不少到現在仍在持續開發。其中有些是為了探索 Perl 6 某部份的設計,也有的是想要實作出整個語言。 (我稱它們為「小規模」,是因為開發者人數較少,使用者也不多的緣故。) 從 Pugs 登場到離場的這兩年多裡,在 Parrot 上實作 Perl 6 的腳步並未稍停。但因為當時 Parrot 還不夠成熟,想要慢慢搭建起編譯器所需的工具鏈,勢必得花上許多時間。 早在 2005 年時,Patrick Michaud 就已著手在 Parrot 上實作文法引擎(PGE)及編譯器工具集(PCT)。到了 2007 年,Patrick 終於得以開始正式實作 Perl 6;這個計劃在 2008 年初命名為 Rakudo(樂土)。 老實說,我是在它取名為「樂土」之後,纔注意到這個計劃的。 Patrick 的願景是這樣的:一個完整的 Perl 6 實作,首先需要有良好的 Perl 6 文法引擎,以及完善的的編譯器工具鏈作為基礎。在完成這兩項計劃之後,Patrick 才轉而開發實際的 Perl 6 編譯器和執行環境。 當時,一位名叫 Jonathan Worthington 的強人不慎答應 Patrick,要在 Rakudo 上實作 Junction(連接值)功能。(後來他纔發現,要實作連接值,得先實作多重分派,而這又得先實作型別系統,所以又得先完成大部份的物件導向系統... XD) 於是在 2008 上半年,Patrick 和 Jonathan 齊心協力,為 Rakudo 寫出了一個接一個的功能。 雖然 Rakudo 並不像唐鳳開發 Pugs 時那樣輕鬆寫意,而且早期版本實作的功能通常漏洞百出,但它確實讓 Perl 6 社群再度活躍起來。 在相對完整但發展停滯的 Pugs 計劃,與緩慢但穩定地追上 Pugs 的 Rakudo 計劃之間,我逐漸把注意力轉向後者。 2008 年的夏天過得很快;我和 viklund 合作,用當時還乳臭未乾的 Rakudo 寫一套圍紀引擎(純粹為了好玩而已)。 我們對自己說,如果竟然能寫出來,那我們就到 YAPC::EU 會議上,以它為主題來一場閃電演講。 嗯,最後我們真的寫出來了,也真的到 YAPC::EU 講了一場。與會者聽到有人能用 Perl 6 寫網站程式,反應十分熱烈,我們也很開心。 可是,中間我們繞了多大的彎,避開了多少還沒實作的功能,又發現了多少瑕疵啊! 而且,既然這是個秘密計劃,我們就不能在 #perl6 上直接貼出有問題的程式。要回報瑕疵之前,我們得先把代碼清理到看不出和圍紀有任何關係纔行。在那段時間裡,我學會了在瑕疵回報上打高爾夫(Golfing,壓縮字數)的價值。 那年夏天,我提交了許多瑕疵回報,每份的代碼都清理過了。就像小孩子收集瓶蓋一樣,我開始熱衷於此。 當時 Rakudo 的瑕疵不少。有一陣子,瑕疵似乎無所不在。這不能怪 Patrick 和 Jonathan;他們一直都很盡責。但任何專案都要經歷實地運用的考驗,而 viklund 和我恰好是首先拿 Rakudo 來用的人。 實地測試和回報瑕疵成了我的嗜好,驅使我不斷重複著「拿 Rakudo 做些新鮮事」、「看 Rakudo 爆炸」、「寫瑕疵報告」的無盡迴圈。 能脫離粉絲階段,正式參與開發,這讓我非常高興。日後我寫了更多 Perl 6 代碼,甚至還拿到了 Rakudo 的提交權... 但我想我會一直當那個「專門提瑕疵報告的傢伙」吧。 目前頻道上的幽默以大笑貓(lolcat)、奇特的顏文字,以及其他時下的網路流行語彙為主。頻道上的氛圍輕鬆有趣;大笑貓和編譯器內核開發的對比,時常令人耳目一新。 <pmichaud> 早安,#perl6 <jnthn> 早,pmichaud <PerlJam> pm 你好 <colomon> o/ <mathw> o/ pmichaud <moritz_> /o/ <mathw> \o\ <jnthn> \o/ |\o/| o< /o\ <jnthn> ;-) <mathw> 啊啊啊啊 * mathw 躲起來 <okeCay> o/\o ! 隨著 Rakudo 漸趨成熟,「綱要」也隨之作出修訂。也許有人覺得這很可怕。要怎樣去學一門不斷變化的語言呢?為什麼不讓規範文件確定下來呢? 我個人的想法是:我不希望語言規範被「鎖定」或「凍結」住,因為目前的修訂已經愈來愈小,大都是為了修正 Rakudo 等實作回報出的問題。 雖然 Perl 6 的規格改動幅度超過我所知的其他語言,但另一方面,它也一天天變得更加穩定。我們稱它為「漩渦式開發模型」,實作和規範雖然相互影響,但最終仍是往同一個單點收歛。 相對於某些 IRC 頻道的粗暴文化,#perl6 可說是網路上最親切的地方之一。我們花非常多的時間回答新手的問題、幫忙修正語法錯誤、並為訪客和開發團隊釐清各式術語及設計方針。我們互相幫忙看代碼和網誌文章,讓頻道上洋溢著彼此尊重和互相照顧的感覺。 今天的 #perl6 幾乎是「日不落頻道」,擁有來自全球各地的人積極參與。我們不僅覺得這裡有個非常酷、足以向世界展示的語言,也很自豪於 Perl 6 文化的良好素質。 2008 年以來,Rakudo 逐漸領先其他實作,完成度甚至超越了 Pugs。目前絕大多數的算符和控制結構都已完工,更有強大的正規表示式與文法引擎(感謝 Patrick!)以及優秀的物件導向、多重分派支援(感謝 Jonathan!),許多其他功能也已充份實作。 我們還有許多「小規模」的 Perl 6 實作,幫忙推動「綱要」發展和探索實作策略。但投注於 Rakudo 開發的人力,確實遠大於其他實作。Rakudo 每月釋出新版的工作人員名單,通常都在二三十人以上。 重新回到「Perl 6 每天都更近一些」的日子真好。 我仍然每天回報一則 Rakudo 的瑕疵,但通常是關於尚未實作的進階語言特性,而不是缺少什麼常用的功能。 2009 年至今,Rakudo 成功完成了幾項龐大的重構任務。首先是文法系統,隨後其他各元件也都分別重新寫過。 對開發者來說,這些小計劃統合成了所謂的「Rakudo 大重構」。 對於外界來說,這就是即將正式發表的 Rakudo Star,「樂土之星」。 2010.07.30 Rakudo Star:Perl 6 正式起飛(五之五) (This is a translation of masak++'s excellent Perl 6 anniversary post,part 5 of 5.) 我們正在寫這段歷史。 七月二十九日,Rakudo 團隊正式釋出「樂土之星(Rakudo Star)」,也是 Rakudo Perl 計劃的第一個正式發行版本。(請按此處下載。) 在我看來,這個時機真是恰當極了。 在 Jon Orwant 擲杯之後的十年,Perl 6 團隊向全世界說:「這是我們的作品。幾年來我們孜孜不倦,對它切磋琢磨,如今它已曖曖含光、足堪重任。請試試看,用它來做些有趣的事吧!」 這些年來,從瓷杯創生的 Perl 6 專案,讓包括筆者在內的許多人興奮不已。 現在是讓更多人加入的時候了。 我們在此誠摰地邀請您,一同踏入這片樂土。 总结

以上是内存溢出为你收集整理的转载唐凤博客 :: Perl 6 十周年慶全部内容,希望文章能够帮你解决转载唐凤的博客 :: Perl 6 十周年慶所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1293553.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存