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