Lua 源码

lua-users home
wiki

Wiki 的这一部分允许任何人记录、解释、发布问题或对 Lua 源码进行评论。您可以链接到 [1] 或粘贴相关的代码。注意:请说明您正在讨论的源码版本(例如 5.1.1),以便在 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_LDIRLUA_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(垃圾收集器)

请参阅 GarbageCollectionEmergencyGarbageCollector 中的描述。

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

请参阅 LuaSourceTable

src/lmathlib.c

这在 BindingCodeToLua 中有所描述。

注意:行“#define lmathlib_c”(以及其他库中的类似行)仅用于 luaconf.h 中的条件语句(由 lhf 指出)。

此页面的评论

关于此页面目的的说明:一些用户表示 Lua 源代码应该有更好的文档,特别是像这里所做的那样,允许任何人参与其中。这也与一个建议有关,即对 Lua API 中的每个函数进行更像维基的注释,就像下面网站所做的那样。这可能需要一个新的维基部分,可能命名为 LuaDoc?、DocLua?,或者像 DocLuaTostring? 这样的单个页面,如果内容足够多的话。

我强烈反对使用维基作为这种方式的媒介,原因有很多,主要原因是它无法很好地扩展。我建议将 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 · preferences
edit · history
最后编辑于 2023 年 8 月 14 日下午 11:15 GMT (diff)