基本信息
编辑推荐
本书由Lua语言作者亲自撰写,针对Lua语言本身由浅入深地从各个方面进行了完整和细致的讲解。所有与Lua语言打交道的人均能从本书受益。
内容简介
计算机书籍
《Lua程序设计(第4版)》由Lua 语言作者亲自撰写,针对Lua 语言本身由浅入深地从各个方面进行了完整和细致的讲解。作为第4 版,《Lua程序设计(第4版)》主要针对的是Lua 5.3,这是《Lua程序设计(第4版)》撰写时Lua 语言的最新版本。作者从语言使用者的角度出发,讲解了语言基础、编程实操、高级特性及C 语言API 等四个方面的内容,既有Lua 语言基本数据类型、输入输出、控制结构等基础知识,也有对模块、闭包、元表、协程、延续、反射、环境、垃圾回收、函数式编程、面向对象编程、C 语言API 等高级特性的系统讲解,还有对Lua 5.3 中引入的整型、位运算、瞬表、延续等新功能的细致说明。
所有与Lua 语言打交道的人均能从《Lua程序设计(第4版)》受益,包括游戏、嵌入式、物联网、软件安全、逆向工程、移动互联网、C 语言核心系统开发等诸多领域中对Lua 语言有一般使用需要的从业人员,以及需要从编译原理或语言设计哲学和实现角度深入学习Lua 语言脚本引擎的高级开发者或研究人员。
目录
1 Lua 语言入门 2
1.1 程序段 3
1.2 一些词法规范 5
1.3 全局变量 7
1.4 类型和值 7
1.4.1 nil 8
1.4.2 Boolean 8
1.5 独立解释器 10
1.6 练习 12
2 小插曲:八皇后问题 13
2.1 练习 15
3 数值 17
3.1 数值常量 17
3.2 算术运算 19
3.3 关系运算 21
3.4 数学库 21
3.4.1 随机数发生器 22
3.4.2 取整函数 22
3.5 表示范围 24
译者序
Lua 语言从 1993 年诞生至今已 20 余年,是开源嵌入式脚本语言领域中一门独树一帜的语言,在包括嵌入式、物联网、游戏、游戏外挂、软件安全、逆向工程等领域中均具有不可替代的重要地位和极为广泛的应用。截至 2017 年 7 月,Lua 语言在 IEEE Spectrum 编程语言排行榜中名列第 21位(http://spectrum.ieee.org/static/interactive-the-topprogramming-languages-2017),在 TIOBE 排行榜中名列第 27 位(The TIOBE Programming Community index,https://www.tiobe.com/tiobe-index)。近年来,除了游戏领域典型的应 用外,包括 Redis、Nginx/OpenResty、NMAP、WOW、OpenWRT、PhotoShop 等大量的著名产品也均使用 Lua 作为其嵌入式脚本引擎,以供开发者进行功能扩展和二次开发等。伴随着 移动互联网、DevOps 等的迅猛发展,Lua 语言在包括热更新、不停机部署等的实现方面也提 供了一种现实的解决方案(例如银行等金融应用中某些采用 C 语言编写的性能密集型核心交易逻辑)。在 Lua 语言多年的发展过程中,也有大量的第三方机构对 Lua 语言进行了多方面的改进和增强,诸如 Lua JIT 等的发展也十分迅速。
除了语言本身的使用外,从语言的实现、原理、设计哲学等角度看,Lua 语言也是学习 编译原理、虚拟机、脚本引擎等的重要参考和现实依据,可以成为相关领域教科书式的典范,在国外也一直是部分高校计算机专业开展相关课程时的重要学习对象之一。在游戏领域,深入学习 Lua 语言后进行消化、吸收、优化、重构、增强甚至基于 Lua 语言的思想重新开发一 种脚本语言或一个脚本引擎的例子屡见不鲜;在软件安全领域,基于虚拟机的思想设计出的各类混淆、VM 保护产品更是有无数的先例;在各种灰色产业中,Lua 语言也同样扮演了更 加鲜为人知的重要角色。
我在研究生期间学习嵌入式和游戏逆向领域的过程中涉猎了 Lua 语言,之后由于在工作 中需要编写 Nginx 和 Redis 的 Lua 脚本(Redis 的 Lua 脚本在原子性、执行效率等方面具有 显著优势)才开始对 Lua 语言进行深入的学习。然而,在学习 Lua 语言的过程中,我发现国内对 Lua 语言的应用仍主要集中在传统的游戏领域,市面上有限的几本在售书籍也主要针对 Lua 语言在游戏开发中的使用,并没有一本书从语言本身的维度进行系统性介绍。目前网络 上的各类中文资料、教程、手册也大多是碎片化的,而且面向的还主要是 Lua 语言的陈旧版 本。对于有一定专业素养的从业人员而言,通常可以通过文档或速成式的教程在数天或数周 内基本掌握一门语言,对于非计算机专业的开发人员或一般使用者则会难些。但我认为即便 只考虑专业从业者,也需要一本权威、系统且工具性的书籍对 Lua 语言进行全面的介绍,以 帮助实现低成本地快速学习和快速上手。此外,从事游戏逆向等软件安全领域的人士也有快 速建立对 Lua 语言认知甚至进行深入学习的必要。
2006 年左右,本书的英文第 2 版出版后,国内出版了其中文译本,但至今已经超过 10 年,且本书的英文第 3 版也已经对全书的内容进行了重大重构,最新的 Lua 5.3 也发生了较 大的变化,因此之前的中文第 2 版和网络上流传的影印版 PDF 均已经不能满足读者现有的 需求。在这样的情况下,加上机缘的巧合,我于 2016 年 11 月开始与电子工业出版社博文视 点的符隆美编辑一起联系了远在巴西的 Lua 语言的作者,并最终从国内诸多出版商和译者中 杀出重围,艰难地争取到了作者的翻译版授权。 目前 Lua 语言在国内的发展不像 Python 语言、R 语言等为人熟知,也不似 Go 语言等站 在风口浪尖,但 Lua 语言在国外却一直保持着持续性的演进,在过去 20 年间表现出了极为 强大的生命力(随便举一个嵌入式领域 OpenWrt 路由器操作系统的例子,目前在各大主流 路由器品牌或 KOS/小博无线等商业 WIFI 服务商中均扮演着不可替代的重要作用)。我相信,尽管略显小众,译文中也难免有值得商榷之处,这样一本针对 Lua 语言最新版本的权威、系统性的中文译本都应该能够为游戏、嵌入式、物联网、逆向工程、软件安全、移动互联网、 C 语言核心系统开发工程师等诸多领域的学生、爱好者和从业人员提供些许帮助--而这也 是我作为一名计算机行业从业人员的愿望。
在开始本书的翻译工作前,我自诩具有尚可的文字感知和表达能力,在多年的学习和工 作中也阅读过计算机行业多个不同领域的大量中英文文档,力图以"信、达、雅"的原则要 求自己,从一名计算机行业一线从业者的角度,在尽可能正确地理解了原著英文意思后,用 尽可能专业的语言进行表述,避免出现读者"感觉还不如直接去看英本原版"的情况。但是, 2017 年 4 月 20 日我拿到本书的部分原稿并开始着手翻译后,我发现在"信、达、雅"三者间 做好平衡着实不是一件易事。受精力和能力所限,我也并未在实际生产代码中使用过原著中 讲解的所有机制,所以译文中也一定会有诸多不妥、失误甚至错误,如果读者有任何意见或 建议可以直接通过我的邮箱(mlkui@163.com)或 QQ 读者交流群(QQ 群号:662640785) 联系我,我会虚心接受一切批评和指正。
最后,我要感谢我的父母、妻子及亲人们多年来给予的无限关心、支持和陪伴,你们是我今天幸福生活的缔造者和组成者,也是我奋斗的根本动力和首要原因。
感谢中国民生银行、中国民生银行总行信息科技部的领导和同事们,尽管他们中的一些已经离开。中国民生银行是我走上社会后的第一个工作单位,感谢他们自我 2012 年入行实习以来在工作和生活上给予的无限支持、认可、包容和指点。
感谢中学、本科及研究生的朋友、同学、老师和团队,感谢他们多年以来给予的陪伴、 认可和信任,也祝愿我们在未来有机会携手共创辉煌。
感谢电子工业出版社及其计算机图书分社博文视点,感谢博文视点符隆美编辑的认可和 信任,感谢他们在本书引进并最终出版发行全过程中的卓越眼光和艰辛努力。
这是我自己真正署名的首本技术书籍,尽管翻译本书带来的经济收入(我会把本书微薄的版税收入全部用于 Lua 语言中文官方网站http://www.lua-lang.org.cn的日常服务器 及带宽开支,并捐献给其他投入国内 Lua 语言推广的相关组织和活动)与我投入的精力完全 不成正比,与我耗费相同时间从事其他工作所能带来的直接利益无法相提并论,但是,我想,我终于可以给这个世界留下点什么了。
真诚希望我的劳动能够帮助更多有需要的人,帮助他们创造更多的价值!
梅隆魁 2017 年 7 月于北京
序言
Lua 这种类似于"胶水"的语言在游戏行业被广泛应用。我已经在游戏行业摸爬滚打了 很多年,对游戏行业的变化之快深有体会:游戏策划时常更改设计是行业特点,工程师必须 把"不要写死,要能热更"这句话刻在心里。因此在做开发时,大家喜欢把逻辑放在 Lua 这 种嵌入型语言中,一方面是因为 Lua 性能好,另一方面主流引擎都支持通过推送 Lua 脚本来 实现热更新,这样在修改 Bug 或者更新内容时,用户就不需要重新下载整个游戏安装包。并 且 Lua 上手难度不高,所以很多初入游戏行业的程序员往往先学 Lua。但是,Lua 的中文学 习资料很有限,社区上的知识比较零碎,为数不多的英文书翻译本也质量平平或其中所讲的 版本已经过时,增加了初学者系统学习 Lua 的难度。所以,现在我们手中的这本用心打磨的 译本,无疑是初学者的福音。 翻译一本有用的但不蹭热点的书,就像我们开发一款源自内心的喜爱却不跟风的游戏, 也许不会成为爆款,但是总会对得起自己,也总能收获一群用户的喜爱。这本《Lua 程序设 计(第 4 版)》,体现了译者的"傻劲"--不追捧热点、专注自己想做的事情。这种"傻劲" 是这个时代稀缺的。然而读者也好,游戏用户也好,往往就喜欢这种"傻人"和他们的"傻 劲",我真心希望这样的"傻人""傻劲"能多一些。 译者还计划要做一个 Lua 的社区,欢迎大家关注,也欢迎推荐给身边的朋友,独乐乐不 如众乐乐。最后,开卷有益,祝大家学习愉快。
焦洋 盖娅互娱 CTO
推荐
序二
这几年来,由于阅读 Lua 虚拟机实现源码的缘故,我深入了解了 Lua 的很多内部实现原 理。Lua 作为一门诞生已经超过 20 年的语言,在设计上是非常克制的,以 Lua 5.1.4 版本来 说,这个版本是 Lua 发展了十几年之后稳定使用了很长时间的版本,其解释器加上周边的库 函数等不过就是一万多行的代码。 在设计上,Lua 语言从一开始就把简单、高效、可移植、可嵌入、可扩展等作为自己的 目标。打一个可能不是太恰当的比方,Lua 语言专注于做一个配角,作为胶水语言来辅助像 C、C++ 这样的主角来更好地完成工作,当其他语言在前面攻城拔寨时,Lua 语言在后方实 现自己辅助的作用。现在大部分主流编程语言都在走大而全的路线,在号称学会某一门语言 就能成为所谓的"全栈工程师"的年代,Lua 语言始终恪守本分地做好"胶水语言"的本职 工作,不得不说是一个异类的存在。 "上善若水,水善利万物而不争",这大概是我能想到的最适合用于来描述 Lua 语言设计 哲学的句子。 然而,我发现想找到一本关于 Lua 语言本身设计相关的书籍却很难。打开任何一个电商 网站,以关键字"Lua"来进行搜索,能找到的相关书籍大多是如何基于 Lua 做应用开发,如 游戏、OpenResty 等。在 2008 年,国内曾引进并翻译了《Lua 程序设计(第 2 版)》。然而, 这一本书已经绝版不再印刷,而且 Lua 在这些年里也发生了不少的变化,从当时的 5.1 版本 到了现在的 5.3 版本,也在更多领域有了广泛的应用。此时,引进并且翻译最新版本的《Lua 程序设计(第 4 版)》就显得很有必要了。 推荐那些常年要与 Lua 打交道的应用开发者都读一下这本由 Lua 创作者亲自编写的 《Lua 程序设计(第 4 版)》,系统了解一下这门精致的语言,这不但对于深入理解并且使用 好 Lua 有帮助,同时其设计哲学和思想也能在某种程度上开阔我们的视野。
Codedump 《Lua 设计与实现》作者
Lua是一门经过精心设计、足够精简的编程语言。作为嵌入式语言,它非常小巧,又可以方便地和C代码交互,是一门非常好的开源语言。基于这个优势,我们可以看到Lua在游戏、Web开发、人工智能等众多领域被广泛使用:以C等语言实现接口明确的高性能基础设施,用Lua支撑更具弹性的应用层。
要用好任何一门语言,都需要熟悉这门语言在多年使用中总结出来的惯用法。过去,我们也将这些惯用法称为设计模式,但这个称谓忽略了模式和语言本身的紧密联系。各流行编程语言并无绝对的优劣,也不能说哪一门语言性能更高或更容易解决问题,语言之间的区别多在于其适用领域以及程序员能否正确使用。本书正是 Lua 语言的发明者亲自传授Lua语言惯用法的书籍。对于Lua开发者而言,值得一读。
-- 游戏行业知名博主
云风(https://blog.codingnow.com)
在Redis的开发中,我常常使用Lua,它作为一把"瑞士军刀",扩展实现了许多Redis自身API无法充分支持的功能。而对于Lua语言自身的学习,这本《Lua程序设计(第4版)》则能更好地帮助我进行Lua程序开发与调试。
-- 中国民生银行大数据工程师
《Redis 4.x Cookbook(中文版)》作者
黄鹏程
从事游戏安全研究的相关人员应该对Lua语言并不陌生,其简明、轻量、灵活、嵌入的特性使其在游戏领域占据了相当重要的地位。无论是端游、手游还是页游,有关Lua字节码的安全对抗时刻在上演,掌握Lua语言的基础则是这一切对抗技术的基础,而本书正是学习Lua语言的不二之选。
-- 看雪学院创始人,《加密与解密》作者
段钢
Lua是一门小而精的嵌入式语言,一个完整的Lua解释器不过200KB,与Python、Perl之类的脚本语言相比,Lua先天地更加适合嵌入式应用场景。无论是嵌入式实时操作系统还是嵌入式Linux,无论是路由器等典型的传统嵌入式设备还是物联网设备等,都在大量使用Lua语言。从语言的实现、原理、设计哲学等角度看,Lua也非常适合作为高校开展有关编译原理、虚拟机、脚本引擎等课程的教学素材。本书系统地讲解了有关Lua语言的方方面面,由Lua语言作者亲自撰写,是学习和使用Lua语言的好读物。
-- 北京邮电大学软件学院院长
媒体评论
在Redis的开发中,我常常使用Lua,它作为一把“瑞士军刀”,扩展实现了许多Redis自身API无法充分支持的功能。而对于Lua语言自身的学习,这本《Lua程序设计(第4版)》则能更好地帮助我进行Lua程序开发与调试。 —— 中国民生银行大数据工程师 《Redis 4.x Cookbook(中文版)》作者 黄鹏程
从事游戏安全研究的相关人员应该对Lua语言并不陌生,其简明、轻量、灵活、嵌入的特性使其在游戏领域占据了相当重要的地位。无论是端游、手游还是页游,有关Lua字节码的安全对抗时刻在上演,掌握Lua语言的基础则是这一切对抗技术的基础,而本书正是学习Lua语言的*二之选。 —— 看雪学院创始人,《加密与解密》作者 段钢 Lua是一门小而精的嵌入式语言,一个完整的Lua解释器不过200KB,与Python、Perl之类的脚本语言相比,Lua先天地更加适合嵌入式应用场景。无论是嵌入式实时操作系统还是嵌入式Linux,无论是路由器等典型的传统嵌入式设备还是物联网设备等,都在大量使用Lua语言。从语言的实现、原理、设计哲学等角度看,Lua也非常适合作为高校开展有关编译原理、虚拟机、脚本引擎等课程的教学素材。本书系统地讲解了有关Lua语言的方方面面,由Lua语言作者亲自撰写,是学习和使用Lua语言的好读物。 —— 北京邮电大学软件学院院长 邝坚
在我过往的工作经历中,有很长一段时间都在使用Lua语言,无奈的是一直没有找到系统介绍Lua的中文书籍。幸而《Lua程序设计(第4版)》出版了,相信这本书很快会成为游戏程序员的Lua开发利器。 —— 游戏行业资深程序员,《QQ炫舞》、《捕鱼达人》制作者 贾朝辉
与Lua语言结缘还是在OpenWRT的LuCI开发中。本书让我更加了解Lua语言的魅力,让我对KOS系统UI界面的开发更加得心应手。本书作为官方参考书籍,囊括了Lua语言各方面的丰富实例,便于新手入门。 —— 知名国产路由器操作系统KOS系统架构师 向俊霖
Lua语言是一门简单、高效的嵌入式脚本语言,非常适合与C/C++相互调用,在游戏开发、数据库插件、安全系统中均有广泛的应用。本书系统性地对Lua语言进行了介绍,译者倾注了大量心力来翻译此书,相信对中国开发者有很大的帮助。 —— GrowingIO资深软件架构师 刘华清
电子工业出版社
进店逛逛
关注店铺
相关分类
编程语言与程序设计
软件工程及软件方法学
数据库
操作系统
网络与通信
办公软件
图形图像/多媒体
网页制作/Web技术
电子商务
IT人文/互联网