蔡學鏞:我心目中理想的編程語言
一個好的編程語言應該讓你馳騁在自己的腦海中,自由飛翔,而不是設置重重障礙拖累你。除了這個籠統的說法之外,我自己有一套語言評分標準,我理 想中的語言必須符合這篇文章所描述的各點(依重要次序排列)。你也可以拿這些條件來檢視目前你正在使用的語言(例如 Java、C#、Ruby),看看你 的語言表現如何。
【支持 Unicode】
所有不支持 Unicode 的語言,都應該被埋在上個世紀的歷史灰燼中。雖然 Unicode 早就已經是主流,但是還有一些語言不支持 Unicode,這是致命的缺點。即使號稱支持 Unicode,也有程度的差異,例如有的語言對 Unicode 的支持是后來添加的,有點格格不入,且有些語言對 Unicode 的支持相當有限。
【寫一次,到處都可執行】
最好支持 Windows、MacOS、Linux、BSD 等主流 OS,甚至 iOS、Android 等手機 OS。
【支持各種軟件開發】
我希望能用一個語言做系統開發、驅動開發、DLL 開發、應用開發、服務器開發、腳本開發。
【超小的執行環境】
現在的軟件都大得可怕。幾乎所有現代的語言,都需要 10MB 以上的執行環境,而 50MB 以上的也不少見。執行環境太大有什么不好: (1) 下載、安裝時耗費時間與資源; (2) 執行時速度「可能」會比較差;(3) 潛藏其中的 bug「可能」比較多。因此,我極度抗拒癡肥的語言與框架。
【包含 GUI】
大多數 Open Source 的語言,都不包含 GUI,而是使用外部的 Tk、wxWidget 等庫,這些外部庫往往:(1) 相當龐大;(2) 效率「可能」不是很好; (3) 不見得和語言本身的范式(paradigm)吻合,使用起來可能會導致精神錯亂。除了 GUI 庫,我也希望具有比較好的 2D / 3D 繪圖引擎。
【用更少,做更多】
程序寫得越長,不代表越有價值。能夠用精簡的代碼,做出許多重要的事,才是我們追求的目標。寫出來的代碼短,會比較好維護。
【支持 Meta-Programming】
我希望能夠不需要再通過 ANTLR 等工具,而是可以直接用語言本身,輕易地寫程序處理另一種(我自己發明的)小語言,并讓兩種語言之間可以 互相融合,達到最佳的 DSL(Domain Specific Language)境界。如此一來,開發的效率會相當高,且需要的代碼會相當少。
我希望重要的 DSL 都已經有人先建立好了,我可以直接采用,特別是 Web、數據庫、GUI 這些部分。
【好用的剖析器】
現在程序需要剖析文字檔的機會很高,我不喜歡 Regular Expression,也不想用外部的 ANTLR,我希望能有更方便使用的剖析器,讓我可以利用 BNF(Backus- Naur Form)的寫法。
【能夠調用 C 的庫】
許多時候,光靠語言本身還是做不到的事,必須呼叫 OS 或其他廠商的 C 程序庫。如果語言和 C 之間能有良好的調用規范,那么調用外部程序庫就會很容易。我希望不只能調用 C,也可以做成 call-back 函數,讓 C 回調。
【具有良好的 Web 與數據庫方案】
現在做軟件開發,十之八九都是 Web 加上數據庫。如果該語言可以輕易地做出這樣的方案,會相當具有吸引力。
【能嵌入匯編語言】
寫 C 程式時,我們可以嵌入 x86 匯編語言,以提升速度。我希望現在一般的語言也能夠有類似的作法,讓我可以嵌入比較低階的語言,舍棄一些檢查(例如型態檢查,數組邊界檢查),換取速度的提升。
【豐富的數據類型 Literal】
我希望語言能有豐富的數據類型,且能夠用 literial 的方式寫出這些類型的值,如此一來,寫起來非常簡短方便,表達力更好,并可能有其他的好處(例如讓 DSL 的設計更容易)。
可惜目前主流的語言,Literial 的寫法都只有不到 10 種,不外乎是整數、小數、字符串、數組,距離我所謂的「豐富」,還有好幾倍的差距。
【輕量級的 RPC / SOA】
我希望語言能支持 RPC / SOA,且使用輕量級的方式,不要搞得像 IBM 的 SOA 那么復雜。復雜的東西又貴又難上手,失敗告終的機會很高。
【有交互操作模式】
對于初學者來說,交互模式是相當好的學習方式,而且也可以當作 Shell,進行日常一些基本的操作(例如文件系統管理)。
【免費與開放源碼】
軟件開發的錢很難賺,能省則省。另外,開放源碼的語言比較有保障,比較不會因為廠商關門而使得該語言產品的用戶變成孤兒。
【有很強的社群】
社群可以幫我們解決技術問題,告訴我們到哪里取用資源。社群的存在,可以幫助語言健康地發展。
【支持瀏覽器】
代碼可以編譯成 JavaScript/HTML5,讓程序可在瀏覽器內執行。
我到現在還沒有找到完全符合這些條件的語言。或者,你已經發現了這樣的語言?
</div>