本書基於Lua 5.1.4版本討論了Lua語言的設計原理,全書共分三部分:前部分講解數據結構(如通用數據是如何表示的)、字符串以及表類型的實現原理;中間部分是本書重要的部分,主要討論了虛擬機的實現;第三部分討論了垃圾回收、模塊實現、熱更新、協程等的實現原理。
網名codedump,長期從事互聯網后端服務開發工作。曾經在網易等公司從事游戲服務器后台開發,在網絡游戲開發工作期間接觸到使用C++編寫服務核心引擎和使用Lua腳本編寫游戲邏輯的技術組合后,對Lua產生了濃厚的興趣,遂開始研究其實現原理,陸續公布於網絡。個人博客:www.codedump.info。
第1章 概述 1
1.1 前世今生 1
1.2 源碼組織 5
1.3 Lua虛擬機工作流程 6
第一部分 基礎資料類型
第2章 Lua中的資料類型 10
2.1 C語言中實現通用資料結構的一般做法 10
2.2 Lua通用資料結構的實現 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.1 Lua執行過程概述 36
5.2 資料結構與棧 43
5.3 指令的解析 46
5.4 指令格式 47
5.5 指令的執行 53
5.6 調試工具 55
5.6.1 GDB調試 55
5.6.2 使用ChunkSpy 57
第6章 指令的解析與執行 61
6.1 Lua詞法 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.5 UpValue與閉包 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.2 for迴圈指令 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.7 step和next指令的實現 167
第10章 異常處理 169
10.1 原理 169
10.2 Lua實現 170
第11章 協程 175
11.1 概念 175
11.2 相關的API 177
11.3 實現 180
11.4 對稱協程和非對稱協程 184
附錄A 參考資料 187