将Walter Bright帶往寫一門語言、現在排在前20名的道路是從好奇開始的——也有侮辱。

我喜歡弄清楚事情是如何運作的,并從非常早期的階段設計它們(我愛Tom Swift系列的書【注1】)。早期,我知道我自己在設計火車頭或施耐德杯賽車。我的學位是機械工程。但是機械工程讓我沮喪,因為建造任何東西都有昂貴的代價,以及我的糟糕至極的建造水準。
在另一方面,程式設計,我可以建造能想象到的最錯綜複雜的機器,零成本,隻需要計算機通路。和很多程式員一樣,我開始開發遊戲。開發遊戲的動機是某種上帝情節——你能夠創造完整的、奴隸般地遵守你規則的一個世界。在遊戲《
Empire》裡,我不僅僅創造了這樣的世界,而且花了無數小時規劃如何讓計算機更好地操作敵方軍隊。甚至到了今天,我仍然在考慮優化的方法。
然而,問題在于計算機政策對計算機性能的渴求遠遠超過了可用機器的能力,是以我對編譯器如何優化代碼産生了興趣。編譯器好像喜歡徹底的、充滿魔力的裝置,它把源代碼轉化成機器碼。這個魔術究竟如何實作的?在《BYTE》雜志把源代碼釋出到Tiny Pascal之前,這是宇宙中非常神秘的東西。我研究了程式的每一行代碼;在掌握之後,我覺得我拿到了通往聖殿的密碼。
過了幾年。在80年代早期,我發現我自己成為了面向MS-DOS開發軟體的開發小組成員。我們都用C,因為它是唯一的進階語言,我們發現它事實上能夠在PC上運作。其它語言實作令人難以置信地糟糕。甚至C編譯器也是讓人讨厭的,但至少它們是可用的。它們産生的代碼非常可怕,不存在優化。我産生了一個想法,我自己能夠寫一個更好的C編譯器。
我向一個同僚透漏了這個想法,他建議我和他,還有一個當地C的大牛一起吃午餐,該大牛将給我如何開展的一些建議。我們過去了,我的朋友向這位大牛介紹了我的宏大目标。他鄙視我的回答一直刻在我的腦子裡,“你到底算老幾,你居然認為你能寫一個C編譯器?”
現在想想我不得不感謝他,因為我發現 向他炫耀的欲望成為了最有力的動機。我開始實作C編譯器,也就是廣為人知的Datalight C。感謝我在優化上的興趣,它成為PC上第一個擁有資料流(data-flow)的優化編譯器。這樣一個概念當時太新了,以緻于在PC雜志基準陷入了麻煩,因為編譯器認為基準什麼也沒有做而删除了所有的廢棄代碼——記者誤認為我的編譯器有問題,或作假,Datalight C得到了一個負面評論。(當然,這使我更加瘋狂,那個年代還沒有随處可用的網際網路,我無法發表辯駁文章。)
後來被轉化為Zortech C。那時候,PC上已經有很多其他的C編譯器了(我想那時候有30個)。我調查一番找到了競争優勢,在書店發現了Bjarne Stroustrup的書。我想,“嗯,加一堆新的關鍵詞,數月之内,我将有一個C++編譯器!”可能是看輕了那個程式設計的世紀。如果我知道我面臨什麼,或許我會相信那個說我做不到的人。
不管如何,80年代末很多人正工作在C的繼任者上。
你甚至在那時的新聞討論區裡找到引用叫做“D”的項目。由于各種原因,包括Zortech的一款便宜的C++編譯器準備登陸最流行的平台,C++埋葬了其它的語言,并統治了90年代的程式設計;我深受鼓舞。
随着時間的推移(那時候是90年代),我也寫了生成原生代碼的Java編譯器和一個JavaScript編譯器/解釋器。這些産品不夠成功。我注意到,忙于我需要的東西 要比 忙于我被告知的其他人需要的東西 好一點點。
比如,一天我和一個程式員朋友慢跑時,他說,“世界急切追求的是能生成原生代碼的Java編譯器。你會是以發大财的!我使用Java,它是真正的必需品。”我告訴他,碰巧了,我寫了一個,他馬上就可以開始使用。當然,他從來沒有用。
我發明了《Empire》遊戲是因為它是我想玩的遊戲。我開發一個C編譯器是因為我需要用來開發《Empire》(和其它項目)的較好的編譯器。Java和JavaScript編譯器是其他人的想法。不過還是回到D的出處。
沒有人工作在編譯器上超過15年,而不會産生語言優化的想法。我嘗試了C和C++編譯器的很多語言優化,它們都太平常了。沒有人對語言擴充感興趣,他們想要标準的可編譯的語言,他們是對的。不幸的是,得到能夠被标準委員會采用的想法是一個費力的、常年官僚的過程——我忍受不了這個過程。
在1999年,我認為我累了,在我變瘋之前我花了6個月看電視。
是時候傳回生活了。對于現存語言存在問題的抱怨由來已久了;我決定給機器商店通電。當解決這樣的問題時,我總是想起
Gimli矮人【注3】:“死亡是一定的,有小的成功機會。我們還等什麼?”為什麼不是呢?至少我手握長劍,為光榮的戰争而戰鬥。
是以D啟程了,踉踉跄跄做為一個獨立的項目。如果我沒有為某種語言寫過編譯器,我用它程式設計就從來不覺得舒服(我知道,又一個怪癖),但是我有足夠的經驗實作各種語言,以緻于我對讓D運作起來非常有信心。如今我也充分利用了現存C++編譯器生态系統來工作。
數年後,D首次出現在Slashdot,它開始快速地引起了使用者和貢獻者的注意。事實證明,我在從一種語言想要的東西中,很難成為一個唯一的人!D和全世界的貢獻者一道,懷着雄心瘋狂地成長。甚至在數月前的Dconf2013大會上,我們才知道彼此是什麼樣子。(這是網際網路革命的最偉大的方面:你能夠成功地與其他人協作,而不知道他們的性别、年齡、長相、種族、宗教、語言、文化、殘疾、曆史等等。它純潔得像知識界的精英。隻有你的想法、貢獻以及你如何展示自己。)
就像D的情況,沒有網際網路它就不能存在。其他完全不具可比性的熱心人怎樣才能走到一起?像github和bugzilla之類的協作工具的崛起對于D的發展起到了絕對的關鍵作用(當然,還有開源模式!)。
但是我也不得不學習,經常是痛苦的方式:
- 我的天性趨向于單打獨鬥。我曾經在各種工作得到的績效考評,通常包含了像“Walter需要學習與其他人更好地工作”之類的話。我一度幾近瘋狂地急切地想控制D社群的一切,我不得不改變了。
- 我不得不學習如何管理都是志願者參與的項目。既然我不支付給任何人報酬,我就不能要求任何人做任何事情。我不得不找到其它方法。我的性格測試非常靠近“呆子”的排名,是以激勵别人于我而言不是自然的。這實際上是一個令人着迷的挑戰。
- 在D論壇,對新語言特性的建議每天都有。我不得不說太多“不”,真很難說出口,讓提建議的人聽到也比較痛苦。
- 管理是一件苦差,我不太适應。我在Zortech就沒有做好這個工作;在各種合作的工作中,我(英明地)從來沒有被晉升到管理。但是有了D,這不能回避了——我不得不學習如何管理,因為我想讓D走向成功。
- 我朋友知道,我熱愛辯論。我參與了很多網上的口水戰。但是我在D論壇不能那樣做,因為根據口水戰的結果,沒有人曾經改變過他們的想法,不管他們錯得有多嚴重:-)。所有這些經驗實際上變成了一個奇妙的優勢——我能夠分辨出一個交談文章在什麼時候将開始演變成徒勞的争論,然後采取措施來降溫并消除掉。
我仍然不得不與急切的”Shields up! Phasers on vaporize!”願望戰鬥。當然,當D論壇的任何人都同意時,這對我就成為一件進行中的工作。D過去是、并繼續保持一種令人尖叫的體驗,它從很多其它語言借鑒了最好的想法,它也是來自世界各地的很多、很多貢獻者的大量的、無私的努力的總和,他們一直隻是以他們完成的成就為自豪。
所有這一切産生了一個結果,我特别珍惜,我愛用D程式設計。它是我希望我能一直擁有的語言。我很開心我沒有聽唱反調的人、Debbie Downers,當然還有多年前的無名的C大牛,我欠他們一個感謝。
那麼,你想編寫你自己的語言嗎?我所能說的全部就是:死亡是一定的,有小的成功機會。你們還等什麼?
注1:Tom Swift:
http://en.wikipedia.org/wiki/Tom_Swift http://en.wikipedia.org/wiki/TomX8XSwift
注2:Computer Strategy Game 戰略遊戲(也叫政策遊戲)是一種廣泛存在于圖闆遊戲、電視遊戲和電腦遊戲的遊戲形式。它要求遊戲的參與者“擁有”做出決策的能力。在戰略遊戲中,決策對遊戲的結果産生至關重要的影響。戰略通常是與運氣相對的,然而,很多遊戲既包含戰略成分又包含運氣成分,這給戰略遊戲的劃分帶來一定的困難。是以,我們可以用遊戲的戰略成分來描述這個遊戲。
注3:
http://zh.wikipedia.org/wiki/%E7%9F%AE%E4%BA%BA_%28%E4%B8%AD%E5%9C%9F%E5%A4%A7%E9%99%B8%29 http://zh.wikipedia.org/wiki/矮人_(中土大陸)