Luau 的開源,Lua 語言的類型檢查變體

宣布開源並發布Luau程式語言的第一個獨立版本,繼續Lua語言的開發並向後相容Lua 5.1。 Luau 語言主要用於將腳本引擎嵌入到應用程式中,旨在實現高效能和低資源消耗。 這個專案程式碼是用 C++ 編寫的,並在 MIT 許可證下開放。

Luau 透過類型檢查功能和一些新的語法結構(例如字串文字)擴展了 Lua。 該語言向後相容於 Lua 5.1 並部分相容於較新的版本。 支援 Lua 運行時 API,讓您可以將 Luau 與現有程式碼和綁定一起使用。 語言運行時基於經過大量修改的 Lua 運行時 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)、十六進位 (0x...) 和二進位數字 (0b......) 的文字。
  • 支援“繼續”表達式,補充現有的“break”關鍵字,以跳到新的循環迭代。
  • 支援複合賦值運算子(+=、-=、*=、/=、%=、^=、..=)。
  • 支援以表達式的形式使用條件“if-then-else”區塊,傳回區塊執行期間計算的值。 您可以在區塊中指定任意數量的 elseif 表達式。 局部 maxValue = if a > b then a else b 局部符號 = if x < 0 then -1 elseif x > 0 then 1 else 0
  • 隔離模式(沙箱)的存在,可讓您執行不可信的程式碼。 此功能可用於將您自己的程式碼和其他開發人員編寫的程式碼並排組織啟動,例如無法保證安全性的第三方程式庫。
  • 標準庫的限制,其中可能會產生安全性問題的函數已被刪除。 例如,庫“io”(存取檔案和啟動進程)、“package”(存取檔案和載入模組)、“os”(存取檔案和更改環境變數的函數)、“debug”(記憶體不安全操作) 、“ dofile」和「loadfile」(FS 存取)。
  • 提供靜態程式碼分析、識別錯誤(linter)和檢查類型正確使用的工具。
  • 自己的高效能解析器、字節碼解釋器和編譯器。 Luau 目前還不支援 JIT 編譯,但據稱 Luau 解釋器在某些情況下的表現與 LuaJIT 相當。

來源: opennet.ru

添加評論