Efter fem års udvikling er Lua 5.5, et hurtigt og kompakt scriptsprog, nu tilgængeligt. Det har fået stor udbredelse som indbygget sprog til konfiguration og til at skrive udvidelser. Koden til Lua-tolkeren er skrevet i C og distribueres under MIT-licensen.
Lua kombinerer en simpel proceduremæssig syntaks med muligheder for databeskrivelser gennem brugen af associerende array og et udvideligt sprogsemantik. Lua anvender dynamisk typificering, og sprogkonstruktioner bliver konverteret til bytekode, som køres på en registreringsbaseret virtuel maskine med automatisk affaldsindsamling. Tolkeren er designet som et bibliotek, der kan integreres i projekter i C og C++.
Hovednyhederne:
- For størstedelen af operationerne til affaldsindsamling anvendes en inkrementel tilstand, hvor affaldsindsamlingscyklussen opdeles i separate trin, der veksler med eksekveringen af programmet. Dette gør det muligt at undgå lange pauser i udførelsen af applikationer med et stort antal objekter i hukommelsen.
- Der er foreslået en kompakt implementering af arrays, som kræver 60% mindre hukommelse for arrays med ensartede data (besparelsen opnås ved, at datatypeoplysninger gemmes for grupper af elementer i stedet for hvert enkelt element).
- Muligheden for at erklære globale variabler eksplicit i alle kodeblokke ved hjælp af nøgleordet «global» er blevet tilføjet. Når der i en kodeblok angives udtryk med nøgleordet «global», skal alle variabler nødvendigvis erklæres eksplicit. Hvis erklæringen «global» mangler, anvendes udtrykket «global *» implicit, hvilket bevarer den gamle adfærd og behandler alle variabler som globale. Derudover er udtrykket «global<const> *» blevet tilføjet, hvilket gør alle implicit definerede globale variabler tilgængelige i kun-læse tilstand. X = 1 — Ok, X er en global variabel, gammel adfærd som standard. do global Y — erklæring af Y som global, alle andre variabler i blokken skal erklæres eksplicit. Y = 1 — Ok, variablen Y er tidligere defineret. X = 1 — Fejl, variablen X er ikke defineret. end X = 2 — Ok, uden for blokken med «global» gælder den gamle adfærd.
- De kontrollerende variabler, der angives i "for"-løkker, er nu kun tilgængelige for læsning og kan ikke ændres inde i løkken. For eksempel kan variablen i, der er erklæret i løkken "for i = 1, 5 do", ikke ændres i løkkens krop.
- Når man udskriver flydende kommaer via print-funktionen, vises der nu tilstrækkeligt med cifre til korrekt tilbagekonvertering fra streng til det oprindelige format.
- Det maksimale antal niveauer af indlejrede tabelkonstruktører er blevet øget.
- Funktionen table.create(nseq, nrec) er tilføjet for at oprette en tom tabel og forudallokere hukommelse til det angivne antal elementer.
- Funktionen utf8.offset sikrer nu returnering ikke kun af byte-offset til starten af et tegn, men også positionen for slutningen af tegnet.
- Der er tilføjet support til at oprette eksterne strenge, der placeres i hukommelse, som ikke styres af Lua's affaldssamler.
- Funktionen luaL_openselectedlibs tilføjet til at indlæse den valgte biblioteksfil, samt funktionen luaL_makeseed, der genererer en seed til funktionen lua_newstate.
- I lua.c er der sikret dynamisk indlæsning af ‘readline’-biblioteket, hvis det er tilgængeligt (hvis biblioteket er til stede i systemet — det indlæses, og tekstredigeringsfunktioner bliver tilgængelige).
- Der er inkluderet optimering for at spare hukommelse ved indlæsning af forudkompileret bytekode — Lua kan nu genbruge hukommelse i visse interne strukturer uden at skabe duplikater ved indlæsning af duplikerende bytekode.
- Der sikres genbrug af alle strenge i "dump"- og "undump"-operationer.
- I hjælpebuffere sikres genbrug af buffere (uden kopiering til et nyt buffer) ved oprettelse af den endelige streng.
Kilde: opennet.ru
