Po dveh letih razvoja je 29. junija tiho in neopazno izšla nova različica programski jezika Lua — 5.4.
Lua je enostaven interpretiran programski jezik, ki se zlahka vgrajuje v aplikacije. Zaradi teh lastnosti se Lua široko uporablja kot jezik za razširitve ali opisovanje konfiguracijskih datotek (zlasti v računalniških igrah). Lua je licencirana pod MIT licenco.
Prejšnja različica (5.3.5) je izšla 10. julija 2018.
Glavne spremembe v novi različici
nov zbiralnik smeti, ki temelji na generacijah (generational). V funkciji collectgarbage sta parameter setpause in setstepmul razglašena za zastarela, namesto njiju se priporoča uporaba parametra incremental;
nova funkcija za izhod opozoril warn z možnostjo onemogočanja njihovega prikazovanja;
nova implementacija math.random uporablja algoritem xoshiro256** namesto tistega, ki ga zagotavlja libc in inicializira generator z naključnim številom;
konstantne spremenljivke (constant variables);
»zapirajoče« (to-be-closed) spremenljivke — lokalne konstante, za katere se izvede metoda __close ob izstopu iz območja veljavnosti;
nova funkcija lua_resetthread — čisti sklad in zapre vse »zapirajoče« spremenljivke;
nova funkcija coroutine.close — zapre navedeno sodaj in vse njene »zapirajoče« spremenljivke;
uporabniški podatki (userdata) lahko vsebujejo množico vrednosti z dostopom po indeksu. Za delo z njimi so uvedene nove funkcije: lua_newuserdatauv, lua_setiuservalue in lua_getiuservalue;
na voljo so informacije za odpravljanje napak o parameterih in vrnjenih vrednostih funkcij;
če se v števcem for v ciklu uporablja celoštevilski indeks in pride do prenasičenja — se cikel zaključi;
v funkcijo string.gmatch je dodan neobvezni argument, ki določa premik od začetka niz, da se išče ujemanje;
funkcije implicitnega pretvarjanja nizov v števila so premaknjene v knjižnico nizov, spremenjeno je njihovo obnašanje. Na primer, rezultat operacije "1" + "2" je zdaj celo število, ne pa decimalno število;
v funkciji za dodeljevanje pomnilnika je dovoljeno, da pride do napake pri zmanjševanju pomnilniškega bloka;
nov znak oblikovanja v funkciji string.format — %p (za kazalce);
knjižnica utf8 sprejema kode znakov do 2³¹ (z navedbo posebne zastavice, brez nje pa so dovoljene le kode do 0x10FFFF in ne dovoljujejo surrogatov);
Celoštevilske konstante, ki presegajo mejne vrednosti, se pretvorijo v plavajoče števila (prej je prišlo do bitnega striženja);
Metametoda __lt se ne uporablja več za emulacijo metametode __le; po potrebi mora biti metametoda __le izrecno določena;
Oznaka za operator goto ne more biti ustvarjena, če v trenutnem obsegu že obstaja oznaka s tem imenom (tudi če je bila določena v zunanjem obsegu);
Metametoda __gc morda ni le funkcija. Če zahteva kličete ni uspešna, bo prikazano opozorilo;
Funkcija print ne kliče tostring za vsak argument, temveč uporablja svoje notranje pretvorbe;
Funkcija io.lines vrača niz štirih vrednosti namesto ene; za emulacijo starega vedenja ovijte klic v oklepaje, če jo vključite kot parameter v klic druge funkcije.
Izvor: linux.org.ru
