基本信息
- 原书名:Programming in Lua, Second Edition
- 原出版社: Lua.Org
编辑推荐
Lua领域最权威的书籍之一.
全面展示Lua 5.1的新特性..
详细阐释Lua程序设计的高级话题
注重实战,使你迅速掌握Lua程序的精髓
内容精要,将Lua程序设计思想发挥到极致...
内容简介
计算机书籍
本书是《Lua程序设计》(第1版)的更新和扩展,在第1版的基础上进行了较大的改进,并且加入了很多新的知识点。
介绍了Lua语言所具有的功能,并使用大量示例来演示如何将它们运用到实际的任务中
深入地介绍了Lua中唯一的数据结构——table,还讨论了数据结构、持久化、包和面向对象编程
展示了Lua的标准库,对那些想将Lua作为一门独立语言来使用的开发者特别有用,每一章介绍一个库,包括数学库、table库、字符串库、I/O库、操作系统库、调试库
介绍Lua与C语言之间的API,这是为那些想用C语言来访问Lua功能的人准备的
本书可作为广大Lua爱好者的自学用书,也可以作为大学相相关专业的教学参考书。
作译者
目录
第1章 开始
1.1 程序块(chunk)
1.2 词法规范
1.3 全局变量
1.4 解释器程序(the dtand-slone interpreter)
第2章 类型与值
2.1 nil(空)
2.2 boolean(布尔)
2.3 number(数字)
2.4 string(字符串)
2.5 table(表)
2.6 function(函数)
2.7 userdata(自定义类型)和thread(线程)
第3章 表达式
3.1 算术操作符
3.2 关系操作符
3.3 逻辑操作符
3.4 字符串连接
3.5 优先级
译者序
前言
从一开始我们就将Lua设计成能与C语言或其他常用语言编写的软件相互集成。这种可集成的特点带来了许多好处。Lua还是一门简单小巧的语言,之所以这么设计,一部分原因是因为它不准备去做那些C语言已经做得很好的方面。例如,C语言高超的性能、对底层操作的能力及与第三方软件间的接口。Lua依靠C语言来完成这些任务。而Lua提供的特性则是C语言所不太擅长的。例如,相对于硬件的高层抽象、动态结构、无冗余(No Redundancy)、简易的测试和调试。为此,Lua还实现了一个安全的运行环境、一套自动内存管理机制、优秀的字符串处理能力和动态大小数据的处理功能。
Lua的大部分功能来源于它的标准库,这也符合Lua的设计原则。因为Lua的主要特性就是它的可扩展性。语言中的许多特性都体现出了这点。动态类型为多态提供了支持。自动内存管理简化了接口,从而无须决定谁分配内存、谁释放内存及如何处理溢出等。高阶(Higher-order)函数和匿名函数允许实现更高层的参数化,能使函数变得更加通用。
Lua除了是一门可扩展的语言外,还是一门“胶水语言”。Lua支持一种基于组件的软件开发方法,这种方法可以通过黏合现有的高层组件来创建新的应用程序。这些组件可以是已编译好的,也可以是静态类型语言(如C或C++)编写的。Lua则可以成为组织和连接各种组件的胶水。通常,组件(或对象)表示了一个更具体、更底层的概念(例如窗口部件、数据结构),在程序开发过程中很少会修改它们,并且它们会占用最终程序的大部分CPU时间。Lua则可以给出一个应用程序最终的样子,而这部分内容可能会在一个产品的开发周期中被反复修改。与其他胶水技术不同的是,Lua是一门功能齐全的语言。从而使Lua不仅可用于黏合组件,还可用于适配组件或改造组件,甚至借此创建出一个全新的组件。
显然Lua不是唯一的脚本语言,还有许多其他语言都可以或多或少地解决同样的问题。但是Lua提供了一组特性,使它变得与众不同,成为解决许多问题的首选语言。
可扩展性:Lua的可扩展性非常卓越,以至于许多人以为Lua不是一种编程语言,而是一种用于构建特定领域语言的工具包。Lua从一开始就被设计为可扩展的,既可用Lua代码来扩展,又可以用外部的C代码来扩展。作为此概念的一个例证,Lua的大部分基础功能就是通过外部库实现的。要将Lua与C/C++相配接是非常容易的。此外,Lua还可以集成到一些其他语言中,例如Fortran、Java、Smalltalk、Ada、C#,甚至还可以集成到其他脚本语言中,如Perl和Ruby。
简易性:Lua是一种简单、小巧的语言。它具有的概念不多,但每个概念都很有用。这样的简易性使Lua非常易于学习,同时还有利于减小Lua自身的大小。一个完整的Lua发布版本 可以很轻松地存放在一张软盘中。
高效:Lua具有一个非常高效的实现。独立的评测结果显示Lua是脚本(解释型的)语言领域中最快的语言之一。
可移植性:当我们提及Lua的可移植性时,不仅是指Lua可以同时运行在Windows和UNIX平台上,而是指Lua可以运行在任何平台上,包括:PlayStation、XBox、Mac OS-9、OS X、BeOS、QUALCOMM Brew、MS-DOS、IBM主机、RISC操作系统、Symbian操作系统、PalmOS、ARM处理器、Rabbit处理器、类UNIX或类Windows的系统。针对所有这些平台的源代码实质上都是同一套代码。Lua并未使用条件编译来对不同平台进特殊处理,我们只依赖于ANSI(ISO)C标准来编写Lua的实现代码。这样就无须为了适应某个新平台而修改它。如果你有一个ANSI C编译器,那么只需编译Lua就可以了。
用户与读者
Lua的用户一般可分为三大类:使用嵌入在某个应用程序中的Lua的用户、使用Lua解释器程序的用户、同时使用Lua和C的用户。
许多人在使用嵌入在某个应用程序中的Lua,例如CGILua 或某款游戏。这些程序都用Lua的C API来注册某些新函数、创建新类型,以及改变语言中某些操作的行为,并根据它们特定的需求来配置Lua。通常这种程序的用户可能根本不知道这样一个事实,即Lua是一种独立的编程语言,只是被应用到了某个特定领域中。例如,CGILua的用户往往认为Lua是一种专门为Web而设计的语言,而某些游戏的玩家也常认为Lua是一种游戏自身特有的语言。
作为一种独立的编程语言,Lua也是非常有用的。它不仅可用于文本处理或编写一次性的小程序,还可用于大中规模的项目。对于后者,Lua的主要功能都来自于它的扩展库。Lua的标准库就提供了模式匹配和一些其他的字符串处理函数 。另一方面,Lua的扩展库数量也在不断地增加,当前存在着一大批可使用的外部库。例如,Kepler项目 就是一个用于Web开发的Lua库,它提供了页面生成、数据库访问,以及LDAP、XML和SOAP方面的包(Package)。LuaForge站点 罗列了许多Lua的外部库。
最后一类Lua用户是那些C程序员,他们在编写应用程序时,将Lua作为一个C程序库来使用。这类人更多地是在写C代码,而不是Lua代码。尽管如此,他们仍需要较好地掌握Lua,从而创建出简单易用且便于和语言相集成的接口。..
这本书为这三类人都提供了充足的内容。第一部分介绍了语言本身,展示了语言所具有的所有能力。我们会集中地介绍语言中的各种功能,并使用大量示例来演示如何将它们运用到实际的任务中。其中,还会有一些章节会涉及到基础概念,例如控制结构。而另外一些章节会介绍一些高级主题,例如迭代器和协同程序。
第二部分深入地介绍了table,它是Lua中唯一的一种数据结构。其他章节还讨论了数据结构、持久化、包和面向对象编程。这一部分将揭示语言真正的功能。
第三部分展示了Lua的标准库。这部分对那些想将Lua作为一门独立语言来使用的人特别有用。这部分中每一章介绍一个库,包括:数学库、table库、字符串库、I/O库、操作系统库、调试库。
本书的最后一部分将介绍Lua与C之间的API,这是为那些想用C来访问Lua功能的人准备的。相对于本书的其他章,这部分内容显得非常与众不同。因为,我们将讨论C的编程,而非Lua编程。所以,那时我们需要换一种角度来思考问题。对于某些读者来说,C API的讨论或许并非兴趣所在,但对于另一些读者来说,这可能是他们在本书中最关心的部分。
关于本书的第2版
本书是第1版《Lua程序设计①》的更新和扩展。虽然两个版本的结构几乎一致,但新版本中具有一些全新的素材。
序言
Lua为大多数国人所熟悉可能是源于几款知名的游戏。虽然作为一位游戏领域的开发者,可我对Lua的了解却始于一次无目的的闲暇自学(有时候学习本身,特别是对未知事物的探索过程,也是一种充满乐趣的体验)。当时,我了解并对比了Lua和Python这两种脚本语言,并且最终选择深入学习Lua。因为我更喜爱Lua的简洁,即它的简单与整洁。
说Lua简单,是因为从语言的角度看,Lua只提供了一些最基本的构件。通过这些构件,Lua的用户可以创造出更复杂的功能。例如,Lua并非严格意义上的面向对象语言,这是因为在它的语言层面上并没有直接提供诸如class这样的关键字,也没有显式的继承语法和virtual函数,但Lua却提供了一种创建这些面向对象要素的能力。在另一方面,Lua中没有结构(例如C中的struct)、没有name space,甚至没有原生的数组。可是Lua却提供了创造这些元素的构件。而且更有趣的是,这些“万能的”构件归根到底就是一种常用的数据结构——关联数组,在Lua中称之为table。
说Lua整洁,是因为无论其语言本身,还是其面向C语言的API,都非常规整。Lua的语法趋向于传统的结构化语言(如Pascal),简单易懂。而它的CAPI则是基于一个特别的“虚拟栈”而工作的,这个栈用于在宿主语言与Lua之间交换数据。栈的设立大大简化了C API的设计与使用,并且能将C程序员(或其他语言的程序员)与Lua本身的实现有效地隔离开。
然而,我们还是需要辩证地去评判一样事物。不可否认,Lua的简单和整洁也是有代价的。其直接后果可能就是我们很难用Lua去开发中型或大型的程序。但如果稍加思考的话,可以发现,要求一门脚本语言去开发一套中大规模的程序似乎显得有些“物非所用”。脚本的作用无非是完成一些相对简单、易变的任务,或作为宿主语言的延伸和扩展,或作为一种“胶水”粘合各种应用。在这些方面,简洁的Lua确实提供了良好的支持,“可扩展性”在Lua设计之初就被列为基本的设计目标之一。你可以很方便地为Lua编写扩展库,而不是只局限于语言所附带的标准程序库。
关于本书..
我最初是在Lua官方网站上阅读了((Programming in Lua(第1版)》,而后一年中又断断续续地将第1版看了两遍有余。当获悉这本书的第2版问世后,便迫不及待地从amazon.com购买了它。当再次阅读时,深感本书对于学习Lua所具有的价值。因此我将它推荐给了电子工业出版社,并最终在与出版社的合作下引进了本书的中文版权。
作为关于Lua的最权威著作之一,本书由Lua的主要设计者和实现者Roberto Ierusalimschy撰写。无论是从内容覆盖面的广度,还是对概念叙述的深度来看,本书都是学习和使用Lua的首选资料。
致谢
本书的翻译工作经历了春夏秋冬4个季节。此刻当我校对完本书的所有章节后,回忆起的是翻译过程中每个阶段的情景片段。本书最终得以成功出版离不开下面这些人的帮助与贡献。
在本书引进之初,电子工业出版社的何郑燕(ha)起了主要的推动和促进作用,并且是她负责协调本书后续的翻译工作。另外,感谢她在过去的一年中对几次影响到译者翻译进度的事件所给予的包容和理解。
在翻译过程中,好友徐翎完成了本书第3部分(共6章)的初译稿,并且他和他的妻子龙春晖对本书的第一部分(共10章)进行了审校,并给出了不少专业的批注。
在临近交稿时,我的妻子张骥从一个非专业的角度对全书进行了逐字的阅读,并检查出许多错别字和语法问题。作为一个非专业读者,她对这本犹如天书般的读物所表现出的耐心,让我自愧不如。
在交稿后,王树伟编辑负责本书的后续工作,他在排版和审校上付出了很多的时间和精力。
最后,还要感谢张骥,是她让我体验到了非常美好的生活。
周惟迪
www.zhouweidi.name ...