本書基于Lua 5.1.4版本討論了Lua語言的設計原理,全書共分三部分:前部分講解數(shù)據(jù)結構(如通用數(shù)據(jù)是如何表示的)、字符串以及表類型的實現(xiàn)原理;中間部分是本書重要的部分,主要討論了虛擬機的實現(xiàn);第三部分討論了垃圾回收、模塊實現(xiàn)、熱更新、協(xié)程等的實現(xiàn)原理。
一本揭示Lua實現(xiàn)原理的圖書
經典的純C語言項目分析
一線開發(fā)人員傾力打造
Lua是一種可嵌入、輕量、快速、功能強大的腳本語言,使用較為廣泛,主要用在游戲領域。另外,基于Nginx的OpenResty也是使用Lua來編寫腳本的,很多服務器(如Redis)也支持使用Lua來編寫腳本。
作為一門誕生已經超過20年的語言,它在設計上是非常克制的。以Lua 5.1.4版本來說,其解釋器加上周邊的庫函數(shù)等也就不過一萬多行的代碼量,而如果再進行精簡,只需要吃透核心的幾千行代碼就可以了。
另外,作為一門以純C代碼編寫的項目,Lua代碼優(yōu)美、結構組織緊湊,是教科書般經典的C語言項目。
本書討論了Lua的設計原理,首先講解了數(shù)據(jù)結構、字符串以及表類型的實現(xiàn)原理,接著討論了虛擬機的實現(xiàn),討論了垃圾回收、模塊實現(xiàn)、熱更新、協(xié)程等的實現(xiàn)原理。
本書適用于以下讀者:
● 希望能夠進一步了解Lua內部實現(xiàn)原理的用戶;
● 對程序語言設計感興趣的讀者。
網名codedump,長期從事互聯(lián)網后端服務開發(fā)工作。曾經在網易等公司從事游戲服務器后臺開發(fā),在網絡游戲開發(fā)工作期間接觸到使用C 編寫服務核心引擎和使用Lua腳本編寫游戲邏輯的技術組合后,對Lua產生了濃厚的興趣,遂開始研究其實現(xiàn)原理,陸續(xù)公布于網絡。個人博客:www.codedump.info。
第1章 概述1
1.1 前世今生1
1.2 源碼組織5
1.3 Lua虛擬機工作流程6
第一部分 基礎數(shù)據(jù)類型
第2章 Lua中的數(shù)據(jù)類型10
2.1 C語言中實現(xiàn)通用數(shù)據(jù)結構的一般做法10
2.2 Lua通用數(shù)據(jù)結構的實現(xiàn)11
第3章 字符串16
3.1 概述16
3.2 字符串實現(xiàn)18
第4章 表24
4.1 數(shù)據(jù)結構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ù)結構與棧43
5.3 指令的解析46
5.4 指令格式47
5.5 指令的執(zhí)行53
5.6 調試工具55
5.6.1 GDB調試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 表相關的操作指令72
6.3.1 創(chuàng)建表72
6.3.2 查詢表78
6.3.3 元表的實現(xiàn)原理79
6.4 函數(shù)相關的操作指令84
6.4.1 相關數(shù)據(jù)結構85
6.4.2 函數(shù)的定義90
6.4.3 函數(shù)的調用與返回值的處理94
6.4.4 調用成員函數(shù)99
6.4.5 UpValue與閉包100
6.5 數(shù)值計算類指令105
6.6 關系邏輯類指令107
6.6.1 相關指令108
6.6.2 理論基礎108
6.6.3 相關數(shù)據(jù)結構及函數(shù)111
6.6.4 關系類指令114
6.6.5 邏輯類指令117
6.7 循環(huán)類指令121
6.7.1 理論基礎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ù)結構135
7.3 具體流程138
7.3.1 新創(chuàng)建對象138
7.3.2 初始化階段140
7.3.3 掃描標記階段142
7.3.4 回收階段147
7.3.5 結束階段148
7.4 進度控制150
第8章 環(huán)境與模塊152
8.1 環(huán)境相關的變量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.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 相關的API177
11.3 實現(xiàn)180
11.4 對稱協(xié)程和非對稱協(xié)程184
附錄A 參考資料187