Pärast viit aastat arendust on väljas Lua 5.5 versioon, kiire ja kompaktne skriptikeel, mis on laialdaselt kasutusel konfigureerimise määratlemiseks ja laienduste kirjutamiseks. Lua tõlkija kood on kirjutatud C-keeles ja jagatakse MIT litsentsi alusel.
Lua ühendab lihtsa protseduurilise süntaksi andmete kirjeldamise võimalustega, kasutades assotsiatiivseid massiive ja laiendatavat keele semantikat. Luas kasutatakse dünaamilist tüüpimist, ning keelekonstruktsioonid muudetakse baitkoodiks, mis töötab registreeritud virtuaalmasina peal automaatse prügitõrjega. Tõlkija on kujundatud raamatukoguna, mis integreeritakse C ja C++ projektidesse.
Põhilised uuendused:
- Enamik jäätmete koristamise operatsioonidest toimub inkrementaalses režiimis, kus jäätmete koristamise tsükkel jagatakse eraldi sammudeks, mis vahelduvad programmide täitmisega, võimaldades vältida pikaajalisi katkestusi suure hulga objektidega mälu haldamisel.
- Ettepanek eksklusiivne teostus massiivide jaoks, mis vajab 60% vähem mälu ühetaoliste andmete massiivide jaoks (sääst saavutatakse, hoides tüübiteavet mitte iga elemendi, vaid elemendigruppide jaoks).
- Lisatud on võimalus globaalsete muutujaid eksplicitse sõnaga „global“ igas koodiblokis deklareerida. Kui koodiblokis kasutatakse sõna „global“, peavad kõik muutujad olema kindlasti eksplitsiitselt deklareeritud. Kui „global“-sõna ei ole, siis seadistatakse vaikimisi väljend „global *“, mille korral jääb vana käitumine kehtima ning kõik muutujad tõlgendatakse globaalsetena. Samuti on lisatud väljend „global<const> *“, mille korral muutuvad kõik vaikselt määratud globaalmuutujad ainult lugemisrežiimis kättesaadavaks. X = 1 — Ok, X — globaalne muutuja, vana vaikimisi käitumine. do global Y — muutuja Y deklareerimine globaalsete hulka, kõik muud muutujad blokis peavad olema eksplitsiitselt deklareeritud Y = 1 — Ok, muutuja Y on varem määratletud X = 1 — Viga, muutuja X ei ole määratletud end X = 2 — Ok, väljaspool global plokki kehtib vana käitumine.
- Tsüklites «for» kasutatavad juhtvarsud on nüüd ainult lugemiseks ja neid ei saa tsükli kehas muuta. Näiteks ei saa tsüklis «for i = 1, 5 do» deklareeritud muutujat i tsükli kehas muuta.
- Ruutuvaalade väljundis funktsiooni print kaudu kuvatakse nüüd piisavalt numbreid, et tagada õige tagasimuundamine stringist algsesse esitusesse.
- Lubatud tabeli konstruktorite sisese ülemineku tase on suurendatud.
- Lisatud funktsioon table.create(nseq, nrec) tühja tabeli lisamiseks ja mälukoguse ettevalmistamiseks määratud elementide arvu jaoks.
- Funktsioonis utf8.offset tagastatakse nüüd mitte ainult baitide offset alguspunktini, vaid ka sümboli lõpp-punkti positsioon.
- Lisatud on toetused väliste stringide loomisele, mis asuvad mälus, mida Lua prügikogumise mehhanism ei halda.
- Lisatud funktsioon luaL_openselectedlibs valitud teegi laadimiseks ja samuti funktsioon luaL_makeseed, mis genereerib seemne kütikule funktsioonile lua_newstate.
- Lua.c-s on seadistatud dünaamiline laadimine raamatukogust 'readline', kui see on olemas (kui raamatukogu on süsteemis, laaditakse see ja stringide redigeerimise funktsioonid on saadaval).
- Lülitatud on mälu säästmine eelnevalt kompileeritud baitkoodi laadimisel - Lua suudab nüüd taaskasutada mälu mõnedes sisestes struktuurides ilma dubleeritud baitkoodi laadimise vältimiseks dubleeringute loomise vajaduseta.
- Kõikide stringide taaskasutamine on tagatud 'dump' ja 'undump' operatsioonides.
- Aitamiseks loodud puhverdes on tagatud puhverdes taaskasutamine (ilma uude puhverdesse kopeerimiseta) lõpliku stringi loomise ajal.
Allikas: opennet.ru
