Öt év fejlesztés után megjelent a Lua 5.5, egy gyors és kompakt szkriptnyelv, amely széles körben elterjedt mint beágyazott nyelv a konfigurációk meghatározására és kiterjesztések írására. A Lua interpreterének kódja C nyelven íródott, és MIT licenc alatt terjesztik.
A Lua egyszerű procedurális szintaxist ötvöz az adatok leírásának lehetőségeivel, asszociatív tömbök és a nyelv bővíthető szemantikájának használatával. A Lua dinamikus típusú, és a nyelvi konstrukciók byte-kódra alakulnak, amely egy regiszter alapú virtuális gépen fut, automatikus szemétgyűjtéssel. Az interpreter könyvtár formájában van elkészítve, és integrálható C és C++ nyelvű projektekbe.
Főbb újítások:
- A szemétgyűjtési műveletek többsége inkrementális üzemmódban zajlik, amely lehetővé teszi, hogy a szemétgyűjtési ciklus külön lépésekre legyen bontva, váltakozva a program végrehajtásával, így elkerülhetők a hosszan tartó leállások a memória nagy számú objektummal bíró alkalmazások esetén.
- Javasolt egy kompakt tömbimplementáció, amely 60%-kal kevesebb memóriát igényel az azonos típusú adatokból álló tömbök esetén (a megtakarítás azért érhető el, mert a típusinformációt nem minden egyes elemhez, hanem az elemek csoportjához tárolják).
- Lehetőséget kapott a globális változók explicit deklarálására bármely kódrészletben a 'global' kulcsszó segítségével. Ha a kódrészletben 'global' kulcsszóval rendelkező kifejezéseket adunk meg, minden változónak kötelezően egyértelműen kell deklarálva lennie. Ha a 'global' deklaráció hiányzik, akkor egy implicit 'global *' kifejezés kerül érvényesítésre, amely fenntartja a régi viselkedést, és minden változót globálisnak tekint. Ezenkívül bevezetésre került a 'global<const> *' kifejezés, amely alatt minden implicit módon definiált globális változó csak olvasható módban válik elérhetővé. X = 1 — Rendben, X — globális változó, a régi alapértelmezett viselkedés. do global Y — Y változó globális deklarálása, az összes többi változónak a blokkban kötelezően egyértelműen kell deklarálva lennie Y = 1 — Rendben, Y változó korábban definiálva van X = 1 — Hiba, X változó nem definiált end X = 2 — Rendben, a global blokk alól a régi viselkedés érvényes.
- A ciklusokban használt vezérlőváltozók mostantól csak olvashatók, és nem módosíthatók a ciklus törzsében. Például az i változó, amelyet a „for i = 1, 5 do” ciklusban deklaráltak, nem módosítható a ciklus törzsében.
- A lebegőpontos számok print funkcióval történő kiíratásakor mostantól elegendő számú számjegy kerül megjelenítésre a karakterláncból az eredeti reprezentációba történő korrekt visszaalakításhoz.
- Növelték a táblakonstruktorok fészkelt szintjeinek maximális számát.
- A table.create(nseq, nrec) funkció hozzáadásra került üres tábla létrehozásához és a megadott számú elemhez való memória előkészítéséhez.
- Az utf8.offset funkció biztosítja, hogy ne csak a karakter kezdete előtti bájtpozíció, hanem a karakter vége pozíciója is vissza legyen adva.
- Hozzáadva a külső karakterláncok létrehozásának támogatása, amelyek memóriában helyezkednek el, és nem a Lua szemétgyűjtő által kezeltek.
- A luaL_openselectedlibs funkció hozzáadásra került a választott könyvtár betöltéséhez, valamint a luaL_makeseed funkció, amely seed-értéket generál a lua_newstate funkcióhoz.
- A lua.c fájlban biztosított a ‘readline’ könyvtár dinamikus betöltése, amennyiben elérhető (ha a könyvtár a rendszerben megtalálható, akkor betöltődik, és a sorok szerkesztésére szolgáló funkciók elérhetők).
- Bevezettek egy optimalizálást a memória megtakarítása érdekében a már előre lefordított bájtód betöltésekor — a Lua mostantól újra fel tudja használni a memóriát egyes belső struktúrákban a duplikált bájtód betöltésekor anélkül, hogy duplikátumokat hozna létre.
- Biztosították az összes karakterlánc újrahasználatát a „dump” és „undump” műveletek során.
- A segédpufferekben biztosították a pufferek újrahasználatát (másolás nélkül új pufferekbe) a végső karakterlánc létrehozásakor.
Forrás: opennet.ru
