【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 2756|回复: 4

[转帖](LUA教程)第0章 序言

[复制链接]
发表于 2009-3-21 23:32:11 | 显示全部楼层 |阅读模式
本章包括作者的序言、文章的体例(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外,还有很多类似的脚本语言,例如:PerlTclRubyForthPython。虽然其他语言在某些方面与Lua有着共同的特色,但下面这些特征是Lua特有的:
可扩展性Lua的扩展性非常卓越,以至于很多人把Lua用作搭建领域语言的工具(注:比如游戏脚本)。Lua被设计为易于扩展的,可以通过Lua代码或者C代码扩展,Lua的很多功能都是通过外部库来扩展的。Lua很容易与C/C++javafortranSmalltalkAda,以及其他语言接口。
简单Lua本身简单,小巧;内容少但功能强大,这使得Lua易于学习,很容易实现一些小的应用。他的完全发布版(代码、手册以及某些平台的二进制文件)仅用一张软盘就可以装得下。
高效率Lua有很高的执行效率,统计表明Lua是目前平均效率最高的脚本语言。
与平台无关Lua几乎可以运行在所有我们听说过的系统上,如NextStepOS/2PlayStation II (Sony)Mac OS-9OS XBeOSMS-DOSIBM mainframesEPOCPalmOSMCF5206eLITE Evaluation BoardRISC OS,及所有的WindowsUnixLua不是通过使用条件编译实现平台无关,而是完全使用ANSI (ISO) C,这意味着只要你有ANSI C编译器你就可以编译并使用Lua
Lua大部分强大的功能来自于他的类库,这并非偶然。Lua的长处之一就是可以通过新类型和函数来扩展其功能。动态类型检查最大限度允许多态出现,并自动简化调用内存管理的接口,因为这样不需要关心谁来分配内存谁来释放内存,也不必担心数据溢出。高级函数和匿名函数均可以接受高级参数,使函数更为通用。
Lua自带一个小规模的类库。在受限系统中使用Lua,如嵌入式系统,我们可以有选择地安装这些类库。若运行环境十分严格,我们甚至可以直接修改类库源代码,仅保留需要的函数。记住:Lua是很小的(即使加上全部的标准库)并且在大部分系统下你仍可以不用担心的使用全部的功能。

 

发表于 2009-5-5 18:00:11 | 显示全部楼层

听说lua程序员在很多公司总过着年复一年,日复一日的单调生活。

 

不过lua确实很不错

发表于 2009-5-5 18:34:07 | 显示全部楼层
lua是不错!
 楼主| 发表于 2009-3-21 23:32:29 | 显示全部楼层
0.2 Lua的使用者
Lua使用者分为三大类:使用Lua嵌入到其他应用中的、独立使用Lua的、将LuaC混合使用的。
第一:很多人使用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库。
最后一部分介绍了LuaC接口的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来说,用thisthat没有区别。
this       <-->       that
 楼主| 发表于 2009-3-21 23:32:45 | 显示全部楼层
0.5 关于本书
开始打算写这本书是1998年冬天(南半球),那时候Lua版本是3.12000v4.02003v5.0
很明显的是,这些变化给本书带来很大的冲击,有些内容失去了它存在理由,比如关于超值(upvalues)的复杂的解释。一些章节被重写,比如C API,另外一些章节被增加进来,比如协同处理。
不太明显的是,Lua语 言本身的发展对本书的完成也产生了很大的影响。一些语言的变化在本书中并没有被涵盖进来,这并非偶然的。在本书的创作过程中,有的时候在某个章节我会突然 感觉很困惑,因为我不知道该从何开始或者怎样去讲问题阐述清楚。当你想尽力去解释清楚如何使用的前提是你应该觉得使用这个东西很容易,这表明Lua某些地方需要被改进。还有的时候,我顺利的写完某个章节,结果却是没有人能看得懂我写的或者没有人对我在这个章节内表达的观点达成一致。大部分情况下,这是我的过错因为我是个作家,偶尔我也会因此发现语言本身的一些需要改进的缺陷(举例来说,从upvalueslexical scoping的转变是由无意义的尝试所带来的抱怨所引发的,在此书的先前的草稿里,把upvalues形容成是lexical scoping的一种)。
本书的完成必须服从语言的变化,本书在这个时候完成的原因:
<1> Lua 5.0是一个成熟的版本
<2> 语言变得越来越大,超出了最初本书的目标。此外一个原因是我迫切的想将Lua介绍给大家让更多的人了解Lua
0.6 感谢
在完成本书的过程中,很多人给了我极大的帮助:
Luiz Henrique de FigueiredoWaldemar Celes给了我很大的帮助,使得本书能够更好完成,Luiz Henrique也帮助设计了本书的内部。
Noemi Rodriguez, André Carregal, Diego Nehab, 以及 Gavin Wraith阅读了本书的草稿提出了很多有价值的建议。
Renato Cerqueira, Carlos Cassino, Tomás Guisasola, Joe MyersEd Ferguson也提出了很多重要的建议。
Alexandre Nakonechnyj负责本书的封面和内部设计。
Rosane Teles负责CIP数据的准备。
谢谢他们所有人。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-2-6 09:59

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表