為什么我選擇 Lua ?
在這篇文章中,我將向你解釋為什么要使用Lua。我寫這篇文章最初的動機是由于Lua郵件列表中的一則消息 “why isn't Lua more widely used?” 。針對這個消息的回復各種各樣,有的說是因為缺少類庫,而我更贊同另外一個觀點,那就是大部分人都不喜歡自己動手 (do it yourself)的方式來解決問題。我常常把Lua比作Arch Linux。這也就注定了Lua是一個小眾產品。下面我將列出幾條為什么我要使用Lua的理由:
1. 可以和 C/C++ 集成
我 的編程經歷不長,但是我已經使用過很多種語言了,包括Lisp,Scheme,Python,Perl,Bash,VBA,SQL等等。但是它們沒有一個 可以像Lua那樣可以和C混著使用。C語言的API非常的干凈和直觀,你花一個下午的時間就可以上手了。如果你對這個感興趣的話,你可以看看“PIL's section on the C API” 。
為 什么這個特性很重要呢?首先,如果你有現成的C/C++類庫的話,你可以很容易的在Lua中調用這些API。或者你也可以寫一個腳本讓Lua在C中執行。 這也意味著Lua的程序不會有速度問題。如果你還是覺得Lua不夠快的話,你可以用C完全重寫這段代碼。雖然別的語言的程序也可以用C重寫,但是我還沒有 發現誰能比Lua更方便的做到這一點。
2. 快速、簡潔
相比于其他語言,Lua的實現是非常高效的。也許是因為Lua使用的是“基于寄存器的虛擬機” 而不是基于堆棧的虛擬機。或者說使用Lua的開發者都非常的牛逼。不管怎樣,你幾乎不需要顧慮Lua代碼的性能問題。
但是如果你對性能還是不滿意的話,你可以嘗試使用LuaJIT:
“LuaJIT是公認的運行最快的動態語言的實現,并且對內存的使用少,虛擬機占用低于125K,JIT編譯器占用不到85K (在x86環境中)。”
LuaJIT可以幾乎和C代碼餓速度媲美。不管怎樣,如果你還是對速度不滿意的話,你可以試試我在第一點中提出的建議。
3. 教育作用
雖然這不是一個編程語言的功能,但是我發現使用Lua讓我對計算機科學的整體了解有所提高。比如說,這篇文章是關于 Lua 5.0 的實現的,讓我對虛擬機是如何實現的有了一個了解。閱讀源代碼讓我大開眼界。我認為這一切都得益于Lua有條不紊的改進
4. 函數式編程
Lua 提供了函數式編程的架構,讓編程更加的有趣。例如 anonymous functions, higher order functions, lexical closures,proper tail calls等等。這些特性不是語言的一些語法糖,而是Lua從底層就整合了這些特性。比如說,Lua的每一個方法都是一個值(比如數字2,或者字符串 “ktr”),也就意味著每一個方法都是匿名的。你只要給它取個名字,然后你就可以調用它了。你可以給print重新賦值:
print = math.sin
你可以利用這個功能創建沙箱。如果print是一個危險的操作,你可以替換成你自己的print方法或者從全局中刪除這個方法。
5. 任何東西都是一張表
在Lua中,任何一個變量類型都是一張表,例如Array,Hash,“module”或者全局變量等等。也就是說你可以“require”一些模塊(類似Python的import語句)并且把結果當錯table來處理。在Python中,你可以 __import__('...') 一些模塊,然后返回值的變量就可以通過類似 var(module) 的方式來訪問。在Lua中,你可以通過 module[var] 的方式來訪問模塊中的變量。我這里提到Python是為了強調不同之處,說明Lua更容易使用。
這也讓你學習Lua的語法更加快速。你不用擔心list和dictionary、package有什么不同。
6. 一致性
不 知你是否意識到,Lua是非常一致的語言。它的很多功能都是做的恰到好處。比如說,Lua沒有“for”循環直到Lua 4.0,也就是Lua語言發布7年以后。這是因為while循環更為通用,而且語法更簡潔。Lua的開發團隊相對來說比較保守,他們不接受patch,所 以Lua的進化比較緩慢,但是比較平穩。你知道所有的功能都是有規劃的在進行,也就意味著你不能指望你所期待的功能可以被很快的實現。
7. 可移植性
關于這一點我不會講很多細節,但是Lua基本上可以在任何環境中運行。Lua的代碼是按照“Clean ANSI C”的標準編寫的,所以如果你有一個C的運行環境,你就可以運行Lua。
總結:Lua是一門非常簡單但是強大的語言。
原文鏈接,OSChina 原創編譯