構建Lua解釋器:綜述
項目簡介
lua是一門精妙簡潔,而功能強大的語言,學習和掌握它的核心機制有著重要的意義。這是一個仿製lua解釋器的項目(參照的版本是Lua5.3),我希望通過逐步實現lua解釋器的各個部分,更加深刻地掌握lua的基本結構和運作原理。本項目將分為多個部分完成,並為每一個部分附上一篇博文為該部分的設計和實現進行解析。開發這個項目的目的,並不是做一個能用於生產環境的lua解釋器,而是嘗試追尋前輩的步伐,盡最大可能理解其設計lua語言的思路,理解其中的關鍵細節。這是一個探索原理的旅程,因此效率並不是本項目要考慮的關鍵因素。這裡我遵循的是"FIRST make it run, THEN make it run fast"[1]的原則,先讓它跑起。
本項目採取和官方版本的近似的命名規範,並盡最大努力遵循lua官方的設計主線。由於開發過程是我自己重新手寫的,因此不會在所有細節和官方版本保持一致。同時這是一份參考資料,主旨是提供一條思路主線,希望讀者通過閱讀這個系列,降低對lua源碼的閱讀難度,同時不建議只跟隨本旅程來研究lua。最終希望讀者在完成本系列的閱讀後,回到研究lua官方源碼的道路上。
本系列將會為一些觀點,理論附註上引證來源,並在Reference上展示,最後本人水平有限,如果有錯誤的地方,希望大家聯繫我加以指正。同時歡迎大家加入我創建的qq羣185017593一起討論技術。
系列內容
- Part1:虛擬機的基礎--Lua基本數據結構、棧和基於棧的C函數調用的設計與實現
- Part2:Garbage Collection基礎架構
- Part3:String設計與實現
- Part4:Table設計與實現
- Part5:lexer和parser簡述
- Part6:實現腳本中的賦值、基本算數運算和位運算
- Part7:實現腳本中函數的定義與實現
- Part8:if語句的定義與實現
- Part9:循環語句的定義與實現
- Part10:break語句的定義與實現
- Part11:可變參數
- Part12:協程
- Part13:熱更新原理探索
編譯與運行
獲取倉庫
git clone [email protected]:Manistein/dummylua-tutorial.git
在Linux和Mac上編譯與運行
cd dummylua-tutorial/
cd linux/
cd part01/
make
cd bin/
./dummylua
在Windows上編譯與運行
- 進入dummylua-tutorial/windows/project/
- 使用VS2013或以上版本打開sln文件
- 自行編譯和運行
測試平臺
- Linux(Ubuntu)
- Windows
- Mac
項目github地址
https://github.com/Manistein/dummylua-tutorial
Reference
[1] LETS BUILD A COMPILER! Part I: INTRODUCTION "As Brian Kernighan has said, FIRST make it run, THEN make it run fast."
推薦閱讀: