După doi ani de dezvoltare, pe 29 iunie a fost lansată în liniște noua versiune a limbajului de programare Lua — 5.4.
Lua este un limbaj de programare interpretat și simplu, care se integrează cu ușurință în aplicații. Datorită acestor caracteristici, Lua este utilizat pe scară largă ca limbaj de extensie sau pentru descrierea configurațiilor programelor (în special, a jocurilor de calculator). Lua este distribuit sub licența MIT.
Versiunea anterioară (5.3.5) a fost lansată pe 10 iulie 2018.
Principalele modificări în noua versiune
un nou colector de deșeuri bazat pe generații (generational). În funcția collectgarbage, parametrii setpause și setstepmul sunt declarați învechiți; în schimb, se recomandă utilizarea parametrului incremental;
o nouă funcție pentru emiterea de avertismente warn cu posibilitatea de a dezactiva afișarea acestora;
o nouă implementare a math.random folosește algoritmul xoshiro256** în locul celui oferit de libc și inițiază generatorul cu un număr aleator;
variabile constante (constant variables);
variabile "de închidere" (to-be-closed) — constante locale pentru care se execută metoda __close la ieșirea din domeniul de vizibilitate;
o nouă funcție lua_resetthread — curăță stiva și închide toate variabilele "de închidere";
o nouă funcție coroutine.close — închide coroutinea specificată și toate variabilele sale "de închidere";
datele utilizatorului (userdata) pot conține un set de valori cu acces pe baza unui index. Pentru a lucra cu acestea, au fost introduse funcții noi: lua_newuserdatauv, lua_setiuservalue și lua_getiuservalue;
informații de depanare despre parametrii și valorile returnate ale funcțiilor sunt disponibile;
dacă se folosește un index întreg în bucla for și se produce o depășire — bucla se termină;
funcția string.gmatch a primit un argument opțional care specifică deslocarea de la începutul șirului pentru căutarea meciurilor;
funcțiile de conversie implicite a unor șiruri în numere au fost mutate în biblioteca de șiruri, iar comportamentul lor s-a schimbat. De exemplu, rezultatul operației "1" + "2" este acum un număr întreg, nu un număr cu virgulă mobilă;
în funcția de alocare a memoriei pot apărea erori la micșorarea blocului de memorie;
un nou simbol de format în funcția string.format — %p (pentru pointere);
biblioteca utf8 acceptă coduri de caractere până la 2³¹ (când este specificată o flag specială, fără ea sunt acceptate doar coduri până la 0x10FFFF și nu sunt permise surrogates);
Constanțele întregi care depășesc limitele valorilor sunt convertite în numere cu virgulă mobilă (anterior se realiza trunchierea pe biți);
Metametoda __lt nu mai este folosită pentru a emula metametoda __le; dacă este necesar, metametoda __le trebuie specificată explicit;
O etichetă pentru operatorul goto nu poate fi creată dacă există deja o etichetă cu același nume în domeniul de vizibilitate curent (chiar dacă a fost definită într-un domeniu extern);
Metametoda __gc poate fi nu doar o funcție. Dacă apelul metodei eșuează, va fi emis un avertisment;
Funcția print nu apelează tostring pentru fiecare argument, ci folosește conversiile sale interne;
Funcția io.lines returnează un set de patru valori în loc de una; pentru a emula comportamentul vechi, încapsulați apelul în paranteze când îl folosiți ca parametru într-o altă funcție.
Sursa: linux.org.ru
