工程
api:
lua.h lua.hpp
application:
lua.c luac.c
aspect:
ldebug.c ldebug.h lgc.c lgc.h lmem.c lmem.h
constants:
ljumptab.h llimits.h lprefix.h luaconf.h
controller:
lbaselib.c lcorolib.c ldblib.c liolib.c lmathlib.c loadlib.c loslib.c lstrlib.c ltablib.c lualib.h lutf8lib.c
depends:
lauxlib.c lauxlib.h
entity:
lstate.c lstate.h
filter:
linit.c
lang:
lctype.c lctype.h lfunc.c lfunc.h lobject.c lobject.h lstring.c lstring.h ltable.c ltable.h ltm.c ltm.h
runtime:
lapi.c lapi.h lcode.c lcode.h ldo.c ldo.h llex.c llex.h lopcodes.c lopcodes.h lopnames.h lparser.c lparser.h lvm.c lvm.h
tools:
ldump.c lundump.c lundump.h lzio.c lzio.h
1 模块
模块 | 功能 | 前缀 | 说明 |
lapi.c | C语言接口 | lua | lua是一门嵌入式语言,可以和宿主机系统相结合。所以必须提供和宿主机系统交互的API,这些API以C函数的形式提供 |
lctype.c | C标准库中ctype相关实现 | ___ | ___ |
ldebug.c | debug接口 | ___ | ___ |
lgc.c | 垃圾回收 | luaC | 垃圾回收机制 |
ldo.c | 函数调用以及栈管理 | luaD | 函数的调用 |
lstate.c | 全局状态机 | luaE | lua虚拟机当前的状态,全局State引用了整个虚拟机的所有数据 |
lfunc.c | 函数原型及闭包管理 | luaF | 数据类型function |
lmem.c | 内存管理接口 | luaM | 基础设备:内存管理 |
lobject.c | 对象操作的一些函数 | luaO | 数据类型 |
lopcodes.c | 虚拟机的字节码定义 | ___ | 控制了lua虚拟机的行为 |
lstring.c | 字符串池 | luaS | 数据类型string |
ltable.c | 表类型的相关操作 | luaH | 数据类型table |
ltm.c | 元方法 | luaT | Tag Method 元表的处理 |
lvm.c | 虚拟机 | luaV | 定义了虚拟机对opcode的解析和运作 |
lzio.c | 输入流接口 | luaZ | 带缓冲的流处理 |
模块 | 功能 | 前缀 | 说明 |
llex.c | 词法分析器 | luaX | 外部输入的文本程序代码需要经过解析得到内部的数据结构(关键字集合) |
lparser.c | 语法解析器 | luaY | 外部输入的文本程序代码需要经过解析得到内部的数据结构(常量opcode的集合) |
lcode.c | 代码生成器 | luaK | 解析完外部文本代码,还需要最终生成虚拟机理解的数据 |
ldump.c | 序列化预编译的lua字节码 | luaU | 为了加快代码翻译的流程,可以采用预编译的过程,把运行时编译的结果生成字节码 |
lundump.c | 还原预编译的字节码 | luaU | 为了加快代码翻译的流程,可以采用预编译的过程,把运行时字节码生成编译的结果 |
模块 | 功能 | 前缀 | 说明 |
lauxlib.c | 库编写用到的辅助函数库 | ___ | ___ |
linit.c | 内嵌库的初始化 | ___ | ___ |
loadlib.c | 动态扩展库管理 | ___ | ___ |
lbaselib.c | 基础库 | ___ | ___ |
lbitlib.c | 位操作库 | ___ | ___ |
lcorolib.c | 协程库 | ___ | ___ |
ldblib.c | debug库 | ___ | ___ |
liolib.c | IO库 | ___ | ___ |
lmathlib.c | 数学库 | ___ | ___ |
loslib.c | OS库 | ___ | ___ |
lstrlib.c | 字符串库 | ___ | ___ |
ltablib.c | 表处理库 | ___ | ___ |
嵌入式语言可以不提供库及函数,全部由宿主系统注入到State中即可,但是lua官方版本提供了少量的库,
比如一些基础函数,如pairs、error、setmetatable、type等。lua允许自由加载需要的部分,以控制最终
执行文件的体积和内存的占用量。
(1)lualib.h,主动加载这些内嵌库进入lua_State是在lualib.h中的API实现。
(2)loadlib.c、limit.c:在lua 5.0之前,lua并没有统一的模块管理机制,因为早期lua定位是嵌入式语言,后来人们
倾向于把lua作为一门独立的编程语言来使用,那么统一的模块化管理就变得很由必要,这样才能让丰富的第三方库可以
协同工作。在lua 5.1引入了官方推介的模块管理机制,require、module,并允许从C语言编写的动态库中加载模块,
在lua 5.2做了简化。我们可以在loadlib.c中找到实现,内嵌库的初始化API则在limit.c中找到。
(3)lib.c,其他的基础库在lib.c为后缀的文件中实现。
模块 | 功能 | 前缀 | 说明 |
lua.c | 解释器 | ___ | run text OR binary 早期lua主要在嵌入式系统中使用,所以源代码通常被编译成动态库或静态库被宿主机系统加载或链接,但随着lua第三方库越来越丰富,人们开始把lua作为一门独立的语言来使用,lua的官方版本里提供了一个单独的解析器 |
luac.c | 字节码编译器 | ___ | text >> binary 一个简单的字节码编译器,可以预编译文本的lua源程序。 |
2 运行时流程
