【实例简介】
这是云风写的,基于lua5.2版本源代码解析,希望加深lua学习的不要错过
注
这是这本书中其中部分章节的草稿。我不打算按顺序来编写这本书,而打算以独立章节的形式分开完成,
到最后再做统一的调整。由丁业余时间不多,所以产出也不固定。
l
目录
第一章概览
口1源文件划分
12代码风格
L3Lua核心
4代码翻译及预编译字节码
15内嵌库
4
L6独立解析器及字节码编译器
4
了阅读源代码的次序
第二章全局状态机及丙存管理
2.1内存管理
22全局状态机
10
2.2.1
garbage colle
12
see
13
12.2.3 buff
13
2. 2.4 version.
13
22.5防止初始化的意外
14
第三章字符串
17
3,1数据结构
17
3.1.1 Ilash DoS
18
3.2实现
20
3:21字符串比较
20
32.2短字符串的内部化
20
3.3 U
serrata
的构造
22
第四章表
25
4.1数据结构
25
生2算洇
27
,2,1短字符串优亿
29
匡2,2数字类型的哈希们
31
表的迭代
44刈元方法的优化
目录
44.1类型名宇
第五章函数与闭包
39
5,1数原型
5.2 Pval
41
5.3闭包
42
5.31ua闭包
43
3.2C闭包
53.3轻量C函数
46
俤第六章协程及函数的执行
49
6]栈与调用信息
49
6,11数据栈
50
612调用栈
4
63线程
56
62线程的执行与中炘
8
62.1异常处理
622函数调用
60
623钩子
624从C函数中挂起线程.,
67
625挂起与延线
6.261acak和 lua-pcallk
73
627异常处理
76
第七章虚拟机
77
区1指令结构
711常量
7.1.2採作码分类校验
79
71.3操作码列表
80
2字节码的运行
8⊥
7.2.1 luan executel
81
72寄存器赋值
83
7.2.3表处理
724表达式运算
72.5分支和跳转
7.2.6函数调用
.,99
727不定长参数
101
728生成闭包
103
72.9Por循环
72,10协程的中断和延续
108
目录
第八章内置库的实现
111
8.1_从πut模块看Lua的模块注册机制
111
区2math模块API的实现
113
8.3 string
模坝
115
区.4暂且搁置
6
目录
第一章概览
Lua是一门编程语言,Lua官方网提供了由语言发明者实现的官方版朴虽然Lua有简洁清晰的语
言标准,但我们不能将语言的标准制定和实现完全分开看待。事实上、随着官方实现版本的不断更新,Lua
语言标准乜在不断变化
本书试图向读者展现Iua官方实现的细节。在开始前,先从宏观上来看看,实现这门语言需要完成那些
部分的上作
Lua作为一门动态语言,提供了一个虚拟机。Lua代码最终都是是以字节码的形式由虚拟机解释执行的。
把外部组织好的代码置入内存,让虚拟机解析运行,需要冇一个源代码解释器,或是预编译字节码的加载器。
而只实现语言特性,几乎做不了什么事。所以Lua的官方版本还提供了一些库,并提供一系列CAPI,供
第三方开发。这样,Iua就可以借助这些外部库,做一些我们需要的工作。
下面,我们按这个划分来分拆解析。
11源文件划分
从官网下载到Lua52的源代码展开压缩包,会发现源代码文件全部放在sc子日录下。这些文件
根据实现功能的不同,可以分为四部分团
虚拟机运转的核心功能
lapi. cC语言接口
Ectype. c O标准库中 ctype相关实现
Idebug. c Debug接口
ldo.c函数调用以及栈管理
Func. c函数原型及闭包管理
lgc.c垃圾叵收
memc内存管理接口
object c对象操作的些函数
opcodes. C虚拟机的字节码定义
Istate. c全局状态机
Ta是一个以 MiT license发布的开源项目,你可以自由的下载、传播、使用它,它的官方网站是:htp://w1a
2Lua官方实现并不是对Lua语言的唯一实现。另外比较流行的Lua语言实现还有LuaI(htp:/w. wait
由于采用了JI技
术,运行性能更快。除此之外,还能在互联网上找到其它一些不同的实现。
3本书讨论的Lua5.2.2版可以在http://www.lua.org/ftp/lua-5.2.2.tar
g2下载获得
4在Ludwik上有一篇文章介绍了La源代码的结构http://lua-users.org/wiki/luasource
第一章概览
string.c宇符串池
Itable.c表类型的相关操作
ltm.c元方法
lvm.c虚拟机
lzio.c输入流接口
2.源代码解析以及预编译字节码
Icode. c代码生成器
Dump. c序列化预编译的Tna字节
llex,C词法分析器
lparser. c解析器
lundump.c还原预编译的字节码
3.内嵌库
lauxlib. c库编写用到的辅助函数库
lbaselib.c基础库
Ibitlib.c位操作库
Icorolib. c协程库
Idblib c debug库
linit.c内嵌库的初始化
liolib c IO库
Imathlib. c数学库
loadlib. c动态扩展库管理
loslib c OS
库
Istrlib. c字符串库
Itablib. c表处理库
4.可执行的解析器,字节码编译器
luac解释器
luac. c字节码编译器
1.2代码风格
Lua使用 Clean c國巴编写的源代码模块划分清晰,大部分模块被分解在不同的c文件中实现,以同
名的h文件描述模块导出的接口,比如, Istring. c实现了Lua虚拟机中字符串池的相关功能,而这部分的
内部接口则在 Istring.h中描述。
5 Clean c是标准C/C++的一个子集。它只包含了C话言中的一些必要特性。这样方便把La发布到更多的可能对C语言支持不完整的平台
上。比如,对于没有 ctype.h的C语言编译环境,Lua提供∫ Ectype.c实现了一些兼容函数。
【实例截图】
【核心代码】