跳至內容

Lua

出自轻之舟百科

Lua(葡萄牙語原意為「月亮」)是一門輕量級、高效、可嵌入的腳本語言,由 Roberto Ierusalimschy、Luiz Henrique de Figueiredo 和 Waldemar Celes 於1993年在巴西里約熱內盧天主教大學(PUC-Rio)的計算機圖形技術組(Tecgraf)設計開發[1]。Lua 支持過程式、面向對象、函數式、數據驅動等多種編程範式,採用動態類型,以 ANSI C 實現,具有自動內存管理和基於寄存器的虛擬機,遵循 MIT 許可證發布[2][3]。其設計目標是作為宿主應用程序的擴展與腳本語言,以小巧、快速、可移植和易於嵌入著稱,目前廣泛應用於遊戲開發、嵌入式系統及各類軟件的腳本擴展[1]。

Lua
設計者Roberto Ierusalimschy
Waldemar Celes
Luiz Henrique de Figueiredo
首次發布1993年
發源地巴西里約熱內盧天主教大學(Tecgraf)
編程範式多範式(過程式、面向對象、函數式等)
類型系統動態類型、強類型
實現語言ANSI C
許可證MIT
文件擴展名.lua
官方網站lua.org

Lua 誕生於1993年的 Tecgraf。當時該實驗室為巴西石油公司等客戶開發交互式圖形軟件,由於巴西在1977年至1992年間實行針對計算機軟硬件的"市場保留"貿易保護政策,客戶無法從國外購置定製軟件,Tecgraf 因此自行開發了多種基礎工具[1]。其中兩門早期語言——數據錄入語言 DEL(data-entry language)與簡單對象語言 SOL(Simple Object Language)——逐漸超出原有用途,其用戶需要更完整的控制流與過程式編程能力。1993年年中,三位設計者決定將兩者合併為一門更強大的通用語言,Lua 由此誕生[1]。

Lua 之名來自葡萄牙語"月亮"(lua)。它延續了前代語言 SOL 的命名思路——SOL 意為"太陽",Tecgraf 的同事 Carlos Henrique Levy 建議以"月亮"(Lua)作為 SOL 後繼語言的名稱,這一雙關在命名當天即被確定下來[1]。1993年7月,Waldemar Celes 完成了第一個實現,Lua 1.0 於1993年7月28日正式發布[1]。

此後 Lua 經歷了持續而穩健的演進:Lua 2.1(1995年)引入 fallback 機制,Lua 3.0(1997年)以 tag method 取代之,Lua 5.0(2003年)引入元表(metatable)與寄存器式虛擬機,Lua 5.1(2006年)完善了模塊與垃圾回收機制[1]。Lua 是發展中國家中唯一獲得全球影響力的程序設計語言[1]。

Lua 被設計為一門可嵌入其他應用程序的擴展語言。它沒有主程序的概念,通常作為庫嵌入宿主程序中:宿主程序可以執行 Lua 代碼、讀寫 Lua 變量、註冊供 Lua 調用的 C 函數,從而在同一語法框架內定製語言行為[2]。Lua 以簡潔的過程式語法結合基於關聯數組的強大數據描述結構,核心數據結構僅有一種——表(table),它同時承擔數組、哈希表乃至對象的角色,配合元表可實現面向對象編程[1]。

Lua 的官方實現刻意保持極小:Lua 5.1 的全部源碼約17,000行 C 代碼,包含全部標準庫的獨立解釋器僅約143KB,可編譯運行於幾乎所有平台[1]。語言設計遵循"提供機制而非政策"(mechanisms, not policy)的原則,不強制任何對象或類模型,而由程序員依據應用需要自行構建[1]。Lua 的語法受到 Modula、CLU、C++、SNOBOL、AWK、Scheme 等語言的影響,具備詞法閉包、協程(coroutine)和多返回值等特性[3]。

Lua 在遊戲開發領域應用尤為廣泛。大量知名遊戲與平台使用 Lua 作為腳本語言,包括《魔獸世界》(World of Warcraft)、《Dota 2》、《Crysis》、《Garry's Mod》,以及 Roblox(後者在其基礎上發展出方言 Luau)等[3]。在非遊戲領域,Redis、nginx(通過 OpenResty)、Adobe Lightroom、Wireshark、Neovim 等軟件也採用 Lua 進行擴展或腳本編寫,其中 Adobe Lightroom 超過四成的代碼由 Lua 編寫[1]。

實現與衍生

[編輯 | 編輯原始碼]

除 PUC-Rio 官方實現外,Lua 還存在多個重要實現與方言。LuaJIT 是最著名的第三方實現,採用即時編譯(JIT)技術提供接近本地代碼的執行性能;LuaVela、MoonSharp 等實現各有側重[3]。Roblox 開發的 Luau 是 Lua 5.1 的漸進式方言,用於其平台的遊戲創作[3]。此外,Lua 的語法與思想還影響了 Io、Julia、Ring、Squirrel 等語言[3]。

Lua 5.0 起採用 MIT 許可證,此前的版本使用類似 BSD 的許可證[1]。2006年發布的 Lua 5.1 是歷史上應用最廣的版本之一,LuaJIT 及眾多嵌入式應用均基於該版本。Lua 5.4(2020年發布)引入了分代垃圾回收、整數類型等改進[2]。2025年12月發布的 Lua 5.5.0 在性能、內存占用及全局變量處理方面繼續改進,同時保持與既有 Lua 代碼的兼容性[4]。

參考文獻

[編輯 | 編輯原始碼]