Lua















































Lua

Lua-logo-nolabel.svg
编程范型
多重编程范式,脚本,指令式編程(过程式,原型程式設計,面向对象程序),函數程式語言
設計者

Roberto Ierusalimschy
Waldemar Celes


Luiz Henrique de Figueiredo
发行时间
1993年

穩定版本
5.3.5
( 2018年7月10日,​3個月前​(2018-07-10


作業系統
跨平台
許可證
MIT許可證
網站
www.lua.org
啟發語言

Scheme、SNOBOL、Modula、CLU、C++
影響語言

Io、GameMonkey、Squirrel、Dao、MiniD

Lua發音: /ˈlə/)程序设计语言是一个简洁、轻量、可扩展的脚本语言,Lua在葡萄牙语中的意思是月亮。




目录






  • 1 目标


  • 2 特性


  • 3 程式範例


  • 4 变量类型


  • 5 参考资料


  • 6 外部链接





目标


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.org 在维基数据上编辑此内容(英文)


  • 官方英文邮件列表(英文)、邮件列表存档(英文)或者Gmane lua列表存档(英文)


手册



  • Book : Programming in Lua(英文)


  • manual.luaer.cn lua在线手册


  • book.luaer.cn lua在线lua学习教程


  • Lua 5.3参考手册的中文翻译(云风翻译版本)(简体中文)








Comments

Popular posts from this blog

Information security

Volkswagen Group MQB platform

刘萌萌