第0章 序言

本章包括作者的序言、文章的体例( convention )以及其它一些“每本书开头都会的内容”。
0.1 序言
目前很多程序语言都专注于帮你编写成千上万行的代码,所以此类型的语言所提供的包、命名空间、复杂的类型系统及无数的结构,有上千页的文档需要操作者学习。
Lua 并不帮你编写大量的代码的程序,相反的, Lua 仅让你用少量的代码解决关键问题。为实现这个目标,像其他语言一样 Lua 依赖于其可扩展性。但是与其他语言不同的是,不仅用 Lua 编写的软件易于扩展,而且用其他语言比如 C/C++ 编写的软件也很容易使用 Lua 扩展其功能。
一开始, Lua 就被设计成很容易和传统的 C/C++ 整合的语言。这种语言的二元性带来了极大的好处。 Lua 是一个小巧而简单的语言,因为 Lua 不致力于做 C 语言已经做得很好的领域,比如:性能、底层操作以及与第三方软件的接口。 Lua 依赖于 C 去做完成这些任务。 Lua 所提供的机制是 C 不善于的:高级语言、动态结构、简洁、易于测试和调试等。正因为如此, Lua 具有良好的安全保证,自动内存管理,简便的字符串处理功能及其他动态数据的改变。
Lua 不仅是一种易于扩展的语言,也是一种易整合语言( glue language ); Lua 支持基于组件的,我们可以将一些已经存在的高级组件整合在一起实现一个应用软件。一般情况下,组件使用像 C/C++ 等静态的语言编写。但 Lua 是我们整合各个组件的粘合剂。又通常情况下,组件(或对象)表现为具体在程序开发过程中很少变化的、占用大量 CPU 时间的决定性的程序,例如窗口部件和数据结构。对那种在产品的生命周期内变化比较多的应用方向使用 Lua 可以更方便的适应变化。除了作为整合语言外, Lua 自身也是一个功能强大的语言。 Lua 不仅可以整合组件,还可以编辑组件甚至完全使用 Lua 创建组件。
除了 Lua 外,还有很多类似的脚本语言,例如: Perl Tcl Ruby Forth Python 。虽然其他语言在某些方面与 Lua 有着共同的特色,但下面这些特征是 Lua 特有的:
可扩展性 Lua 的扩展性非常卓越,以至于很多人把 Lua 用作搭建领域语言的工具(注:比如游戏脚本)。 Lua 被设计为易于扩展的,可以通过 Lua 代码或者 C 代码扩展, Lua 的很多功能都是通过外部库来扩展的。 Lua 很容易与 C/C++ java fortran Smalltalk Ada ,以及其他语言接口。
简单 Lua 本身简单,小巧;内容少但功能强大,这使得 Lua 易于学习,很容易实现一些小的应用。他的完全发布版(代码、手册以及某些平台的二进制文件)仅用一张软盘就可以装得下。
高效率 Lua 有很高的执行效率,统计表明 Lua 是目前平均效率最高的脚本语言。
与平台无关 Lua 几乎可以运行在所有我们听说过的系统上,如 NextStep OS/2 PlayStation II (Sony) Mac OS-9 OS X BeOS MS-DOS IBM mainframes EPOC PalmOS MCF5206eLITE Evaluation Board RISC OS ,及所有的 Windows Unix Lua 不是通过使用条件编译实现平台无关,而是完全使用 ANSI (ISO) C ,这意味着只要你有 ANSI C 编译器你就可以编译并使用 Lua
Lua 大部分强大的功能来自于他的类库,这并非偶然。 Lua 的长处之一就是可以通过新类型和函数来扩展其功能。动态类型检查最大限度允许多态出现,并自动简化调用内存管理的接口,因为这样不需要关心谁来分配内存谁来释放内存,也不必担心数据溢出。高级函数和匿名函数均可以接受高级参数,使函数更为通用。
Lua 自带一个小规模的类库。在受限系统中使用 Lua ,如嵌入式系统,我们可以有选择地安装这些类库。若运行环境十分严格,我们甚至可以直接修改类库源代码,仅保留需要的函数。记住: Lua 是很小的(即使加上全部的标准库)并且在大部分系统下你仍可以不用担心的使用全部的功能。
0.2 Lua的使用者
Lua 使用者分为三大类:使用 Lua 嵌入到其他应用中的、独立使用 Lua 的、将 Lua C 混合使用的。
第一:很多人使用 Lua 嵌入在应用程序,比如 CGILua (搭建动态网页)、 LuaOrb (访问 CORBA 对象。这些类型用 Lua-API 注册新函数,创建新类型,通过配置 Lua 就可以改变应用宿主语言的行为。通常,这种应用的使用者并不知道 Lua 是一种独立的语言。例如: CGILua 用户一般会认为 Lua 是一种用于 Web 的语言。
第二:作为一种独立运行的语言, Lua 也是很有用的,主要用于文本处理或者只运行一次的小程序。这种应用 Lua 主要使用它的标准库来实现,标准库提供模式匹配和其它一些字串处理的功能。我们可以这样认为: Lua 是文本处理领域的嵌入式语言。
第三:还有一些使用者使用其他语言开发,把 Lua 当作库使用。这些人大多使用 C 语言开发,但使用 Lua 建立简单灵活易于使用的接口。
本书面向以上三类读者。书的第一部分阐述了语言的本身,展示语言的潜在功能。我们讲述了不同的语言结构,并用一些例子展示如何解决实际问题。这部分既包括基本的语言的控制结构,也包括高级的迭代子和协同。
第二部分重点放在 Lua 特有的数据结构—— tables , 讨论了数据结构、持久性、包及面向对象编程,这里我们将看到 Lua 的真正强大之处。
第三部分介绍标准库。每个标准库一章:数学库、 table 库、 string 库、 I/O 库、 OS 库、 Debug 库。
最后一部分介绍了 Lua C 接口的 API ,这部分介绍在 C 语言中开发应用而不是 Lua 中,应用对于那些打算将 Lua 嵌入到 C/C++ 中的读者可能会对此部分更感兴趣。
0.3 Lua的相关资源
如果你真得想学一门语言,参考手册是必备的。本书和 Lua 参考手册互为补充,手册仅仅描述语言本身,因此他既不会告诉你语言的数据结构也不会举例说明,但手册是 Lua 的权威性文档, http://www.lua.org 可以得到手册的内容。
-- Lua 用户社区,提供了一些第三方包和文档
 
-- 本书的更新勘误表,代码和例子
另外本书仅针对 Lua 5.0 ,如果你的版本不同,请查阅 Lua 手册或者比较版本间的差异。
0.4 本书的体例
<1> 字符串使用双引号,比如 "literal strings" ;单字符使用单引号,比如 'a' ;模式串也是用单引号,比如 '[%w_]*'
<2> 符号 --> 表示语句的输出或者表达式的结果 :
print(10)     --> 10
13 + 3        --> 16
<3> 符号 <--> 表示等价,即对于 Lua 来说,用 this that 没有区别。
this       <-->       that
0.5 关于本书
开始打算写这本书是 1998 年冬天 ( 南半球 ) ,那时候 Lua 版本是 3.1 2000 v4.0 2003 v5.0
很明显的是,这些变化给本书带来很大的冲击,有些内容失去了它存在理由,比如关于超值( upvalues )的复杂的解释。一些章节被重写,比如 C API ,另外一些章节被增加进来,比如协同处理。
不太明显的是, Lua 语言本身的发展对本书的完成也产生了很大的影响。一些语言的变化在本书中并没有被涵盖进来,这并非偶然的。在本书的创作过程中,有的时候在某个章节我会突然感觉很困惑,因为我不知道该从何开始或者怎样去讲问题阐述清楚。当你想尽力去解释清楚如何使用的前提是你应该觉得使用这个东西很容易,这表明 Lua 某些地方需要被改进。还有的时候,我顺利的写完某个章节,结果却是没有人能看得懂我写的或者没有人对我在这个章节内表达的观点达成一致。大部分情况下,这是我的过错因为我是个作家,偶尔我也会因此发现语言本身的一些需要改进的缺陷(举例来说,从 upvalues lexical scoping 的转变是由无意义的尝试所带来的抱怨所引发的,在此书的先前的草稿里,把 upvalues 形容成是 lexical scoping 的一种)。
本书的完成必须服从语言的变化,本书在这个时候完成的原因:
<1> Lua 5.0 是一个成熟的版本
<2> 语言变得越来越大,超出了最初本书的目标。此外一个原因是我迫切的想将 Lua 介绍给大家让更多的人了解 Lua
0.6 感谢
在完成本书的过程中,很多人给了我极大的帮助:
Luiz Henrique de Figueiredo Waldemar Celes 给了我很大的帮助,使得本书能够更好完成, Luiz Henrique 也帮助设计了本书的内部。
Noemi Rodriguez, Andr é Carregal, Diego Nehab, 以及 Gavin Wraith 阅读了本书的草稿提出了很多有价值的建议。
Renato Cerqueira, Carlos Cassino, Tom á s Guisasola, Joe Myers Ed Ferguson 也提出了很多重要的建议。
Alexandre Nakonechnyj 负责本书的封面和内部设计。
Rosane Teles 负责 CIP 数据的准备。
谢谢他们所有人。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值