本書基于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