LuaJIT 3.0 提議的語法擴充

LuaJIT 3.0 提議的語法擴充

LuaJIT 3.0 提議現代化語法擴充

LuaJIT 3.0 正在提議一系列語法擴充,旨在使該語言更貼近其他現代語言中常見的程式設計模式。這些變更旨在減少開發者從其他語言轉移時的摩擦,並為表達常見操作提供更簡潔的方式。

提議的語法變更

C 風格的邏輯與三元運算子

LuaJIT 3.0 提議為經典的 Lua 運算子引入慣用語法。這包括使用 &&|| 等符號來取代或補充以單字形式表示的 andor。此外,也正在考慮引入三元運算子 (? :),以提供比標準 Lua 條件表達式更簡潔的替代方案。

複合賦值運算子

該提議包括增加複合賦值運算子(例如 +=, -=, *=, /=)。這些運算子允許更簡潔的變數更新,這是在其他類似 Lua 的實作中已經存在的特性,例如 Playdate 手持主機所使用的 Lua 版本。

位元運算子對齊

雖然 Lua 5.3 在 2015 年引入了位元運算子,但 LuaJIT 正在致力於納入類似的功能,以追趕標準 Lua 的演進,儘管它作為一個 JIT 編譯實作仍保持著自己的發展軌跡。

社群觀點與技術辯論

提議的變更在開發者社群中引發了關於語言特性與開發者便利性之間平衡點的辯論。

對語言特性的擔憂

一些開發者認為,引入 C 風格的語法是表面化的,並且可能會稀釋 Lua 的獨特性。批評者指出,提供多種方式來執行同一操作(TIMTOWTDI - "There Is More Than One Way To Do It")會增加複雜性,而無法解決根本的語言問題。

"將 and 改為 && 究竟能達成什麼效果?... 它並不是真的在解決任何問題,只是讓 Lua 看起來不再像 Lua。"

三元運算子的替代方案

一些貢獻者更偏好 if x then y else z 的表達式風格,如在 Luau(Lua 的衍生版本)中所見。支持者認為,這種方法比 x ? y : z 語法更容易閱讀和嵌套,特別是在需要 elseif 的情況下。

"Lua 類"語言的生態系

觀察者指出,Lua 的主要版本之間缺乏嚴格的相容性,這催生了多樣化的 "lua-alikes" 生態系。由於該語言實作簡單,各種專案都創建了專門的 Lua 版本,並帶有各自的語法擴充,優先考慮特定用途而非統一的函式庫生態系。

對實作的影響

這些語法變更為那些正在構建該語言替代實作的人帶來了新的挑戰。例如,致力於支援多個版本(例如從 Lua 5.1 到 5.5)的 Rust 基礎 Lua 實作開發者發現,LuaJIT 在語法擴充上的分歧使得實現跨版本相容性變得更加困難。

Sources