Lua 是一門強(qiáng)大、快速、輕量的嵌入式腳本語言。它由巴西里約熱內(nèi)盧 Pontifical Catholic 大學(xué)的PUC-Rio團(tuán)隊(duì)開發(fā)。 Lua 是一個(gè)自由軟件, 廣泛應(yīng)用于世界上無數(shù)產(chǎn)品和項(xiàng)目。
安裝 Lua
Lua 以源代碼的形式發(fā)布,使用之前,你需要構(gòu)建它。 構(gòu)建 Lua 非常簡(jiǎn)單,因?yàn)?Lua 是用純粹的 ANSI C 實(shí)現(xiàn)的,在所有具備 ANSI C 編譯器的平臺(tái)都可以直接編譯。 同時(shí),Lua 也可以直接以 C++ 形式編譯。 下面介紹了類 Unix 平臺(tái)上的構(gòu)建流程,另有其它系統(tǒng)構(gòu)建介紹與配置選項(xiàng)以作參考。
如果你沒有時(shí)間或興趣自己編譯 Lua,可以從LuaBinaries獲取編譯后的二進(jìn)制文件 或者從LuaDist這里獲取 Lua 的多平臺(tái)發(fā)布版(自帶電池)。
構(gòu)建 Lua
在大多數(shù)類 Unix 平臺(tái)上,輸入 "make" 加上合適的平臺(tái)名即可。步驟如下:
打開一個(gè)控制臺(tái)窗口,切換到lua-5.3.0目錄。 目錄下的Makefile文件內(nèi)包含了構(gòu)建與安裝流程。
運(yùn)行 "make" 并查看你的平臺(tái)是否列在其中。 當(dāng)前支持的平臺(tái)有:
aix bsd c89 freebsd generic linux macosx mingw posix solaris
如果你的平臺(tái)在其中,運(yùn)行 "make xxx" 即可,xxx 代表你的平臺(tái)名。
如果你的平臺(tái)不在其中,先嘗試最相近的平臺(tái),再按 posix generic c89 順序依次嘗試。
編譯過程很短,最終在src目錄下生成三個(gè)文件: lua (解釋器), luac (編譯器)和 liblua.a (靜態(tài)庫) 。
構(gòu)建完成后,可以運(yùn)行 "make test" 來檢查是否成功。 它會(huì)運(yùn)行解釋器并打印版本號(hào)。
如果你是 Linux 系統(tǒng)并出現(xiàn)了編譯錯(cuò)誤,請(qǐng)確認(rèn)你是否安裝了readline(也可能叫l(wèi)ibreadline-dev或者readline-devel)開發(fā)包。 之后,如果還有鏈接錯(cuò)誤,嘗試 "make linux MYLIBS=-ltermcap" 。
安裝 Lua
一旦你構(gòu)建完畢,可能希望把 Lua 安裝到系統(tǒng)默認(rèn)位置, 那么執(zhí)行 "make install" 即可。 系統(tǒng)默認(rèn)位置以及如何安裝都定義在Makefile中。 這個(gè)過程可能需要有相關(guān)的權(quán)限。
運(yùn)行 "make xxx install" 可以構(gòu)建和安裝一步到位,xxx 指你的平臺(tái)名。
如果你想把 Lua 安裝在本地,運(yùn)行 "make local"。 它會(huì)創(chuàng)建一個(gè)install目錄,內(nèi)有bin,include,lib,man,share,子目錄,并將下列文件安裝在其中。 如果你想安裝到本地其它目錄, 運(yùn)行 "make install INSTALL_TOP=xxx",xxx 指你選擇的目錄。 由于安裝過程中會(huì)切換到src以及doc目錄進(jìn)行, 所以當(dāng) INSTALL_TOP 不是絕對(duì)路徑時(shí)務(wù)必小心。
bin:
lua luac
include:
lauxlib.h lua.h lua.hpp luaconf.h lualib.h
lib:
liblua.a
man/man1:
lua.1 luac.1
這些是開發(fā)時(shí)需要的目錄。 如果你僅僅想運(yùn)行一些 Lua 程序, 那么只需要bin和man下的文件。include和lib下的文件用于將 Lua 嵌入 C 或 C++ 程序。
定制
有三類定制,可以通過編輯文件完成:
怎樣安裝 Lua 以及安裝到哪里 — 編輯Makefile。
怎樣構(gòu)建 Lua — 編輯 src/Makefile。
Lua 特性 — 編輯src/luaconf.h。
其實(shí)你不必編輯 Makefile 文件,make 的時(shí)候在命令行指定相關(guān)變量即可。 當(dāng)然,編輯保存 Makefile 可以給定制留個(gè)記錄。
另一方面,如果你需要定制一些 Lua 特性,那就需要在構(gòu)建安裝 Lua 前 編輯src/luaconf.h。 編輯過的文件必須確保一致性,也就是只安裝在一個(gè)地方, 讓所有你編譯出來的用到 Lua 的程序都使用這唯一的這一份。 專家可以通過編輯 Lua 源代碼來定制更多的東西。
在其它系統(tǒng)上構(gòu)建 Lua
如果你不使用常規(guī)的 Unix 工具,那么構(gòu)建 Lua 的流程就取決于你使用的編譯器。 你需要?jiǎng)?chuàng)建若干工程來構(gòu)建庫,解釋器以及編譯器等。請(qǐng)把下列源文件加入相關(guān)工程:
庫:
lapi.c lcode.c lctype.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c ltable.c ltm.c lundump.c lvm.c lzio.c lauxlib.c lbaselib.c lbitlib.c lcorolib.c ldblib.c liolib.c lmathlib.c loslib.c lstrlib.c ltablib.c lutf8lib.c loadlib.c linit.c
解釋器:
library, lua.c
編譯器:
library, luac.c
把 Lua 以一個(gè)庫形式用于你的程序,你需要知道如何用你的編譯器創(chuàng)建庫和使用庫。 比如,以動(dòng)態(tài)加載的 C 庫形式使用 Lua,你需要了解如何創(chuàng)建動(dòng)態(tài)庫并讓 Lua API 函數(shù) 在動(dòng)態(tài)庫中可見 —不要將 Lua 庫鏈入每個(gè)動(dòng)態(tài)庫。 在 Unix 下,我們建議把 Lua 庫靜態(tài)鏈入宿主程序,然后將符號(hào)導(dǎo)出用于動(dòng)態(tài)鏈接;src/Makefile就是這樣處理 Lua 解釋器的。 在 Windows 下,我們建議把 Lua 庫編譯成一個(gè) DLL 。 無論怎樣,編譯器 luac 都應(yīng)該靜態(tài)鏈接。
正如上面所述,你可以在構(gòu)建 Lua 前編輯src/luaconf.h以定制一些特性。
Lua 5.3主要變化:
整數(shù) (默認(rèn) 64 位)
32 位整數(shù)的官方支持
位操作符
基本的 utf-8 支持
值的打包及解包函數(shù)
以下是Lua 5.3 引入的其它變更:
語言
用戶數(shù)據(jù)可以是任意 Lua 值
整數(shù)除法
某些元方法有了更加靈活的規(guī)則
庫
ipairs以及表處理庫都會(huì)考慮元方法
string.dump多了裁減選項(xiàng)
表處理庫考慮了元方法
新函數(shù)table.move
新函數(shù)string.pack
新函數(shù)string.unpack
新函數(shù)string.packsize
C API
簡(jiǎn)化了延續(xù)點(diǎn) API
lua_gettable以及類似函數(shù)會(huì)返回結(jié)果的值類型
lua_dump增加了裁減選項(xiàng)
新函數(shù):lua_geti
新函數(shù):lua_seti
新函數(shù):lua_isyieldable
新函數(shù):lua_numbertointeger
新函數(shù):lua_rotate
新函數(shù):lua_stringtonumber
Lua 獨(dú)立解釋器
可以做計(jì)算器使用;不再需要前置 '='
arg表對(duì)所有代碼都可