Na twee jaar ontwikkeling werd op 29 juni stilletjes een nieuwe versie van de programmeertaal Lua uitgebracht — 5.4.
Lua is een eenvoudige, geïnterpreteerde programmeertaal die gemakkelijk kan worden ingebouwd in applicaties. Dankzij deze eigenschappen wordt Lua breed gebruikt als een uitbreidings- of configuratietaal voor programma's (in het bijzonder computer spellen). Lua wordt verspreid onder de MIT-licentie.
De vorige versie (5.3.5) werd uitgebracht op 10 juli 2018.
Belangrijke wijzigingen in de nieuwe versie
een nieuwe generational garbage collector. In de functie collectgarbage zijn de parameters setpause en setstepmul verouderd; in plaats daarvan wordt aanbevolen om de parameter incremental te gebruiken;
een nieuwe functie voor waarschuwingen warn met de mogelijkheid om de weergave ervan uit te schakelen;
de nieuwe implementatie van math.random gebruikt het xoshiro256** algoritme in plaats van de libc en initialiseert de generator met een willekeurig getal;
constanten (constant variables);
sluitbare variabelen (to-be-closed) — lokale constanten waarvoor de methode __close wordt uitgevoerd bij het verlaten van de scope;
een nieuwe functie lua_resetthread — reinigt de stack en sluit alle 'sluitbare' variabelen;
een nieuwe functie coroutine.close — sluit de opgegeven coroutine en al haar 'sluitbare' variabelen;
gebruikersgegevens (userdata) kunnen een set waarden bevatten die toegankelijk zijn per index. Voor het werken ermee zijn nieuwe functies geïntroduceerd: lua_newuserdatauv, lua_setiuservalue en lua_getiuservalue;
er is foutopsporingsinformatie beschikbaar over de parameters en geretourneerde waarden van functies;
als er in een for-lus met een tellende variabele een gehele index wordt gebruikt en er een overflow optreedt — wordt de lus beëindigd;
in de functie string.gmatch is een optionele parameter toegevoegd die een offset vanaf het begin van de string specificeert voor het zoeken naar overeenkomsten;
functies voor impliciete conversie van strings naar getallen zijn verplaatst naar de stringbibliotheek en hun gedrag is veranderd. Bijvoorbeeld, het resultaat van de operatie "1" + "2" is nu een geheel getal in plaats van een drijvend getal;
in de functie voor geheugenallocatie kan een fout optreden bij het verkleinen van een blok geheugen;
een nieuw opmaakteken in de functie string.format — %p (voor pointers);
de utf8-bibliotheek accepteert teken codes tot 2³¹ (bij specificatie van een speciale vlag, zonder die vlag worden alleen codes tot 0x10FFFF toegestaan en zijn surrogate pairs niet toegestaan);
Gehele getallen die buiten het bereik van waarden vallen, worden omgezet naar drijvende-komma getallen (voorheen vond er bittruncatie plaats);
De metaprocedure __lt wordt niet langer gebruikt voor het emuleren van de metaprocedure __le; indien nodig moet de metaprocedure __le expliciet worden gedefinieerd;
Een label voor de goto-instructie kan niet worden gemaakt als er al een label met dezelfde naam in de huidige scope bestaat (zelfs als het in een externe scope is gedefinieerd);
De metaprocedure __gc kan niet alleen een functie zijn. Als het aanroepen van de methode mislukt, verschijnt er een waarschuwing;
De functie print roept tostring niet aan voor elk argument, maar gebruikt zijn interne conversies;
De functie io.lines retourneert een set van vier waarden in plaats van één; om het oude gedrag te emuleren, plaatst u de aanroep tussen haakjes als u deze als parameter bij een andere functie aanroept.
Bron: linux.org.ru
