經過兩年的開發,Lua 程式語言的新版本 29 於 5.4 月 XNUMX 日悄悄發布。
Lua 是一種簡單的解釋型程式語言,可以輕鬆嵌入應用程式中。由於這些特性,Lua 被廣泛用作擴展或描述程式(尤其是電腦遊戲)配置的語言。 Lua 是在 MIT 許可證下發布的。
上一版本(5.3.5)於 10 年 2018 月 XNUMX 日發布。
新版本的主要變化
新一代垃圾收集器。在collectgarbage函數中,setpause和setstepmul參數已經棄用,建議使用incremental參數來取代;
發出警告的新功能,並可停用其顯示;
math.random 的新實作使用 xoshiro256** 演算法而非 libc 提供的演算法,並以隨機數初始化產生器;
常量變數;
「待關閉」變數是局部常數,離開作用域時會執行__close方法;
新功能 lua_resetthread - 清除堆疊並關閉所有「已關閉」的變數;
新功能 coroutine.close - 關閉指定的協程及其所有「關閉」的變數;
userdata可以包含一組透過索引存取的值。為了與它們協同工作,我們引入了新的函數:lua_newuserdatauv、lua_setiuservalue 和 lua_getiuservalue;
可以獲得有關函數參數和返回值的調試資訊;
如果在 for 迴圈中使用整數索引並且發生溢出,則循環終止;
string.gmatch 函數中新增了一個可選參數,指定從字串開頭搜尋匹配項的偏移量;
隱式字串到數字的轉換函數已移至字串庫,其行為已改變。例如,「1」+「2」運算的結果現在是整數而不是浮點數;
在記憶體分配函數中,減少記憶體區塊時可能會發生錯誤;
string.format 函數中的新格式化符號 - %p(用於指標);
utf8 庫接受最多 2³¹ 個字元代碼(如果指定了特殊標誌,則沒有它,只允許最多 0x10FFFF 的程式碼,而不允許代理);
超出範圍的整數常數會被轉換為浮點數(之前會發生位元截斷);
__lt 元方法不再用於模擬 __le 元方法;如果有必要,必須明確指定__le元方法;
如果目前作用域中已經存在同名的標籤(即使它是在外部作用域中定義的),則無法建立 goto 語句的標籤;
__gc 元方法不只可以是一個函數。如果嘗試呼叫方法失敗,則會顯示警告;
print 函數不會為每個參數呼叫 tostring,而是使用它自己的內部轉換;
io.lines 函數傳回一組四個值而不是一個,為了模擬舊的行為,如果在呼叫另一個函數時將其作為參數替換,請將呼叫括在括號中。
來源: linux.org.ru
