http://lua-users.org/wiki/LuaVersusPython
簡介
Python是一種非常流行的編程語言。Python和Lua都經(jīng)常被用作為應(yīng)用程序提供腳本支持。
腳本經(jīng)常會被用在游戲開發(fā)中。選擇一個腳本語言需要考慮很多的因素。簡單來說,你可以根據(jù)你的目標(biāo)平臺的體系結(jié)構(gòu)來決定,他們可能是PC,或者游戲機(jī)。假設(shè)你有頂級的高速CPU,虛擬內(nèi)存和硬盤,龐大的Python庫資源可以幫助你快速的完成工作。否則,Python并不是一個好的選擇。
一般性比較
以下通過列舉Python和Lua各自的優(yōu)勢,進(jìn)行一個簡單的比較:
Python
- 裝備齊全。擁有龐大而實用的庫。對于一些離線工作非常有幫助,比如工具腳本。擁有大量分類示例腳本,教程,幫助和參考資料。
- 通過支持真正多維數(shù)組的擴(kuò)展模塊可以進(jìn)行極高效的數(shù)學(xué)計算。嚴(yán)格的說,Lua本身沒有數(shù)組,只能使用table結(jié)構(gòu)。
- Lua數(shù)組本身就是table。table具有雙重屬性,專門為(1..N索引)進(jìn)行了優(yōu)化。
- Lua也不是必須要使用table表示數(shù)組??梢允褂胾serdata來實現(xiàn)自定義的優(yōu)化數(shù)組。
- ctype(起始于Python2.4并且在2.5種調(diào)整到Python核心庫)允許訪問現(xiàn)有的C庫(.so或.dll)
- 有遠(yuǎn)程調(diào)試器。
- Lua具有一個簡單而更加簡約的語法。但是與Python的差別并不是很大。
- Python的string和list都有“切片”語法,能大大提高生產(chǎn)力。
- Python有可擴(kuò)展的Unicode支持
- Python是對whitespace敏感的。有經(jīng)驗的Python開發(fā)者知道一旦適應(yīng),其實不是什么問題。不但不是問題,而且有助于標(biāo)準(zhǔn)化代碼的外觀,增加了各種不同代碼庫的可讀性。對于這個問題的抱怨者一般都不是在每天的工作中需要使用Python。
- Python除了靜態(tài)類型檢查,還有一些其他的除錯方法。而Lua更容易犯錯誤。比如automatic coercion,訪問未設(shè)置的變量不會有異常,必須手動檢測函數(shù)是否為nil而不是通過異常處理。然而這些也可能會帶來一些便利。
- Python具有更多的初級文檔,而Lua到目前為止還很缺乏。
Lua
- 與Python相比具有更小的體積。python22.dll的大小為824kb。而一個基礎(chǔ)的Lua引擎,包括語法分析,編譯器,虛擬機(jī),不包括標(biāo)準(zhǔn)庫,其大小在100kb以下。
- Lua使用更少的內(nèi)存
- 更快的解譯器和JIT編譯器
- 具有非常簡單的API,用于在腳本和C之間進(jìn)行交互,并且需要很少量的黏著代碼。你可以嘗試通過Python的C API創(chuàng)建和操縱列表和字典,然后再嘗試一些Lua
- 不使用復(fù)雜而易錯的引用計數(shù)的對象回收方法。然而對于Python,如果你使用C++,你可以使用Python Boost庫。
- Lua發(fā)源于配置語言。對于創(chuàng)建和配置來所很方便,這正是游戲需要的。
- 與有優(yōu)美,簡單并且強(qiáng)大的語法。對于解決同樣的事情,Lua比Python使用更少的代碼,并且Lua的meta機(jī)制會更靈活。比如,在Lua中,table本身即是list又是dict。一名函數(shù)特別適用于配置,而Python中你只能使用lambda函數(shù)。
- Lua的代碼跟小,更簡單,更穩(wěn)定。雖然沒有Python的文檔和注釋全面,但很容易查看和修改。
- 因為外部模塊很少,Lua很適合被打包到那些有特殊目的,不需要很多功能的應(yīng)用中。而Python的標(biāo)準(zhǔn)庫太龐大了
- Lua本身并不支持多線程。但是一個進(jìn)程中可以包含多個Lua虛擬機(jī),并且每一個可以獨(dú)立的運(yùn)行于一個線程中。所以Lua很適合嵌入到對線程程序中。
- Lua對于whitespace不敏感。雖然這個與Python相比是弱點(diǎn),但是這樣不用擔(dān)心文本編輯器的自動 space to tab轉(zhuǎn)換功能了。
面向?qū)ο?/h2>
Python
- 使用了一個專門的面向?qū)ο缶幊棠P?。Python具有豐富的面向?qū)ο蠊δ苤С?,包括元類,多重繼承等等
Lua
- 沒有專門的面向?qū)ο笙到y(tǒng)。但是可以根據(jù)自己的需要構(gòu)建一個面向?qū)ο笙到y(tǒng)