Lua語言的介紹和編程語言的歸類
Lua
本條目介紹的是一種編程語言。關於關於Lua在維基百科中的使用,請見“維基百科:Lua”。關於“Lua”一詞的其他意思,請見“盧阿”。編程範型 | 多重編程範式,腳本,命令式編程(過程式,基於原型的編程,面向對象程序),函數編程語言 | ||||
---|---|---|---|---|---|
設計者 |
Roberto Ierusalimschy Waldemar Celes Luiz Henrique de Figueiredo |
||||
發行時間 | 1993年 | ||||
最新發行時間 | 5.3.4(2017年1月30日 | ||||
操作系統 | 跨平臺 | ||||
許可證 | MIT許可證 | ||||
網站 | www.lua.org | ||||
|
Lua(發音: /?lu??/)程序設計語言是一個簡潔、輕量、可擴展的腳本語言,是葡萄牙語中“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
參考資料
- 跳轉^ 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參考手冊Lua參考手冊的中文翻譯(雲風翻譯版本)
|
- 程序設計語言
- 使用MIT許可證的軟件
- C軟件
- 用C編程的自由軟件
- 巴西發明
Lua語言的介紹和編程語言的歸類