Lua教程(一):简介、优势和应用场景介绍_Lua

一、简介:

  Lua作为目前最为流行的、免费轻量级嵌入式脚本语言,在很多工业级的应用程序中被广泛应用,如Adobe's Photoshop,甚至是在一些著名的游戏程序中也被大量使用,如星际。不仅如此,由于Lua具备很多特殊的优点,如语法简单(基于过程)、高效稳定(基于字节码)、可以处理复杂的数据结构、动态类型、以及自动内存管理(基于垃圾收集)等,因此在很多嵌入式设备和智能移动设备中,为了提高程序的灵活性、扩展性和高可配置性,一般都会选择Lua作为它们的脚本引擎,以应对各种因设备不同而带来的差异。

二、主要优势:

  1. 高效性:
  作为一种脚本语言,Lua的高效是众所周知的,因此在实际应用中,很多大型程序都会考虑将代码中易变的部分用Lua来编写。这不但没有明显降低系统的运行效率,反而使程序的稳定性和可扩展性得到了显著的提升。

  2. 可移植性:
  在官方网站中提供了基于多种平台的发布包,如Linux/Unix、Windows、Symbian和Pocket PC等。
   
  3. 可嵌入性:
  在语言设计之初,Lua就被准确的定位为嵌入式脚本语言,因此Lua的设计者们为Lua提供了与其他编程语言之间的良好交互体验,这特别体现在和C/C++之间的交互上。对于其他语言,如Java和C#,也可以将Lua作为其嵌入式脚本引擎,并在代码中进行直接的交互。
   
  4. 简单强大:
  尽管是过程化脚本语言,但由于Lua的设计者们为Lua提供了meta-mechanisms机制,这不仅使Lua具备了一些基本的面向对象特征,如对象和继承,而且仍然保持了过程化语言所具有的语法简单的特征。
   
  5. 小巧轻便:
  在最新版本(5.2.0)的Lua中,仅仅包含了大约20000行的C语言代码,编译后的库文件大小约为240K左右,因此这对于很多资源有限的平台有着极强的吸引力。
   
  6. 免费开源:
  MIT Licence可以让Lua被免费的用于各种商业程序中。
   
三、应用场景:

  1. 在很多时候,我们可以将Lua直接嵌入到我们的应用程序中,如游戏、监控服务器等。这样的应用方式对于程序的最终用户而言是完全透明的,但是对于程序本身,其扩展性将会得到极大的增强。
   
  2. 将Lua视为一种独立的脚本语言,通过它来帮助我们完成一些软件产品的辅助性工具的开发。比如在我们之前的数据分析产品中,我们通过编写Lua脚本,将每个用户不同格式的数据重新格式化为我们的软件平台能够读取的格式,之后再将格式化的后的数据加载到数据库中,或者是写入我们的分析引擎可以识别的数据分析文件中。这其中Lua仅仅用于文件格式的规格化过程,至于此后的操作,都是通过Lua调用我们的C语言导出函数来完成的。
   
  3. 将Lua应用于应用程序的动态配置部分。比如移动智能设备或嵌入式设备,它们的显示分辨率在很多情况下都是非标准的,如果我们为每一款设备都维护一套相关的配置信息,这无疑会加大我们程序的维护开销,如果我们将这段动态配置逻辑交由Lua脚本完成,那么这对于程序配置的灵活性而言,将会得到很大的提高。甚至可以是这样,运行在移动终端设备上的应用程序,在启动主窗体之前先和服务器建立连接,在服务器确认设备的各种参数后,再将和该设备显示相关的Lua脚本发送给设备客户端,这样客户端在得到Lua脚本之后,就可以立刻执行它以得到最新的动态配置信息。

  最后需要特别指出的是,学习Lua对于我们知识的系统性和完整性而言将是非常重要的一环,特别是对那些致力于软件架构设计和软件解决方案分析的高级软件专业人员而言就更是如此。因为在很多时候,如果我们能够很充分的理解和驾驭Lua,它不仅可以为我们的软件产品增色很多,而且也可以为我们技术人员带来一些意想不到的收获。
  这是Lua系列的第一篇博客,此后还会有十几篇相关的博客陆续发布,请有兴趣的网友持续保持关注。如有问题,欢迎及时指正。好了,那就让我们一起开始Lua的学习之旅吧。:)

时间: 2024-09-30 09:23:52

Lua教程(一):简介、优势和应用场景介绍_Lua的相关文章

Lua教程(三):值与类型介绍_Lua

