項目簡介

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地址

github.com/Manistein/du

Reference

[1] LETS BUILD A COMPILER! Part I: INTRODUCTION "As Brian Kernighan has said, FIRST make it run, THEN make it run fast."

推薦閱讀:

查看原文 >>
相關文章