码迷,mamicode.com
首页 > 编程语言 > 详细

Lua语言的介绍和编程语言的归类

时间:2017-12-21 23:07:53      阅读:313      评论:0      收藏:0      [点我收藏+]

标签:定义   otl   xaml   rbo   介绍   swift   dev   巴西   class   

Lua

Lua
技术分享图片
编程范型 多重编程范式脚本命令式编程过程式基于原型的编程面向对象程序),函数编程语言
设计者

Roberto Ierusalimschy Waldemar Celes

Luiz Henrique de Figueiredo
发行时间 1993年
最新发行时间 5.3.4(2017年1月30日,?10个月前)
操作系统 跨平台
许可证 MIT许可证
网站 www.lua.org

Lua发音: /?lu??/程序设计语言是一个简洁、轻量、可扩展的脚本语言,是葡萄牙语中“Lua”(月亮)的意思。

目标

Lua的目标是成为一个很容易嵌入其它语言中使用的语言。大多数程序员也认为它的确做到了这一点。

很多应用程序使用Lua作为自己的嵌入式脚本语言,以此来实现可配置性、可扩展性。

特性

Lua是一种轻量语言,它的官方版本只包括一个精简的核心和最基本的库。这使得Lua体积小、启动速度快。它用ANSI C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。和许多“大而全”的语言不一样,网路通讯、图形界面等都没有默认提供。但是Lua可以很容易地被扩展:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。事实上,现在已经有很多成熟的扩展模块可供选用。

Lua是一种多重编程范式的程序设计语言:它只提供了很小的一个特性集合来满足不同编程范式的需要,而不是为某种特定的编程范式提供繁杂的特性支持。例如,Lua并不提供继承这个特性,但是你可以用元表来模拟它。诸如名字空间这些概念都没有在语言基本特性中实现,但是我们可以用表结构(Lua唯一提供的复杂数据结构)轻易模拟。Lua可以在运行时随时构造出一个函数,并把它看作一个对象(正是所谓的first class function),这个特性可以很好的满足函数式编程的需要。正是提供了这些基本的元特性,我们可以任意的对语言进行自需的改造。

Lua原生支持的数据类型非常之少,它只提供了数字(缺省是双精度浮点数,可配置)、布尔量、字符串、表、子程序协程(coroutine)以及用户自定义数据这几种。但是其处理表和字符串的效率非常之高,加上元表的支持,开发者可以高效的模拟出需要的复杂数据类型(比如集合、数组等)。

Lua是一个动态弱类型语言,支持增量式垃圾收集策略。有内建的,与操作系统无关的协作式多线程(coroutine)支持。

Lua可以用于嵌入式硬件,不仅可以嵌入其他编程语言,而且可以嵌入微处理器中,例如NodeMCU开源硬件项目将Lua嵌入到Wi-Fi SoC中[1]

程序示例

print("Hello, world!")

运行后,会在显示屏上显示 Hello, world!

一个比较复杂一点的例子,展示了什么是函数,以及Lua对闭包的支持:

function create_a_counter()
    local count = 0
    return function()
        count = count + 1
        return count
    end
end

create_a_counter()会返回一个匿名函数(在Lua中,函数和其他数据一样,是可以指定给变量来存储的)。这个匿名函数会把count加1后再回传。在匿名函数中的变量count既不是全域变量也不是区域变量,而是一种称为external local variable(外部局部变量,又称upvalue)的变量。这个变量的值会一直被保存在匿名函数中。因此调用create_a_counter()时产生一个记数器函数,每次调用记数器函数,都会得到一个比上次大1的值。

变量类型

Lua是一种动态类型语言,因此语言中没有类型的定义,不需要声明变量类型,每个变量自己保存了类型。

有8种基本类型:nil、布尔值(boolean)、数字体(number)、字符串型(string)、用户自定义类型(userdata)、函数(function)、线程(thread)和表(table)。

    print(type(nil))                    -- 输出 nil
    print(type(99.7+12*9))              -- 输出 number
    print(type(true))                   -- 输出 boolean
    print(type("Hello Wikipedia"))      -- 输出 string
    print(type(print))                  -- 输出 function
    print(type{1, 2, test = "test"})    -- 输出 table

参考资料

  1. 跳转^ Huang R. NodeMCU devkit. Github. [3 April 2015].

外部链接

官方站点
手册

Lua语言的介绍和编程语言的归类

标签:定义   otl   xaml   rbo   介绍   swift   dev   巴西   class   

原文地址:http://www.cnblogs.com/zhikou/p/8082460.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!