具体描述
本书首先介绍了Lua中的数据结构,比如通用数据是如何表示的、Lua的字符串以及表类型的实现原理,接着讨论了Lua虚拟机的实现,并且将其中重点的一些指令进行了分类讲解,最后讨论了垃圾回收、模块实现、热更新、协程等的实现原理。
作者简介
网名codedump
长期从事互联网后端服务开发工作。曾经在网易等公司从事游戏服务器后台开发,在网络游戏开发工作期间接触到使用C++编写服务核心引擎和使用Lua脚本编写游戏逻辑的技术组合后,对Lua产生了浓厚的兴趣,遂开始研究其实现原理,陆续公布于网络。个人博客:www.codedump.info。
目录信息
1.1 前世今生 1
1.2 源码组织 5
1.3 Lua虚拟机工作流程 6
第一部分 基础数据类型
第2章 Lua中的数据类型 10
2.1 C语言中实现通用数据结构的一般做法 10
2.2 Lua通用数据结构的实现 11
第3章 字符串 16
3.1 概述 16
3.2 字符串实现 18
第4章 表 24
4.1 数据结构 24
4.2 操作算法 26
4.2.1 查找 26
4.2.2 新增元素 27
4.2.3 迭代 33
4.2.4 取长度操作 33
第二部分 虚拟机
第5章 Lua虚拟机 36
5.1 Lua执行过程概述 36
5.2 数据结构与栈 43
5.3 指令的解析 46
5.4 指令格式 47
5.5 指令的执行 53
5.6 调试工具 55
5.6.1 GDB调试 55
5.6.2 使用ChunkSpy 57
第6章 指令的解析与执行 61
6.1 Lua词法 61
6.2 赋值类指令 64
6.2.1 局部变量 64
6.2.2 全局变量 70
6.3 表相关的操作指令 72
6.3.1 创建表 72
6.3.2 查询表 78
6.3.3 元表的实现原理 79
6.4 函数相关的操作指令 84
6.4.1 相关数据结构 85
6.4.2 函数的定义 90
6.4.3 函数的调用与返回值的处理 94
6.4.4 调用成员函数 99
6.4.5 UpValue与闭包 100
6.5 数值计算类指令 105
6.6 关系逻辑类指令 107
6.6.1 相关指令 108
6.6.2 理论基础 108
6.6.3 相关数据结构及函数 111
6.6.4 关系类指令 114
6.6.5 逻辑类指令 117
6.7 循环类指令 121
6.7.1 理论基础 122
6.7.2 for循环指令 122
6.7.3 其他循环 129
第三部分 独立功能的实现
第7章 GC算法 132
7.1 原理 132
7.2 数据结构 135
7.3 具体流程 138
7.3.1 新创建对象 138
7.3.2 初始化阶段 140
7.3.3 扫描标记阶段 142
7.3.4 回收阶段 147
7.3.5 结束阶段 148
7.4 进度控制 150
第8章 环境与模块 152
8.1 环境相关的变量 152
8.2 模块 157
8.2.1 模块的加载 157
8.2.2 模块的编写 159
8.2.3 模块的热更新原理 161
第9章 调试器工作原理 163
9.1 钩子功能 163
9.2 得到当前程序信息 164
9.3 打印变量 165
9.4 查看文件内容 166
9.5 断点的添加 166
9.6 查看当前堆栈信息 167
9.7 step和next指令的实现 167
第10章 异常处理 169
10.1 原理 169
10.2 Lua实现 170
第11章 协程 175
11.1 概念 175
11.2 相关的API 177
11.3 实现 180
11.4 对称协程和非对称协程 184
附录A 参考资料 187
· · · · · · (收起)
读后感
2017.10.27 针对第一次印刷勘误 #4.2.4 取表长度 这一节做了较多修改,就不在这里单列,pdf已经提供,可以在: http://www.ituring.com.cn/book/download/ebeac2ba-d575-4319-8611-c166ba4a1229 下载。 #第62页 代码部分倒数第9行 错误内容:非终结符Name 和 funcbody不存在 ...
2017.10.27 针对第一次印刷勘误 #4.2.4 取表长度 这一节做了较多修改,就不在这里单列,pdf已经提供,可以在: http://www.ituring.com.cn/book/download/ebeac2ba-d575-4319-8611-c166ba4a1229 下载。 #第62页 代码部分倒数第9行 错误内容:非终结符Name 和 funcbody不存在 ...
2017.10.27 针对第一次印刷勘误 #4.2.4 取表长度 这一节做了较多修改,就不在这里单列,pdf已经提供,可以在: http://www.ituring.com.cn/book/download/ebeac2ba-d575-4319-8611-c166ba4a1229 下载。 #第62页 代码部分倒数第9行 错误内容:非终结符Name 和 funcbody不存在 ...
2017.10.27 针对第一次印刷勘误 #4.2.4 取表长度 这一节做了较多修改,就不在这里单列,pdf已经提供,可以在: http://www.ituring.com.cn/book/download/ebeac2ba-d575-4319-8611-c166ba4a1229 下载。 #第62页 代码部分倒数第9行 错误内容:非终结符Name 和 funcbody不存在 ...
2017.10.27 针对第一次印刷勘误 #4.2.4 取表长度 这一节做了较多修改,就不在这里单列,pdf已经提供,可以在: http://www.ituring.com.cn/book/download/ebeac2ba-d575-4319-8611-c166ba4a1229 下载。 #第62页 代码部分倒数第9行 错误内容:非终结符Name 和 funcbody不存在 ...
用户评价
说实话,当我开始阅读这本书时,我并未抱太大期望,总以为又是市面上那些东拼西凑、缺乏原创洞见的编程读物。然而,这本书迅速打破了我的固有印象。它的价值核心在于,它提供了一种全新的思考框架,迫使你跳出“如何使用”的思维定式,转而思考“为何如此设计”的哲学层面。作者在讲解面向对象范式在特定场景下的局限性时,那段论述简直是掷地有声,充满了批判性的思考,而非盲目的追随潮流。书中对于“抽象层级”的把握极为精妙,从最底层的内存布局到最高层的API设计哲学,作者总能找到一个清晰的参照点来连接它们。我特别喜欢作者在讨论设计模式时所持的审慎态度,他并非简单地罗列模式,而是深入分析了每种模式在特定设计环境下的利弊权衡,这是一种成熟的、经得起推敲的设计智慧的体现。这本书更像是一份来自“老匠人”的忠告,它教你的不仅仅是技术,更是一种对待工程的严谨态度和对细节的敬畏之心。
我花了整整一个周末的时间,试图消化书中关于“元编程”的那几章内容,老实说,那绝对是对心智的一次严峻挑战。作者的笔法非常具有前瞻性,他没有停留在对现有语法的简单描述,而是着力于探讨语言设计者在做决策时的权衡取舍——为什么是这种设计,而不是另一种?这种追问本质的探讨,对于希望成为架构师或语言贡献者的读者来说,价值无可估量。书中的案例选择非常独到,很多都是现实世界中性能瓶颈或设计陷阱的真实写照,这使得理论学习立刻有了落地的参照物。我注意到,作者在处理异常处理和错误报告的章节时,展现了一种近乎“人文关怀”的写作态度,他强调代码的可读性和维护性与运行效率同等重要,这在许多纯粹追求性能的书中是很少见的视角。阅读过程中,我时常需要暂停下来,在纸上画出流程图,以确保我对作者描述的每一个抽象概念都有了具体的、可操作的理解。这本书无疑更偏向学术和理论的深度挖掘,对于刚接触编程的新手来说,可能会感到门槛过高,但对于寻求突破的资深工程师,这绝对是打开新世界大门的钥匙。
这本书的结构安排堪称教科书级别的典范,章节间的过渡自然流畅,仿佛一条精心铺设的轨道,将读者的注意力平稳地从宏观设计理念引导至微观实现细节。我特别欣赏它对于“扩展性”这一主题的反复强调和多角度论证。作者似乎在不断提醒读者,优秀的软件设计并非一次性的构建,而是一个持续演进和适应变化的过程。在深入探讨性能优化时,那种详尽到寄存器层级的分析,让我对计算机底层运作有了更直观的认识,这远超了我以往阅读的任何一本关于高级语言的书籍。书中的排版设计也值得称赞,大段的代码块和关键术语的强调处理得当,阅读起来不至于产生视觉疲劳。有一处关于协程调度的讨论,作者通过一个巧妙的类比,将一个复杂的多线程同步问题描述得生动形象,让人印象深刻,这体现了作者高超的沟通能力——能够将晦涩的技术转化为人人可懂的语言。这本书的份量足以让它在书架上占据一席之地,更重要的是,它值得被反复翻阅,每次都会有新的领悟。
这本厚重的专著,初捧上手便觉其分量不凡,定是倾注了作者无数心血的结晶。从翻阅的篇章间,我能深切感受到一种严谨而又不失优雅的叙事风格。作者似乎对编程语言的底层机制有着近乎痴迷的探索欲,文字之间流淌着对效率和美学的双重追求。特别是对某些核心概念的剖析,那种层层剥开、深入骨髓的讲解方式,让人不得不佩服其深厚的学术功底。我尤其欣赏那些穿插其中的小故事或历史背景,它们不仅调剂了略显枯燥的技术讨论,更巧妙地串联起整个知识体系的演进脉络,使得学习过程不再是机械地记忆规则,而更像是一场追溯思想源头的探险。它不是那种浮于表面的“速成宝典”,更像是一本需要静下心来,细细品味的“武林秘籍”。对于那些渴望真正理解一门语言为何如此设计,以及如何在其基础上构建复杂系统的进阶开发者而言,这本书无疑提供了坚实的理论基石和丰富的实践视角。书中的图表和类图绘制得极其清晰,逻辑链条环环相扣,即使是面对复杂的内存管理或垃圾回收机制,也能被梳理得井井有条,让人茅塞顿开。
这本书的魅力在于它的“内敛性”和“深度性”,它不哗众取宠,不追求短期热度,而是致力于构建一个长久有效的知识体系。我发现自己常常在阅读过程中,会不自觉地将书中的理念代入到我目前正在进行的项目中进行反思和推演,这是一种非常高效的学习反馈机制。作者对不同编程范式之间相互借鉴与融合的观点,展现了一种非常开阔的视野,他将技术视为一个不断演化的生态系统,而不是孤立的知识点。尤其是在介绍编译和解释策略的选择时,作者的分析深入到了硬件层面和运行环境的限制,这让整个讨论显得极为扎实可信。对于那些追求“内功心法”的程序员来说,这本书提供了极佳的滋养。它的阅读体验是渐进式的,初读可能领略其形,再读方能体会其神,它需要读者投入时间与精力,但回报绝对丰厚。这本书,在我看来,是一部值得被珍藏和反复研读的工程学经典。
词典
有点难读,要细读lua源代码才能理解。
有点难读,要细读lua源代码才能理解。
我以为是lua的最佳实践,结果是如何实现lua…
价格厚道,内容丰富,支持创爷。