Na vijf jaar ontwikkeling is de release van Lua 5.5 beschikbaar, een snelle en compacte programmeertaal die veel gebruikt wordt als embedded taal voor configuratiebepaling en voor het schrijven van extensies. De code van de Lua-interpreter is geschreven in C en wordt verspreid onder de MIT-licentie.
Lua combineert een eenvoudige procedurele syntaxis met mogelijkheden voor het beschrijven van gegevens via het gebruik van associatieve arrays en uitbreidbare semantiek van de taal. In Lua wordt dynamische typing gebruikt, en de taalconstructies worden omgezet naar bytecode die draait op een register-gebaseerde virtuele machine met automatische geheugenopruiming. De interpreter is gepresenteerd als een bibliotheek die geĆÆntegreerd kan worden in projecten in C en C++.
Belangrijkste vernieuwingen:
- Voor de meeste operaties van geheugenopruiming wordt een incrementele modus gebruikt, waarbij de cyclus van geheugenopruiming in afzonderlijke stappen wordt opgesplitst die afwisselend met de uitvoering van het programma plaatsvinden, wat lange pauzes in de uitvoering van applicaties met veel objecten in het geheugen helpt voorkomen.
- Een compacte implementatie van arrays is voorgesteld, die 60% minder geheugen vereist voor arrays met uniforme gegevens (de besparing wordt bereikt doordat type-informatie niet voor elk element, maar voor groepen elementen wordt opgeslagen).
- De mogelijkheid is toegevoegd om globale variabelen expliciet te declareren in alle codeblokken met het sleutelwoord "global". Wanneer in een codeblok uitdrukkingen met het sleutelwoord "global" worden opgegeven, moeten alle variabelen expliciet worden gedeclareerd. Als de "global"-verklaring ontbreekt, wordt impliciet de uitdrukking "global *" gebruikt, waarbij het oude gedrag behouden blijft en alle variabelen als globaal worden geĆÆnterpreteerd. Ook is de uitdrukking "global<const> *" toegevoegd, waardoor alle impliciet gedefinieerde globale variabelen alleen-lezen beschikbaar worden. X = 1 ā Ok, X is een globale variabele, oud gedrag standaard. do global Y ā declaratie van variabele Y als globaal, alle andere variabelen in het blok moeten expliciet worden gedeclareerd Y = 1 ā Ok, variabele Y is eerder gedefinieerd X = 1 ā Fout, variabele X is niet gedefinieerd end X = 2 ā Ok, buiten het global-blok geldt het oude gedrag.
- De in de 'for'-lussen aangegeven beheervariabelen zijn nu alleen-lezen en kunnen niet worden gewijzigd in het lichaam van de lus. Bijvoorbeeld, de variabele i, gedeclareerd in de lus 'for i = 1, 5 do', kan niet worden gewijzigd in het lichaam van de lus.
- Bij het afdrukken van drijvende punten met de functie print wordt nu een voldoende aantal cijfers weergegeven voor een correcte omgekeerde conversie van string naar de oorspronkelijke weergave.
- Het toegestane aantal niveaus van geneste tabelconstructors is vergroot.
- De functie table.create(nseq, nrec) is toegevoegd voor het toevoegen van een lege tabel en voor het vooraf toewijzen van geheugen voor het opgegeven aantal elementen.
- De functie utf8.offset retourneert nu niet alleen de byte-offset tot het begin van het teken, maar ook de positie van het einde van het teken.
- Ondersteuning voor het creƫren van externe strings die worden opgeslagen in geheugen dat niet door de Lua-garbage collector wordt beheerd is toegevoegd.
- De functie luaL_openselectedlibs is toegevoegd voor het laden van de geselecteerde bibliotheek, evenals de functie luaL_makeseed, die een seed-generatie voor de functie lua_newstate vormt.
- In lua.c is dynamisch laden van de 'readline'-bibliotheek mogelijk gemaakt, indien deze aanwezig is (als de bibliotheek in het systeem zit ā wordt deze geladen en worden de stringbewerkingsfuncties beschikbaar).
- Een optimalisatie is ingeschakeld voor geheugenbesparing bij het laden van vooraf gecompileerde bytecode ā Lua kan nu geheugen in sommige interne structuren opnieuw gebruiken zonder duplicaten te creĆ«ren bij het laden van duplicerende bytecode.
- Er is hergebruik van alle strings in de 'dump' en 'undump' operaties verzekerd.
- In de hulppuffers is hergebruik van buffers verzekerd (zonder kopiƫren naar een nieuwe buffer) bij het creƫren van de definitieve string.
Bron: opennet.ru
