(I promised Pm a translation on Pm's use.perl journal back in Apr 23, and here it is.)
(這是 Rakudo Perl 的負責人 Patrick Michaud 最近在 PerlMonks 上某篇文章的中譯。感謝唐宗浩與蒙面噗友協助潤稿。
Perlmonks.org 上最近有位蒙面僧人,發起了一場關於 “Perl 6 之現況” 的討論,對 Perl 6 開發的各個方面,指天畫地,無所不談。
我個人呢,覺得蒙面僧的評論, 既缺乏邏輯,又脫離現實,教人不知從何回起。
不僅如此,我當前的人生,有更重要的事情需要我:我的家庭正經歷一段艱困的過程 -- 我得先照顧好他們纔行。
樂土(Rakudo) 和 Perl 6,只好排在稍遠的第二位。
至於回應蒙面人所寫出的垃圾呢, 甚至不該在我的心裡佔有一席之地。
但是,討論串裡有則評論,讓我深感困擾,使我不得不作出回應 -- 即使是未盡完善的回應也好。
我不想把這份回應埋藏在討論串裡,所以另起專文論之。
蒙面僧如此寫道:
喔,咱來告訴您怎麼做。[寫出支持 Perl 6 的文法引擎] 再簡單也沒有了。
您只要找懂得怎麼做這件事的人就行了!
寫這玩意兒的方法,大學裡都有教的(當然要好一點的大學才行)。
教授們有開課,教“形式語言與自動機”和“編譯器理論”呢。
您們這幫開源志工,要知識沒知識,要學識沒學識... 連理論都無法掌握,怎麼做實踐呢?
我想請教蒙面僧:“您以為都是哪些人在做 Perl 6 啊?”
我個人是資訊科學系博士,在大學教程序語言已經十四年了。
Damian Conway 博士的學術背景也不賴(澳洲 Monash 大學),他很熟悉語言和編譯器設計的理論與實務。
Jonathan Worthington 是劍橋畢業的,他主修的正是“編譯器實作與形式語言”。
Larry Wall 在加州柏克萊讀語言學碩士前,大學主修“自然語言與人造語言”。
我們團隊裡許多重要的成員,對語言理論與實務都有充份的學術和實踐背景。
就各個動態語言的開發團隊而言,無論蒙面僧想舉哪個作例子,我們這群人的學術訓練都足以與之匹敵。
要是 Perl 6 沒法請到真正搞編譯器的人來用、來幫忙,那就甭指望平庸的開源嫩咖能做出什麼事了。
我實在沒法想像 Larry、Damian、Allison 等人不是“真正搞編譯器的”。他們和 Perl 6 的許多參與者,在培育開源人才和專案上都有相當豐富的經驗。
如果您覺得 Larry 等人不夠格設計、實作編程語言,那別說 Perl 6 了,Perl 5 可能也不入您的法眼。
蒙面僧這類人士,往往大放厥辭,逕自揣測 Perl 6 應該花多久才會開發完成,而後如果 Perl 6 花的時間比他們想得久,各種猜想就出現了。
最常見的猜想,不外乎“開發團隊能力不足”(見上文),“設計過程本身有瑕疵”,“Parrot 架構太差,無法供 Perl 6 所需”等等。
這些蒙面人輕易就能對 “Perl 6 出了大問題”胡吹一通,卻不願意稍微費點時間看基礎事實,以檢驗自已的論點。
事實上,我時常覺得很有趣:這些人建議我們做的改革,其實往往早已行之有年。
回到開發文法引擎的主題。蒙面僧認為這“再簡單也沒有了”,我們需要的只是“找到懂得怎麼做的人”。
但如果我們來看看實際上,Perl 6 標準文法(STD.pm6)的開發過程,就會發現事情遠非如此。
我想,STD.pm6 很能代表所有 Perl 6 實作人員所面臨的挑戰。試考慮以下事實:
- Larry 本人是標準文法的主要實作者。
- 實作標準文法時,不需要等待其他規格確定,因為標準文法即是規格的一部份。
- STD.pm6 完全在 Perl 5 上運行 -- 不受所謂 “未經證實的虛擬機器” 影響。
然而,從 Larry 發起標準文法以來,已經三年過去了。今天的 STD.pm6 雖然很好很強大,但離“完工”還有一段距離。在它開發的過程裡,也已經大幅重構了許多次。
這個故事告訴我,此項目所需的龐大時間和精力,似乎是 Perl 6 高昂野心的自然結果,與主事者的能力關係不大。
讀者們看到這裡,也許馬上想問:“如果光是剖析器就要寫上三年,那編譯器豈不還要更久,這樣 Perl 6 的誕生不就沒指望了嗎?”
我們可以用幾項事實來回答這個問題:
- 其他元件的工程,和 Larry 負責的文法部份是同時並行的。
- 軟體開發,並不是依照固定順序進行的生產線。
- 已經有好幾個 “足堪使用” 的 Perl 6 實作了。
Perl 6 與大學裡教的傳統編譯器建構方式,可說是南轅北轍。Perl 6 所代表的,是對編程語言設計和實作的全面範型轉移。
這個新的範型給了 Perl 6 強大的威力,但也正因如此,Perl 6 決不是幾位研究生可以開個專題,就實作完成的語言。
誠如 TimToady 在 #perl6 所言:“世上已經有太多那種語言了。”
就個人而言,我很感動,也很榮幸能與 Rakudo 和 Perl 6 的人們共事。
Perl 6 是個很酷的語言。我理解人們在漫長等待它實現的過程裡,難免感到沮喪、甚至痛苦。在這個主題上,我只能盡一己之力,做些有建設性的工作。
但是,我也發現蒙面人士提供的建議、點評、總結等等,大致不出以下四種:
- 我們團隊已經試過了,或目前已經在做了。
- 與現實不符。
- 和一般合理觀察到的基礎事實相違背。
- 評論者自已並不想使用 Perl 6,純粹只想攻擊它。
如上文所述,這類評論大多只要用一點點事實、一點點常識,就足以反駁。
實在很難想像有人會用心寫出這種怪論。但它們還是出現了。
言歸正傳。我覺得以上回覆未盡完善,因為在同一個討論串裡,蒙面僧還提出了許多其他的論點,我無法一一反駁。
當然,我可以再花上幾個小時分析、回應其中的謬誤失實之處,但老實說,我覺得再費精神在這上頭,未必有什麼價值。
Moritz Lenz、chromatic、Michael Schwern 等人,也正在勉力寫出合情合理的文章,來回應無憑無據的指控。
我很感謝他們的襄助。想想,蒙面僧等人要寫出這些廢話費的力氣很少,與我們少數幾個人要澄清這些指控所費的精神,完全不成正比。
然而,這些指控仍有必要澄清,否則它將會持續腐臭,發散到更廣大的空間中,衍生出需要費更多力氣澄清的各式謠言。
我希望這篇文章,至少能鼓勵 Perl 社群裡的成員,對他們所接收到關於 Perl 6 的言論,能多採取批判性的態度來檢視。如果言論的發起人在社群裡並無聲望,那更要再三檢視。
我也希望能有更多人眾志成城,一起協助闢謠,讓這類有瑕疵的思想、分析、對話,不致於經由蒙面僧傳染到整個 Perl 世界。
Pm
附註:有些人可能會說,從上文看來,Perl 6 的藍圖畫得太大,應該向下修正,才能“準時完成”。
這樣說也不無道理,但我有兩點回應:
1. 我們已經有“準時”每月釋出的版本了。各位不妨下載試用、回報瑕疵。
2. 我們已經有“向下修正”的版本了。NQP、STD.pm6 等等都是 Perl 6 的部份實作,目前也有實際的應用價值,並非僅是理論研究的空想專案而已。
人們常說,與其花這麼多力氣在 Perl 6 上,不如把那些精神拿來改善 Perl 5。就我所知,我們這群 Perl 6 的開發者,對 Perl 5 的改良與成長,當然是樂觀其成。
說實在的,Perl 5 幾個最新的功能,都是從 Perl 6 的初始構想中引介而來,這點讓我們很開心。身為 Perl 6 的核心開發者,雖然我們也喜歡 Perl 5,但不表示我有興趣,或有能力,對 Perl 5 核心開發作出貢獻。
我們是人,不是大量製造的程式設計工具,我們並不喜歡只因為別人覺得某個專案更有價值,就把我們從眼前的專案裡拉開,硬生生調派到其他專案裡面。
我個人很希望致力於 Perl 5 的人們,能持續投身於開發工作,順利做出成果。也希望周邊的支持系統更趨完善,讓更多人能在 Perl 5 的天地裡發揮所長。
事實上,這也是我對一切開源專案的祈願,即使其中有些專案,對我個人來說,沒有什麼特別的意義。:-)
上次看見您詢問是否可以中譯這篇應答,就一直想坐享其成。 ;)
请问能否把这篇译作转到大陆论坛呢?谢谢。
Posted by: xiaoyafeng | 2010.05.04 at 03:36 PM
當然可以,我的網誌是 CC0/公領域,請逕轉。
Pm 也說過了,希望愈多人看到愈好。:-)
Posted by: audreyt | 2010.05.04 at 03:46 PM
dear tang,
I'm a programmer from Fujian Province in China,I have just graduated from university one year.I love perl, but I've find the language is so difficulty to learn.Someone let me to learn python instead, how could choose?And I'm also intetresting in compiler, it is difficult too.Could you give some advise or sugestion.Thank you very much.
Posted by: Lin zhi hong | 2010.07.01 at 10:09 PM
Dear Lin,
The best way to choose among two languages is to learn both first.
Learning Python makes learning Perl easier, and vice versa, so my advice would be start with learning from whatever your friend knows, and learn the other one so your friend can learn from you. :-)
The Perl 5 Wiki has some information in books and online tutorials that you may find useful:
http://www.socialtext.net/perl5/?perl_5_wiki#how_to_find_more_information
Besides the excellent published books cited above, there is an upcoming book, "Modern Perl", that introduces a modern, concise and useful part of the Perl 5 language. Draft chapters are here:
http://www.modernperlbooks.com/mt/2010/06/modern-perl-the-book-the-draft.html
As for compilers, my first book on that topic was "Types and Programming Languages" by Benjamin C. Pierce; it's a nice book and I sincerely recommend it.
Hope that helps! :-)
Posted by: audreyt | 2010.07.02 at 03:01 AM