Luau 程式語言的首個獨立版本正式發布,並開放原始碼。此版本延續了 Lua 語言的開發,並向下相容於 Lua 5.1。 Luau 語言主要用於在應用程式中嵌入腳本處理程序,旨在實現高效能和低資源消耗。此專案程式碼採用 C++ 編寫,並遵循 MIT 許可證開源。
Luau 擴展了 Lua,使其具有類型檢查功能和一些新的語法結構,例如字串字面量。語言向後相容於 Lua 5.1 及部分較新版本。 Luau 支援 Lua Runtime API,讓 Luau 與現有程式碼和綁定一起使用。該語言運行時基於經過大量重寫的 Lua Runtime 5.1 程式碼庫,但解釋器已完全重寫。開發過程中採用了多項新的最佳化技術,使其效能比 Lua 更高。
該專案由 Roblox 開發,並用於該公司遊戲平台、遊戲和用戶應用程式的程式碼,包括 Roblox Studio 編輯器。 Luau 最初是閉門開發的,但最終決定將其轉入開放式專案類別,以便在社區的參與下進一步共同開發。
主要特點:
- 漸進類型,介於動態類型和靜態類型之間。 Luau 允許在必要時使用靜態類型,並透過特殊註解指定類型資訊。它提供了內建類型“any”、“nil”、“boolean”、“number”、“string”和“thread”。同時,它保留了無需明確定義變數和函數類型即可使用動態類型的能力。 function foo(x: number, y: string): boolean local k: string = y:rep(x) return k == "a" end
- 支援字串文字(與 Lua 5.3 中一樣),例如「\0x**」(十六進位數)、「\u{**}」(Unicode 字元)和「\z」(行尾),以及以視覺化方式格式化數字的能力(您可以寫入 1_000_000 而不是 1000000)、第十六進位文字...0.b.
- 支援“continue”表達式,補充現有的“break”關鍵字,以移動到新的循環迭代。
- 支援複合賦值運算子(+=、-=、*=、/=、%=、^=、..=)。
- 支援以表達式的形式使用“if-then-else”條件區塊,這些條件區塊會傳回在區塊執行期間計算的值。一個區塊中可以指定任意數量的 elseif 表達式。 local maxValue = if a > b then a else b local sign = if x < 0 then -1 elseif x > 0 then 1 else 0
- 沙盒模式允許你運行不受信任的程式碼。此功能可用於組織啟動你自己的程式碼以及其他開發人員編寫的程式碼,例如無法保證安全性的第三方程式庫。
- 標準庫的限制,其中可能導致安全性問題的函數已被移除。例如,以下程式庫已從標準集中排除:「io」(檔案存取和進程啟動)、「package」(檔案存取和模組載入)、「os」(檔案存取和環境變數修改函數已移除)、「debug」(不安全的記憶體處理)、「dofile」和「loadfile」(檔案系統存取)。
- 提供靜態程式碼分析、錯誤偵測(linter)和檢查類型使用正確性的工具。
- 專有的高效能解析器、字節碼解釋器和編譯器。 Luau 尚不支援 JIT 編譯,但據稱在某些情況下,Luau 解譯器的效能可與 LuaJIT 媲美。
來源: opennet.ru
