本书基于Lua 5.1.4版本讨论了Lua语言的设计原理,全书共分三部分:前部分讲解数据结构(如通用数据是如何表示的)、字符串以及表类型的实现原理;中间部分是本书重要的部分,主要讨论了虚拟机的实现;第三部分讨论了垃圾回收、模块实现、热更新、协程等的实现原理。
一本揭示Lua实现原理的图书 经典的纯C语言项目分析 一线开发人员倾力打造 Lua是一种可嵌入、轻量、快速、功能强大的脚本语言,使用较为广泛,主要用在游戏领域。另外,基于Nginx的OpenResty也是使用Lua来编写脚本的,很多服务器(如Redis)也支持使用Lua来编写脚本。 作为一门诞生已经超过20年的语言,它在设计上是非常克制的。以Lua 5.1.4版本来说,其解释器加上周边的库函数等也就不过一万多行的代码量,而如果再进行精简,只需要吃透核心的几千行代码就可以了。 另外,作为一门以纯C代码编写的项目,Lua代码优美、结构组织紧凑,是教科书般经典的C语言项目。 本书讨论了Lua的设计原理,首先讲解了数据结构、字符串以及表类型的实现原理,接着讨论了虚拟机的实现,讨论了垃圾回收、模块实现、热更新、协程等的实现原理。 本书适用于以下读者: ● 希望能够进一步了解Lua内部实现原理的用户; ● 对程序语言设计感兴趣的读者。
网名codedump,长期从事互联网后端服务开发工作。曾经在网易等公司从事游戏服务器后台开发,在网络游戏开发工作期间接触到使用C 编写服务核心引擎和使用Lua脚本编写游戏逻辑的技术组合后,对Lua产生了浓厚的兴趣,遂开始研究其实现原理,陆续公布于网络。个人博客:www.codedump.info。
第1章概述 1
1.1前世今生 1
1.2源码组织 5
1.3Lua虚拟机工作流程 6
及时部分基础数据类型
第2章Lua中的数据类型 10
2.1C语言中实现通用数据结构的一般做法 10
2.2Lua通用数据结构的实现 11
第3章字符串 16
3.1概述 16
3.2字符串实现 18
第4章表 24
4.1数据结构 24
4.2操作算法 26
4.2.1查找 26
4.2.2新增元素 27
4.2.3迭代 33
4.2.4取长度操作 33
第二部分虚拟机
第5章Lua虚拟机 36
5.1Lua执行过程概述 36
5.2数据结构与栈 43
5.3指令的解析 46
5.4指令格式 47
5.5指令的执行 53
5.6调试工具 55
5.6.1GDB调试 55
5.6.2使用ChunkSpy 57
第6章指令的解析与执行 61
6.1Lua词法 61
6.2赋值类指令 64
6.2.1局部变量 64
6.2.2全局变量 70
6.3表相关的操作指令 72
6.3.1创建表 72
6.3.2查询表 78
6.3.3元表的实现原理 79
6.4函数相关的操作指令 84
6.4.1相关数据结构 85
6.4.2函数的定义 90
6.4.3函数的调用与返回值的处理 94
6.4.4调用成员函数 99
6.4.5UpValue与闭包 100
6.5数值计算类指令 105
6.6关系逻辑类指令 107
6.6.1相关指令 108
6.6.2理论基础 108
6.6.3相关数据结构及函数 111
6.6.4关系类指令 114
6.6.5逻辑类指令 117
6.7循环类指令 121
6.7.1理论基础 122
6.7.2for循环指令 122
6.7.3其他循环 129
第三部分独立功能的实现
第7章GC算法 132
7.1原理 132
7.2数据结构 135
7.3具体流程 138
7.3.1新创建对象 138
7.3.2初始化阶段 140
7.3.3扫描标记阶段 142
7.3.4回收阶段 147
7.3.5结束阶段 148
7.4进度控制 150
第8章环境与模块 152
8.1环境相关的变量 152
8.2模块 157
8.2.1模块的加载 157
8.2.2模块的编写 159
8.2.3模块的热更新原理 161
第9章调试器工作原理 163
9.1钩子功能 163
9.2得到当前程序信息 164
9.3打印变量 165
9.4查看文件内容 166
9.5断点的添加 166
9.6查看当前堆栈信息 167
9.7step和next指令的实现 167
第10章异常处理 169
10.1原理 169
10.2Lua实现 170
第11章协程 175
11.1概念 175
11.2相关的API 177
11.3实现 180
11.4对称协程和非对称协程 184
附录A参考资料 187