本書基于Lua 5.1.4版本討論了Lua語言的設(shè)計原理,全書共分三部分:前部分講解數(shù)據(jù)結(jié)構(gòu)(如通用數(shù)據(jù)是如何表示的)、字符串以及表類型的實現(xiàn)原理;中間部分是本書重要的部分,主要討論了虛擬機的實現(xiàn);第三部分討論了垃圾回收、模塊實現(xiàn)、熱更新、協(xié)程等的實現(xiàn)原理。
一本揭示Lua實現(xiàn)原理的圖書
經(jīng)典的純C語言項目分析
一線開發(fā)人員傾力打造
Lua是一種可嵌入、輕量、快速、功能強大的腳本語言,使用較為廣泛,主要用在游戲領(lǐng)域。另外,基于Nginx的OpenResty也是使用Lua來編寫腳本的,很多服務(wù)器(如Redis)也支持使用Lua來編寫腳本。
作為一門誕生已經(jīng)超過20年的語言,它在設(shè)計上是非?酥频摹R訪ua 5.1.4版本來說,其解釋器加上周邊的庫函數(shù)等也就不過一萬多行的代碼量,而如果再進行精簡,只需要吃透核心的幾千行代碼就可以了。
另外,作為一門以純C代碼編寫的項目,Lua代碼優(yōu)美、結(jié)構(gòu)組織緊湊,是教科書般經(jīng)典的C語言項目。
本書討論了Lua的設(shè)計原理,首先講解了數(shù)據(jù)結(jié)構(gòu)、字符串以及表類型的實現(xiàn)原理,接著討論了虛擬機的實現(xiàn),討論了垃圾回收、模塊實現(xiàn)、熱更新、協(xié)程等的實現(xiàn)原理。
本書適用于以下讀者:
● 希望能夠進一步了解Lua內(nèi)部實現(xiàn)原理的用戶;
● 對程序語言設(shè)計感興趣的讀者。
網(wǎng)名codedump,長期從事互聯(lián)網(wǎng)后端服務(wù)開發(fā)工作。曾經(jīng)在網(wǎng)易等公司從事游戲服務(wù)器后臺開發(fā),在網(wǎng)絡(luò)游戲開發(fā)工作期間接觸到使用C 編寫服務(wù)核心引擎和使用Lua腳本編寫游戲邏輯的技術(shù)組合后,對Lua產(chǎn)生了濃厚的興趣,遂開始研究其實現(xiàn)原理,陸續(xù)公布于網(wǎng)絡(luò)。個人博客:www.codedump.info。
第1章 概述1
1.1 前世今生1
1.2 源碼組織5
1.3 Lua虛擬機工作流程6
第一部分 基礎(chǔ)數(shù)據(jù)類型
第2章 Lua中的數(shù)據(jù)類型10
2.1 C語言中實現(xiàn)通用數(shù)據(jù)結(jié)構(gòu)的一般做法10
2.2 Lua通用數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)11
第3章 字符串16
3.1 概述16
3.2 字符串實現(xiàn)18
第4章 表24
4.1 數(shù)據(jù)結(jié)構(gòu)24
4.2 操作算法26
4.2.1 查找26
4.2.2 新增元素27
4.2.3 迭代33
4.2.4 取長度操作33
第二部分 虛擬機
第5章 Lua虛擬機36
5.1 Lua執(zhí)行過程概述36
5.2 數(shù)據(jù)結(jié)構(gòu)與棧43
5.3 指令的解析46
5.4 指令格式47
5.5 指令的執(zhí)行53
5.6 調(diào)試工具55
5.6.1 GDB調(diào)試55
5.6.2 使用ChunkSpy57
第6章 指令的解析與執(zhí)行61
6.1 Lua詞法61
6.2 賦值類指令64
6.2.1 局部變量64
6.2.2 全局變量70
6.3 表相關(guān)的操作指令72
6.3.1 創(chuàng)建表72
6.3.2 查詢表78
6.3.3 元表的實現(xiàn)原理79
6.4 函數(shù)相關(guān)的操作指令84
6.4.1 相關(guān)數(shù)據(jù)結(jié)構(gòu)85
6.4.2 函數(shù)的定義90
6.4.3 函數(shù)的調(diào)用與返回值的處理94
6.4.4 調(diào)用成員函數(shù)99
6.4.5 UpValue與閉包100
6.5 數(shù)值計算類指令105
6.6 關(guān)系邏輯類指令107
6.6.1 相關(guān)指令108
6.6.2 理論基礎(chǔ)108
6.6.3 相關(guān)數(shù)據(jù)結(jié)構(gòu)及函數(shù)111
6.6.4 關(guān)系類指令114
6.6.5 邏輯類指令117
6.7 循環(huán)類指令121
6.7.1 理論基礎(chǔ)122
6.7.2 for循環(huán)指令122
6.7.3 其他循環(huán)129
第三部分 獨立功能的實現(xiàn)
第7章 GC算法132
7.1 原理132
7.2 數(shù)據(jù)結(jié)構(gòu)135
7.3 具體流程138
7.3.1 新創(chuàng)建對象138
7.3.2 初始化階段140
7.3.3 掃描標(biāo)記階段142
7.3.4 回收階段147
7.3.5 結(jié)束階段148
7.4 進度控制150
第8章 環(huán)境與模塊152
8.1 環(huán)境相關(guān)的變量152
8.2 模塊157
8.2.1 模塊的加載157
8.2.2 模塊的編寫159
8.2.3 模塊的熱更新原理161
第9章 調(diào)試器工作原理163
9.1 鉤子功能163
9.2 得到當(dāng)前程序信息164
9.3 打印變量165
9.4 查看文件內(nèi)容166
9.5 斷點的添加166
9.6 查看當(dāng)前堆棧信息167
9.7 step和next指令的實現(xiàn)167
第10章 異常處理169
10.1 原理169
10.2 Lua實現(xiàn)170
第11章 協(xié)程175
11.1 概念175
11.2 相關(guān)的API177
11.3 實現(xiàn)180
11.4 對稱協(xié)程和非對稱協(xié)程184
附錄A 參考資料187