官术网_书友最值得收藏!

前言
PREFACE

Lua是一門被廣泛使用的腳本語言,它是巴西里約熱內盧天主教大學里的一個由Roberto Ierusalimschy、Waldemar Celes和Luiz Henrique de Figueiredo三人所組成的研究小組于1993年開發的。截止本書編寫的時間,Lua的最新版本為Lua5.4.4。Lua是開源的,讀者可以在官網[1]上找到它發布的所有歷史版本。運行Lua腳本的程序稱為Lua解釋器。

眾所周知,要想使用好一個工具,最好的方式就是理解它的內部構成和運作原理,這樣我們才能如庖丁解牛一般,在使用過程中得心應手。對于一門編程語言來說,也是如此。作為一門知名的開源語言,有相當數量的技術人員、學者對其源碼展開研究。

Lua盡管設計精簡,我們現在能夠搜集的資料也很多,但是要從整體上去研究,還是有一些門檻和難度的。筆者在經過閱讀大量的資料并進行了眾多實踐后,梳理總結出了一套深入研究Lua解釋器的知識體系和研究方法,并希望通過本書給廣大讀者提供一種新的視角。

荀子有云:不聞不若聞之,聞之不若見之,見之不若知之,知之不若行之。其意思是,沒有聽到的不如聽到的,聽到的不如見到的,見到的不如了解到的,了解到的不如去實行的,學問到了實行就達到了極點。這里的實行就是實踐。同時,我們也可以相信,要更好地理解Lua解釋器,最好的方式就是親自實踐去寫一個能夠正確運行的Lua解釋器,這就是我編寫本書的初衷。

本書將Lua解釋器拆解成多個部分,一步一步對其進行重新構建。全書分6章。第1章介紹了解釋器的基本概念,簡要介紹了虛擬機和編譯器,為讀者閱讀后面的內容提供鋪墊。第2章介紹了Lua虛擬機,包括數據結構和基本運作流程、垃圾回收機制、字符串和表,這也是Lua虛擬機最核心的部分。第3章介紹了Lua編譯器和虛擬機如何交互。第4章介紹了Lua編譯器的詞法分析器和語法分析器。第5章介紹了Lua解釋器的其他基礎特性,包括元表、用戶數據(userdata)、上值(upvalue)、弱表和模塊。第6章介紹了一個dummylua開發案例:俄羅斯方塊,它使用Lua腳本編寫,并使用本書仿制的Lua解釋器運行。

筆者希望通過拆解Lua解釋器,讓讀者每次只專注于章節所涉及的模塊,這樣比直接閱讀最終的源碼,干擾因素會更少。因為不需要一開始就直接面對煩瑣的模塊間交互的邏輯。

閱讀本書,筆者推薦的方式是按照目錄,逐個章節閱讀,并且在閱讀每一章隨書源碼之后,再自己動手寫一次,并通過對應的單元測試,這樣能夠最充分地消化和吸收所學的內容。當然,這也不是閱讀本書的唯一方式,如果讀者只對Lua解釋器主要組成部分的結構和運行流程感興趣,而不關心其內部實現細節,完全可以抽取感興趣的章節進行閱讀,而不閱讀對應章節的隨書代碼。本書盡可能少粘貼代碼,而使用大量的圖文進行論述。

本書的設計和實現參照了Lua 5.3的標準,目的是希望通過簡潔的方式,揭示Lua的內部運行機制,因此不會在所有的細節上和官方保持一致,但是基本遵循了Lua官方的設計思路。讀者可以在完成本書的學習之后,再回歸官方源碼進行研究,相信可以事半功倍。此外,也希望讀者通過本書,對研究Lua更新版本的源碼有所幫助。

本書的內容,始于筆者2018年開始寫的Lua解釋器相關的博客。從開始到完成,筆者得到了許多朋友的熱情支持。

首先要感謝的是機械工業出版社的編輯們,感謝他們的辛勤付出,使得書籍的書寫方式和組織結構更加嚴謹。

其次要感謝為筆者寫推薦語的四位老師:昆侖萬維技術總監蔡俊鴻、美國猶他大學CPU博士Marisa、微軟最有價值專家Mouri和騰訊游戲服務器專家廖阿敏。他們不辭辛勞,在百忙之中閱讀了稿件,并提供了很多很好的建議。同時也祝賀Marisa博士在學術領域取得了新的突破,他們的新算法能使V8引擎的GC性能提升30%。

最后要感謝筆者的父母和妹妹一直以來的支持,還有一直在背后支持筆者的朋友們,他們是筆者能堅持完成本書的動力。

由于本人水平有限,如果讀者在閱讀過程中發現錯漏,懇請批評指正,可以在本書的隨書源碼GitHub倉庫(https://github.com/Manistein/let-us-build-a-lua-interpreter/issues)上提交。

編者


[1] https://www.lua.org/ftp/

主站蜘蛛池模板: 金昌市| 古交市| 麦盖提县| 文山县| 故城县| 从化市| 察雅县| 洛扎县| 赫章县| 广东省| 蛟河市| 灵石县| 武强县| 双牌县| 阿鲁科尔沁旗| 中方县| 汤原县| 博野县| 肥东县| 西贡区| 宜丰县| 武强县| 商洛市| 乐陵市| 星座| 郯城县| 梓潼县| 木兰县| 泾川县| 上栗县| 大关县| 宣城市| 吴川市| 建平县| 宁阳县| 苍溪县| 邛崃市| 平凉市| 崇信县| 霍城县| 微博|