Lua 原始碼

lua-users home
wiki

wiki 的這一部分允許所有人都能說明文件、解釋、發表問題或對 Lua 原始碼進行註解。你可以連結到 [1] 或貼上題目的程式碼。注意:請註明討論原始碼的版本 (例如 5.1.1),以便在未來 Lua 發佈新版本時不會造成混淆。讨论應優先放在最新的 Lua 版本上,並且更新為最新的 Lua 版本。

原始碼的註解

概觀

模組結構

以下列出 Lua 原始碼中的模組。

這些模組實作工具功能

這些模組實作基本資料類型

這些模組用於分析和產生程式碼

這些模組處理 Lua 位元碼的執行

這些模組實作標準函式庫

這些模組定義 C API

這些模組實作 lua 和 luac 程式

(5.1.3)

程式碼慣例

外部符號的前綴表示其所屬的模組

luaA_ - lapi.c
luaB_ - lbaselib.c
luaC_ - lgc.c
luaD_ - ldo.c
luaE_ - lstate.c
luaF_ - lfunc.c
luaG_ - ldebug.c
luaH_ - ltable.c
luaI_ - lauxlib.c
luaK_ - lcode.c
luaL_ - lauxlib.c/h, linit.c (public functions)
luaM_ - lmem.c
luaO_ - lobject.c
luaP_ - lopcodes.c
luaS_ - lstring.c
luaT_ - ltm.c
luaU_ - lundump.c
luaV_ - lvm.c
luaX_ - llex.c
luaY_ - lparser.c
luaZ_ - lzio.c
lua_  - lapi.c/h + luaconf.h, debug.c
luai_ - luaconf.h
luaopen_ - luaconf.h + libraries (lbaselib.c, ldblib.c, liolib.c, lmathlib.c,
                                  loadlib.c, loslib.c, lstrlib.c, ltablib.c)
(5.1.3)

src/Makefile

在 src/Makefile (5.1.1)中,mingw 目標很特別,因為它只會建立 lua(不建立 luac)。也可以加入 mingw-cygwin 目標。請參考 BuildingLua 中的 mingw 標示,了解解決方法。

在 src/luaconf.h (5.1.1)中,LUA_PATH_DEFAULT 指 LUA_LDIR 和 LUA_CDIR,但 LUA_CPATH_DEFAULT 只指這些的 LUA_CDIRRiciLake 表示這可能是安全性考量,因為 C 模組需要比 Lua 模組更高的信任度。

src/luaconf.h

在 src/luaconf.h (5.1.1)中,有一個 LUA_CDIR"loadall.dll"[3] [4] 中有相關討論。

src/lgc.h 和 lgc.c(垃圾回收器)

請參考 GarbageCollection,以及 EmergencyGarbageCollector 中的說明。

sec/ltable.h 和 ltable.c(表格)

請參考 LuaSourceTable

src/lmathlib.c

BindingCodeToLua 中有部分說明。

請注意,在其他函式庫中也有 "#define lmathlib_c"(以及類似行)的行,這些行純粹是為 luaconf.h 中的條件式而存在(由 lhf 標示)。

此頁面的評論

此頁面目的的註解:一些使用者表示 Lua 原始程式碼文件應該加上較詳細的文件,尤其是像此處所做的,開放讓任何人協助文件編寫。這也與在以下網站中針對 Lua API 中的每個函式的註解,例如 wiki 式方法的建議相關。這可能會需要 wiki 新的部分,其名稱可能是 LuaDoc?、DocLua? 或如果內容夠多,則有像是 DocLuaTostring? 等個別頁面。

我強烈反對使用 wiki 來執行這項工作,原因有幾個,最主要的原因是這項工作無法順利地擴展。我建議將 Lua 上游原始程式碼的核心版本簽入至原始碼控制回存庫,並允許其他人直接將註解簽入至原始碼中(例如您可以針對特定函式、結構成員等加入註解)。如此一來,便可將註解傳遞(透過合併)至未來的 Lua 發行版本。 --JohnBelmonte

-- 這是針對一些與 Rici、Lhf 和 Steinwookie 的討論後提出的看法。我認為這項文件的編修格式不一定是函式/參數/行層級中常見的「doxygen」格式,也不會讓每個函式變得雜亂不堪。Lhf 建議這份文件可以採用更接近於程式設計文件格式的格式。這並非全然不可能。舉例來說,有些書籍會用來解釋 linux 核心原始程式碼,而在 Lua 中,則有 No-frills Intro to Lua 5.1 VM 等教材。另外也認為此文件可能會內建至核心的機率很低,或至少目前沒有這種承諾。--DavidManura

這些論點似乎與 wiki 不是此文件適當媒介無關。到了 Lua 6、7、8 時,當檔案組及其內容變更時,發生什麼事?--John

-- 許多相同的顧慮也適用於 LuaPowerPatches。wiki 可能較為便利/開放。Lua 原始程式碼受到嚴格控制,變動也較為緩慢(例如只在 Lua 核心中的少部分程式碼上套用多個程式碼修補)。也可以在此張貼原始程式碼相關的問題。讓 wiki 內容與不同版本的 Lua 同步,會影響到 wiki 中的大部分頁面,而且這已經造成問題,但解決方式是採用一個簡單的慣例,說明 wiki 內容套用於哪個版本的 Lua。 --DavidManura

請參見


RecentChanges · 偏好設定
編輯 · 歷史
最後編輯於 2023年8月14日 星期二 下午11:15(格林威治標準時間) (差異)