2

我的新书《Lua解释器构建:从虚拟机到编译器》出版啦~

 1 year ago
source link: https://gwb.tencent.com/community/detail/133891
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

我的新书《Lua解释器构建:从虚拟机到编译器》出版啦~

发表于8小时前
评论0 23浏览

想免费获取内部独家PPT资料库?观看行业大牛直播?点击加入腾讯游戏学堂游戏程序行业精英群

711501594

2018年8月-2023年1月,没想到一个原本计划一个月搞定的研究,最后会延续将近4年半之久。一开始并没有想过要出一本书,只是想把自己的所学整理出来分享给大家。最后获得出书的机会也是倍感意外,完全超出自己的预期。

v2-161ed5c6bf466f69d1c480b5034544ef_b.jpg

Lua是一门被广泛使用的动态语言,它在1993年于巴西里约热内卢天主教大学,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo创造。截止到本书编写的时间为止,Lua的最新版本为Lua5.4.4。Lua是开源的,读者可以在官网[ https://www.lua.org/ftp/]上找到它所有发布的历史版本。运行Lua脚本的程序,被称之为Lua解释器。

众所周知,要使用好一个工具,最好的方式就是理解它的内部构成,运作原理,这样我们才能如庖丁解牛一般,在使用过程中得心应手。对于一门编程语言来说,也是如此。作为一门知名的开源语言,有相当数量的技术人员、学者对其源码展开研究。

Lua尽管设计精简,我们现在能够搜集的资料也很多,但是整体上研究起来,还是有一些门槛和难度。我在经过阅读大量的资料,和实践后,梳理总结出了一套深入研究Lua解释器的知识体系和研究方法,并希望通过本书呈现给读者,给广大读者提供一种新的视角。

v2-e3bea188e22a7b9e3118ebeb73e140c4_b.jpg

荀子有云:不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之。其意思是,没有听到的不如听到的,听到的不如见到的,见到的不如了解到的,了解到的不如去实行,学问到了实行就达到了极点。这里的实行就是实践。同时,我们也可以相信,要更好地理解Lua解释器,最好的方式就是自己也去亲自实践,亲手写一个。向读者呈现,如何写一个能够正确运行的Lua解释器,就是我写本书的初衷。

本书将Lua解释器拆解成多个部分,一步一步构建。全书分为6个章节,第1章,介绍了解释器的基本概念,简要介绍了虚拟机和编译器,为读者继续阅读后面的内容提供铺垫。第2章介绍了Lua虚拟机,包括数据结构和基本运作流程、垃圾回收机制、字符串和表,这也是Lua虚拟机最核心的部分。第3章承上启下,介绍了Lua编译器和虚拟机如何交互。第4章介绍了Lua编译器的词法分析器和语法分析器。第5章呈现了Lua的基本特性,包括元表、Userdata、Upvalue、弱表和模块。第6章,呈现一个俄罗斯方块小游戏,它使用Lua脚本编写,并使用本书仿制的Lua解释器运行。

我希望通过拆解Lua解释器,让读者每次只专注于章节所涉及的模块,这样比直接阅读最终的源码,干扰因素会更少。因为不需要一上来,就直接面对烦琐的模块间交互的逻辑。

v2-21246637f481dfea28ce7ab29e74d37d_b.jpg

阅读本书,我推荐的方式是按照目录,逐个章节阅读,并且在阅读每一章随书源码之后,再自己动手写一次,并通过对应的单元测试,这样能够最充分地消化和吸收。当然,这也不是阅读本书的唯一方式,如果读者只对Lua解释器主要组成部分的结构和运作流程感兴趣,而不关心其内部实现细节,完全可以抽取感兴趣的章节进行阅读,而不阅读对应章节的随书代码。本书尽可能少地粘贴代码,而使用大量的图文进行论述。

第6章,介绍了通过本书构建的Lua解释器,运行的俄罗斯方块小游戏项目。本书添加这部分内容,目的是验证这个仿制项目各个模块的正确性,同时也是对书籍编写内容的一次总验证,最大限度验证本书的观点,以及希望通过它增强一定的说服力。

v2-9b58e2b977e6e9409989aa2cf3670115_b.jpg

本书的设计和实现,深度参照了lua5.3的标准,本书的目标是希望通过简洁的方式,揭示Lua的内部运行机制,因此不会在所有的细节上和官方保持一致,但是基本遵循了Lua官方的设计思路。读者可以在完成本书的学习之后,再回归官方源码进行研究,相信可以事半功倍。此外,也希望读者通过本书,对研究Lua更新版本的源码,有所帮助。最后,由于作者水平有限,如果读者在阅读过程中,发现错漏,可以在本书的随书源码GitHub仓库(https://github.com/Manistein/let-us-build-a-lua-interpreter/issues)上提给作者。

本书的随书源码可以在这个链接找到:

https://github.com/Manistein/let-us-build-a-lua-interpreter​github.com/Manistein/let-us-build-a-lua-interpreter

感谢所有支持我的朋友们。出书的过程虽然艰辛,但是收获满满,尤其是认识了昆仑万维技术总监蔡哥、微软最有价值专家毛利老师、腾讯游戏服务器专家廖哥,廖哥是PUBGM和ApexM的架构师、当然还有美国犹他大学CPU博士,也是知名人工智能编译器TVM的维护者之一Marisa博士。感谢这几个大佬为我推荐。

v2-d90f7a9a5fcf154d575e139a97de3c17_b.jpg

最后放一个购买链接XD[社会社会][社会社会][社会社会]:

Lua解释器构建:从虚拟机到编译器【图片 价格 品牌 评论】-京东​item.m.jd.com/product/13807126.html?gx=RnExlzJaOzK

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK