標籤:

比較Lua和Go語言

原文是double column排版,不適合知乎專欄的版面。原文在 lua-vs-go/lua-vs-go.html at master · wangkuiyi/lua-vs-go · GitHub。PDF版本在這裡 github.com/wangkuiyi/lu。至於為什麼考慮比較Lua和Go,是有一點點小秘密的。希望不就得將來可以和大家分享。

執行效率

執行效率包括比較兩種語言寫的程序哪個執行更快(考察編譯器中二進位代碼生成和優化演算法的效率),以及消耗的內存更少(考察語言的類型系統及其實現的效率)。從這些角度已經有一些評測結果了,比如:Performance of several languages。從這些評測結果看,LuaJIT和Go compiler的效率差不多,並且和C程序的執行效率也差不多。

我以為合理設計的現代高級語言生成的程序的執行效率恐怕都差不多,尤其像Lua和Go的設計思想都是語法盡量簡單,既方便用戶學習,也簡化編譯器(解釋器)中的代碼優化演算法。

描述能力

兩種語言的描述能力的比較著重於考察用兩種語言描述同一個演算法,哪一個需要的代碼行數較少,並且更可讀(readable)。語言的描述能力很重要,因為簡短可讀的代碼意味著更少的bug,更少的debug時間意味著更高的開發效率和對業務的可控程度。更簡短可讀的代碼也意味著軟體系統更加可維護和可優化。

舉一個例子說明軟體系統的「可維護和可優化」的重要性:按照Jeff Dean的介紹,Google Brain的上一代技術DistBelief是用C++寫的,基於DistBelief的試驗代碼也是C++寫的,一個試驗需要寫的代碼很長,限制了演算法優化的效率。新一代技術Tensorflow雖然核心部分用C++寫,但是組合layers以完成試驗這一步可以用Python,需要的代碼行數少,一目了然,從而贏得了更多用戶的青睞。

在前文貼的描述能力的比較中,絕大多數用Go和用Lua描述,需要的代碼行數是一樣的。

推薦閱讀:

編程語言有類型推斷的話,我們就直接寫 Ruby 直接編譯到二進位了嗎?
D 編程語言是用於開發的絕佳語言的 5 個理由
阻擋你學會 Haskell 最大的兩個問題是什麼?
面向對象編程的下一階段是什麼?

TAG:编程语言 |