电子书:《Lua设计与实现》

[复制链接]
查看213 | 回复1 | 2019-12-11 15:03:39 | 显示全部楼层 |阅读模式

《Lua设计与实现》_1

《Lua设计与实现》_1

《Lua设计与实现》_2

《Lua设计与实现》_2

《Lua设计与实现》_3

《Lua设计与实现》_3


内容简介:

ui图灵原创
Lua
设计与实现
codedump O著
Lua
人民邮电出版社
图书在版编目(C1P)数据
Lua设计与实现/李创著.一北京:人民邮电出版
(图灵原创
ISBN978-7-15-46537-5
1.①L…I.①李…I.①游戏程序一程序设计
N.①TP317.6
中guo版本图书馆CIP数据核字(2017)第185067号
内容提要
本书基于Lua5.1.4版本讨论了Lua语言的设计原理,全书共分三部分:第一部分讲解数据结构(如
通用数据是如何表示的)、字符申以及表类型的实现原理:第二部分是本书最重要的部分,主要讨论了虚
拟机的实现:第三部分讨论了垃圾回收、模块实现、热更新、协程等的实现原理
本书适合对Lua内部实现感兴趣以及对编程语言实现原理感兴趣的人阅读

codedump
责任编辑王军花
责任印制彭志环
民邮电出版社出版发行北京市丰台区成寿寺路11号
郎编100164电子邮件315aptpress.com.cn
北京鑫正大印刷有限公司印刷
印张:1225
2017年8月北京第1次印刷
定价:49.00?
读者服务热线01051095186转600印装质量热线010)81055316
反盗版热线010)81055315
广告经营许可证:京东工商广登字20170147号
前言
接触Lua是在很早之前,但是那时仅限于基本的学习,没有在项目中使用,也没有意识到这
门语言真正的魅力。
时间来到2011年,那时我在从事网 页游戏的开发工作。游戏开发有其独有的特点一一上线
周期短,经常一两周就要有一个版本上线,而这个过程中需要实现的功能并不见得少。简单地说
就是时间紧、任务重
假如采用C这样的编译型语言来开发游戏,那么典型的开发流程大致是这样的:撸起袖子
来写了一大段代码,然后编译、解决调试编译的错误,中间可能还要处理类似崩溃、段错误、内
存泄露等问题。另外,由于重新编译了代码,又需要重启服.务.器,而重启过程中势必涉及数据的
加载。总而言之,采用纯编译型语言开发的情况下,相当一部分时间并没有用在真正的业务逻辑
开发中
当时项目采用的是C+编写的核心引擎模块,暴露核心接口给Lua脚本层,网络数据的收发
都在C层完成,面业务逻辑采用Lua实现。这个架构也是很多游戏服.务.器采用的经典架构
使用这个架构来开发游戏服务时,不再会把大量的精力放在语言本身的问题上,而可以集中精
来做业务逻辑。另外,借助于Lua的热更新能力,整个开发过程中需要重启服务的次数并不多
可以说,这个项目经历打开了一扇新的窗口,开阔了我的视野。由于在项目开发过程中尝到
了甜头,并且自己也对编程语言的实现很感兴趣,所以业余时间就开始慢慢阅读Lua解释器的实
现原理。那时候在互联网上能找到的分析Lua实现的文章并不多,加上自己绵译原理等相关知识
的基础薄弱,大部分时候只能硬啃代码。我一边摸索,一边开始逐步整理相关的文章并将其放在
网上,希望对其他有类似需求的朋友有一些帮助。
Lua作为一门诞生已经超过20年的语言,在设计上是非常克制的。以本书讲解所涉及的
5.4版本来说,这个版本是Lua发展了十几年之后稳定了很长时间的版本,其解释器加上周边
的库函数等不过就是一万多行的代码量,而如果再进行精简,只需要吃透最核心的几千行代码就
可以了。这样一门广泛使用的工业级别的脚本语言,只需要吃透几千行代码就能明白其核心原理
这个性价比极高的诱惑对当时的我来说无疑是巨大的
Lua在设计上,从一开始就把简洁、高效、可移植性、可嵌入型、可扩展性等作为自己的目
标。打一个可能不是太恰当的比方,Lua专注于做一个配角,作为胶水语言来.辅。助.像C、C++这
样的主角来更好地完成工作。当其他语言在前面攻城拔寨时,它在后方完成自己.辅。助.的作用。
在现在大部分主流编程语言都在走大而全的路线,在号称学会某一门语言就能成为所谓的“全栈
工程师”的年代,Lua始终格守本分地做好自己胶水语言的本取工作,不得不说是一个异类的
上善若水,水善利万物而不争”,简单、极致、强大的可扩展性,大概是我能想到的最适
合用来描述Lua语言设计哲学的句子。
本书将对Lua语言的设计原理做一些分析讨论,采用的是Lua5.1.4版本,在引用到该版本
中的代码时,会在引用代码的同时加上代码所在的文件以及行号,方便读者对应到具体的代码中
起跟着阅读。另外,我也把自己在阅读Lua代码中做了一些注释的代码版本放在了Gitb上
地址是:htps:/github.com/lichuang/Lua-5.1.4-codedump
本书适用于以下读者
ロ希望能够进一步了解Lua实现的内部原理的Lua语言用户
ロ对程序语言设计感兴趣的读者
本书,读者至少需要具备以下的基础知识。
口扎实的C语言功底,Lua虚拟机采用纯C编写。在我看过不算少的纯C语言完成的项目
Lua虚拟机的代码质量是最高的
ロ一定的编译原理知识,比如了解词法分析、语法分析、追归下降分析、BNF规则等,如
果不清楚这些原理,阅读Lua虚拟机实现时会遇到很多问题
口第一部分讲解Lua中的数据结构,如通用数据是如何表示的,Lua的字符串以及表类型
的实现原理
ロ第二部分是本书最重要的部分,主要讨论了Lua虚拟机的实现。另外,这里分类讲解了
Lua虚拟机中的一些重点指令
口第三部分的内容比较杂,这部分讨论垃圾回收、模块实现、热更新、协程等的实现
本书的完成要特别感谢以下几个人
旅谢图灵公司的王军花编辑,在茫茫的互联网中找到我在网上开源的Lua分析系列文章(这
也是本书写作的基础),并且鼓励我整理出版,在多次跳票的情况下给予了我很多的鼓励和帮助
没有她的发掘和鼓励,就不会有本书。
感谢云风在百忙之中抽空对本书初稿进行了审阅,给予了很多中肯的意见。有一些我听取并
进行了改进,而有一些因为各种原因很遗憾没能进行完善
感谢我太太对我工作的理解,家人的理解和支持是一切的基础
最后,由于本人能力有限,在很多问题的讨论上可能还存在一些误区,希望读者不各赐教。
请从这里开始您的旅程

#############################################


回复

使用道具 举报

ydddg | 2019-12-21 19:57:58 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则