简介
源码包下载后,我们可以看一下lua-5.3.5/src目录下的代码结构。代码结构基本会分3部分
虚拟机核心功能部分
文件 | 作用 |
---|---|
lua.c | lua的可执行入口 main函数 |
lapi.c | C语言接口 |
ldebug.c | Debug 接口 |
ldo.c | 函数调用以及栈管理 |
lfunc.c | 函数原型及闭包管理 |
lgc.c | 垃圾回收机制 |
lmem.c | 内存管理接口 |
lobject.c | 对象操作函数 |
lopcodes.c | 虚拟机字节码定义 |
lstate.c | 全局状态机 管理全局信息 |
lstring.c | 字符串池 |
ltable.c | 表类型的相关操作 |
ltm.c | 元方法 |
lvm.c | 虚拟机 |
lzio.c | 输入流接口 |
源代码解析和预编译
文件 | 作用 |
---|---|
lcode.c | 代码生成器 |
ldump.c | 序列化预编译的Lua 字节码 |
llex.c | 词法分析器 |
lparser.c | 解析器 |
lundump.c | 还原预编译的字节码 |
内嵌库
文件 | 作用 |
---|---|
lauxlib.c | 库编写用到的辅助函数库 |
lbaselib.c | 基础库 |
ldblib.c | Debug 库 |
linit.c | 内嵌库的初始化 |
liolib.c | IO 库 |
lmathlib.c | 数学库 |
loadlib.c | 动态扩展库管理 |
loslib.c | OS 库 |
lstrlib.c | 字符串库 |
ltablib.c | 表处理库 |
每次阅读源码,其实最难的是开始,通过网上各种资料,先把lua的整个目录结构弄明白,幸好lua真的比较小,很容易就能弄明白每个文件是干什么的。接下去就是开始一点一点的啃整个源码的过程了。
啃整个lua语言链路解析过程之前,我会优先把lua周边的库以及虚拟机字节码这块搞明白,然后再开始进行整个解析流程的阅读。