Efter fem års udvikling er Lua 5.5 nu tilgængelig. Lua er et hurtigt og kompakt scriptsprog, der i vid udstrækning bruges som et indlejret sprog til konfiguration og udvidelsesudvikling. Lua-fortolkeren er skrevet i C og licenseret under MIT-licensen.
Lua kombinerer en simpel proceduremæssig syntaks med databeskrivelsesfunktioner gennem associative arrays og udvidelig sprogsemantik. Lua bruger dynamisk typning, og sprogkonstruktioner konverteres til bytekode, der kører på en registerbaseret virtuel maskine med automatisk garbage collection. Fortolkeren implementeres som et bibliotek, der kan integreres i C- og C++-projekter.
Vigtigste innovationer:
- De fleste garbage collection-operationer bruger trinvis tilstand, som opdeler garbage collection-cyklussen i separate trin afbrudt af programudførelse, hvilket eliminerer lange pauser i udførelsen af applikationer med et stort antal objekter i hukommelsen.
- Der foreslås en kompakt implementering af arrays, der kræver 60% mindre hukommelse for arrays med den samme type data (besparelserne opnås ved, at typedataene ikke gemmes for hvert element, men for en gruppe af elementer).
- Muligheden for eksplicit at deklarere globale variabler i enhver kodeblok ved hjælp af nøgleordet "global" er blevet tilføjet. Når udtryk angives med nøgleordet "global" i en kodeblok, skal alle variabler deklareres eksplicit. Hvis "global"-deklarationen mangler, angives udtrykket "global *" implicit, hvilket bevarer den gamle funktionsmåde og behandler alle variabler som globale. Udtrykket "global" er også blevet tilføjet. *" hvor alle implicit definerede globale variabler bliver skrivebeskyttede. X = 1 — Ok, X er en global variabel, den gamle standardadfærd. do global Y — erklærer variabel Y som global, alle andre variabler i blokken skal erklæres eksplicit. Y = 1 — Ok, variabel Y er tidligere defineret. X = 1 — Fejl, variabel X er ikke defineret. end X = 2 — Ok, uden for den globale blok gælder den gamle adfærd.
- Kontrolvariabler angivet i "for"-løkker er nu skrivebeskyttede og kan ikke ændres i løkkeindholdet. For eksempel kan den variabel, jeg har deklareret i "for i = 1, 5 do"-løkken, ikke ændres i løkkeindholdet.
- Når man udskriver flydende tal ved hjælp af udskriftsfunktionen, udskrives der nu et tilstrækkeligt antal cifre til korrekt at konvertere dem tilbage fra en streng til deres oprindelige repræsentation.
- Det tilladte antal indlejringsniveauer for tabelkonstruktører er blevet øget.
- Tilføjet funktionen table.create(nseq, nrec) for at tilføje en tom tabel og forudallokere hukommelse til det angivne antal elementer.
- Funktionen utf8.offset returnerer ikke kun byte-offset'en til begyndelsen af tegnet, men også positionen for slutningen af tegnet.
- Tilføjet understøttelse af oprettelse af eksterne strenge, der findes i hukommelsen og ikke administreres af Lua garbage collector.
- Tilføjede funktionen luaL_openselectedlibs til at indlæse det valgte bibliotek, samt funktionen luaL_makeseed, som genererer et seed til funktionen lua_newstate.
- I lua.c sikres dynamisk indlæsning af 'readline'-biblioteket, hvis det er tilgængeligt (hvis biblioteket er til stede i systemet, indlæses det, og linjeredigeringsfunktioner bliver tilgængelige).
- Aktiveret optimering for at spare hukommelse ved indlæsning af prækompileret bytekode - Lua kan nu genbruge hukommelse i nogle interne strukturer uden at oprette dubletter ved indlæsning af duplikatbytekode.
- Sikrede, at alle rækker genbruges i dump- og undump-operationerne.
- I hjælpebuffere sikres genbrug af bufferen (uden at kopiere til en ny buffer) ved oprettelse af den endelige streng.
Kilde: opennet.ru