Lua 是一种 动态类型语言. 这意味着变量没有类型,只有值才有类型. 语言中不存在类型定义.而所有的值本身携带它们自己的类型信息. Lua 中的所有值都是一致 (first-class) 的. 这意味着所有的值都可以被放在变量里,当作参数传递到另一个函数中,并被函数作为结果返回. Lua 中有八种基本类型: nil, boolean, number, string, function, userdata, thread, and table. Nil 类型只有一种值 nil ,它的主要用途用于

Lua教程(四):函数详解_Lua

一.函数:     在Lua中函数的调用方式和C语言基本相同,如:print("Hello World")和a = add(x, y).唯一的差别是,如果函数只有一个参数,并且该参数的类型为字符串常量或table的构造器,那么圆括号可以省略,如print "Hello World"和f {x = 20, y = 20}.     Lua为面对对象式的调用也提供了一种特殊的语法--冒号操作符.表达式o.foo(o,x)的另一种写法是o:foo(x).冒号操作符使调用o

Lua教程(三):表达式和语句_Lua

一.表达式:     1. 算术操作符:     Lua支持常规算术操作符有:二元的"+"."-"."*"."/"."^"(指数)."%"(取模),一元的"-"(负号).所有这些操作符都可用于实数.然而需要特别说明的是取模操作符(%),Lua中对该操作符的定义为:   复制代码 代码如下:     a % b == a - floor(a / b) * b      

Lua进阶教程之闭包函数、元表实例介绍_Lua

复制代码 代码如下: function createCountdownTimer(second)    local ms=second * 1000;    local function countDown()       ms = ms - 1;    return ms;  end  return countDown; end timer1 = createCountdownTimer(1); for i=1,3 do    print(timer1()); end print("-----

Lua教程(十二):面向对象编程_Lua

Lua中的table就是一种对象,但是如果直接使用仍然会存在大量的问题,见如下代码: 复制代码 代码如下:  Account = {balance = 0}  function Account.withdraw(v)      Account.balance = Account.balance - v  end  --下面是测试调用函数  Account.withdraw(100.00) 在上面的withdraw函数内部依赖了全局变量Account,一旦该变量发生改变,将会导致withdraw不

Lua中的捕获机制和转换技巧介绍_Lua

捕获 捕获是这样一种机制:可以使用模式串的一部分匹配目标串的一部分.将你想捕获的模式用圆括号括起来,就指定了一个捕获. 在string.find使用捕获的时候,函数会返回捕获的值作为额外的结果.这常被用来将一个目标串拆分成多个: 复制代码 代码如下: pair = "name = Anna" _, _, key, value = string.find(pair, "(%a+)%s*=%s*(%a+)") print(key, value)    --> na

Lua的编译、执行和调试技术介绍_Lua

dofile读入文件编译并执行,真正完成功能的函数是loadfile;与dofile不同,loadfile仅仅是编译代码成中间码,并且把编译后的chunk作为函数返回.如果发生错误,返回nil和错误信息.我们可以这么定义dofile: 复制代码 代码如下: function dofile(filename)      local f = assert(loadfile(filename))      return f() end 如果你只调用一次,可以使用dofile(filename),如果是

湖北阿里云服务器的优势及应用场景

湖北阿里云服务器:云服务器的优势及应用场景 优势: 1.稳定性:服务可用性99.95%,数据可靠性99.999%,自动宕机迁移,数据备份和回滚,系统性能报警: 2.安全性:安全组规则保护,防DDoS系统,多用户隔离,防密码破解,多线BGP网络: 3.多线接入:基于BGP的最优路由算法: 4.弹性:10分钟内可启动或释放100台云服务器,在线不停机升级带宽,5分钟内停机升级CPU和内存. 应用场景: 在云服务器上安装各种应用软件,譬如Apache/Nginx.企业ERP/CRM管理软件.游戏软件.

Lua教程(一):在C++中嵌入Lua脚本_Lua

本系列教程主要介绍如何在C/C++程序里面嵌入Lua脚本,我打算从以下几个方面来介绍: 1.如何在C/C++里面嵌入Lua脚本 2.Lua访问C/C++数据结构(这里面要介绍类,结构体,函数,变量,枚举等数据类型在lua里面如何访问) 3.C/C++访问Lua的数据,主要是基本数据类型,函数和Table 4.Cocos2D-X里面的Lua绑定(含自动绑定与手动绑定) 5.Cocos2D-x里面Lua和C/C++相互调用 6.Cocos2D-x里面Lua和Java相互调用 7.Cocos2D-x里