Efter to års udvikling blev den nye version af programmeringssproget Lua — 5.4 — stille og roligt udgivet den 29. juni.
Lua er et simpelt fortolket programmeringssprog, der nemt kan integreres i applikationer. Takket være disse egenskaber er Lua bredt anvendt som et udvidelsessprog eller konfigurationsbeskrivelses-sprog for programmer (især computerspil). Lua distribueres under MIT-licensen.
Den forrige version (5.3.5) blev udgivet den 10. juli 2018.
Vigtige ændringer i den nye version
en ny generationsbaseret affaldssamler (generational). I funktionen collectgarbage er parametrene setpause og setstepmul blevet forældede, i stedet anbefales det at bruge parameteren incremental;
en ny funktion til at give advarsler warn med mulighed for at deaktivere deres visning;
den nye implementation af math.random bruger algoritmen xoshiro256** i stedet for den der leveres af libc og initialiserer generatoren med et tilfældigt tal;
konstanter (constant variables);
«lukket» (to-be-closed) variabler — lokale konstanter, som kalder metoden __close ved udfald af synlighed;
den nye funktion lua_resetthread — renser stakken og udfører lukning af alle «lukket» variabler;
den nye funktion coroutine.close — lukker den angivne coroutine og alle dens «lukket» variabler;
brugerdefinerede data (userdata) kan indeholde et sæt værdier med indeksadgang. Der er introduceret nye funktioner til at arbejde med dem: lua_newuserdatauv, lua_setiuservalue og lua_getiuservalue;
debug-oplysninger om parametre og returværdier for funktioner er tilgængelige;
hvis der bruges et heltal indeks i en for-løkke, og der opstår overløb — afsluttes løkken;
funktionen string.gmatch har fået et valgfrit argument, der angiver et offset fra begyndelsen af strengen for at finde matches;
funktionerne til implicit konvertering af strenge til tal er blevet flyttet til string-biblioteket, deres adfærd er ændret. For eksempel er resultatet af operationen "1" + "2" nu et heltal, og ikke et flydende tal;
i hukommelsesallokeringsfunktionen kan der opstå en fejl under nedskæring af hukommelsesblokken;
et nyt format-symbol i funktionen string.format — %p (til pointere);
utf8-biblioteket accepterer tegnkoder op til 2³¹ (ved angivelse af et specielt flag, uden dette tillades kun koder op til 0x10FFFF og surrogate koder er ikke tilladt);
Heltalskonstanter, der ligger uden for værdiernes interval, konverteres til flydende tal (tidligere skete bitklip);
Metametoden __lt bruges ikke længere til at efterligne metametoden __le; hvis det er nødvendigt, skal metametoden __le angives eksplicit;
En etiket til goto-oprationen kan ikke oprettes, hvis der allerede findes en etiket med det samme navn i det nuværende scopes (selv hvis den blev defineret i et eksternt scope);
Metametoden __gc kan ikke kun være en funktion. Hvis det mislykkes at kalde metoden, vises en advarsel;
Print-funktionen kalder ikke tostring for hvert argument, men bruger sine interne transformationer;
Io.lines-funktionen returnerer et sæt på fire værdier i stedet for en; for at efterligne den gamle adfærd skal du omgive opkaldet med parenteser, hvis du indsætter det som parameter ved opkald af en anden funktion.
Kilde: linux.org.ru
