我心目中理想的程式語言

蔡學鏞發表於2014-01-24

  一個好的程式語言應該讓你馳騁在自己的腦海中,自由飛翔,而不是設定重重障礙拖累你。除了這個籠統的說法之外,我自己有一套語言評分標準,我理想中的語言必須符合這篇文章所描述的各點(依重要次序排列)。你也可以拿這些條件來檢視目前你正在使用的語言(例如 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,讓程式可在瀏覽器內執行。

  我到現在還沒有找到完全符合這些條件的語言。或者,你已經發現了這樣的語言?

相關文章