主動學習各種新程式語言是我的習慣,我經常到PLnews網站上,看看各種語言的消息,我自己有一套語言評分標準,我理想中的語言必須符合這篇文章所描述的各要點(依重要性依序排列)。不過,我到現在都還沒有找到完全符合這些嚴苛條件的語言。

支援Unicode:雖然Unicode早就已經是主流,但是還有許多語言不支援Unicode,這是相當重大的缺點。許多語言即使號稱支援Unicode,也有支援程度上的差異,例如:有的語言對Unicode的支援是添加上去的,有點格格不入,有些語言則對Unicode的支援相當有限。

寫一次,任何地方都可以執行(Write once, run anywhere):該語言最好能跨平臺執行,支援Windows、MacOS、Linux、BSD等主流OS,甚至最好能支援Windows Mobile、Symbian等手機的OS。

超小的執行環境:現在的軟體都大得很可怕,幾乎所有的語言,都需要10MB以上的執行環境,而30MB以上的也不少見。執行環境太大會有以下缺點:(1)下載、安裝時耗費時間與資源;(2)執行速度「可能」會比較差;(3)潛藏其中的bug「可能」比較多。

包含GUI:大多數Open Source的語言,都不包含GUI(Graphical User Interface,圖形使用者界面),而是使用外部的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:我希望語言具有豐富的資料型別,能夠用Literal的方式寫出這些型別的值,如此一來,程式碼寫起來會非常簡短方便,表達力更好,並可能有讓DSL的設計更容易等優點。

輕量級的RPC/SOA:該語言能夠支援RPC(Remote Procedure Call,遠端程序呼叫)/SOA(Service-Oriented Architecture,服務導向架構),只需使用輕量級的方式就好,不需要像IBM的SOA那麼複雜。

支援RIA:能夠支援RIA(Rich Internet Application)技術,提供瀏覽器外掛,讓程式可以在瀏覽器內執行,也可以獨立於瀏覽器而執行。不過,前提是必須提供許多網路標準協定,例如HTTP。

有互動模式:對於初學者來說,互動模式是相當好的學習方式,而且也可以當作Shell,進行日常一些基本的操作(例如檔案系統管理)。

免費與開放源碼:軟體開發成本相當高,使用免費軟體可以節省一部分的成本。另一方面,開放源碼的語言比較有保障,比較不會因為廠商關門而使得該語言產品的用戶變成孤兒。

組織堅強的社群:社群可以幫我們解決技術問題,提供相關資源,幫助語言健康地發展。

以上大致是好的程式語言應該具備的條件,你可以用來檢視你目前使用的語言(例如:Java、C#、Ruby)體質是否夠好,也可以依照個人需求,當作開發語言選擇的評比標準。

作者簡介:
蔡學鏞-技術顧問
清華大學資訊工程碩士,曾任華碩集團軟體工程師、元智大學資訊系講師、美商歐萊禮出版社技術編輯、臺灣微軟特約專欄作家。

熱門新聞

Advertisement