Po pěti letech vývoje je nyní k dispozici Lua 5.5. Lua je rychlý a kompaktní skriptovací jazyk široce používaný jako vestavěný jazyk pro vývoj konfigurace a rozšíření. Interpret Lua je napsán v jazyce C a licencován pod licencí MIT.
Lua kombinuje jednoduchou procedurální syntaxi s možnostmi popisu dat prostřednictvím asociativních polí a rozšiřitelné jazykové sémantiky. Lua používá dynamické typování a jazykové konstrukty jsou převedeny do bajtkódu, který běží na virtuálním počítači založeném na registrech s automatickým sběrem odpadků. Interpret je implementován jako knihovna, kterou lze integrovat do projektů v jazyce C a C++.
Hlavní inovace:
- Většina operací sběru odpadu používá inkrementální režim, který rozděluje cyklus sběru odpadu na samostatné kroky proložené prováděním programu, čímž se eliminují dlouhé pauzy v provádění aplikací s velkým počtem objektů v paměti.
- Je navržena kompaktní implementace polí, která vyžaduje o 60 % méně paměti pro pole se stejným typem dat (úspory jsou dosaženy díky tomu, že typová data nejsou ukládána pro každý prvek, ale pro skupinu prvků).
- Byla přidána možnost explicitně deklarovat globální proměnné v libovolném bloku kódu pomocí klíčového slova „global“. Při zadávání výrazů s klíčovým slovem „global“ v bloku kódu musí být všechny proměnné explicitně deklarovány. Pokud deklarace „global“ chybí, implicitně se nastaví výraz „global *“, čímž se zachová staré chování a všechny proměnné se považují za globální. Byl také přidán výraz „global“. *", ve kterém se všechny implicitně definované globální proměnné stanou pouze pro čtení. X = 1 — Ok, X je globální proměnná, staré výchozí chování. do global Y — deklaruje proměnnou Y jako globální, všechny ostatní proměnné v bloku musí být deklarovány explicitně. Y = 1 — Ok, proměnná Y je dříve definována. X = 1 — Chyba, proměnná X není definována. end X = 2 — Ok, mimo globální blok se použije staré chování.
- Řídicí proměnné zadané ve smyčkách „for“ jsou nyní pouze pro čtení a nelze je v těle smyčky upravovat. Například proměnnou i deklarovanou ve smyčce „for i = 1, 5 do“ nelze v těle smyčky upravovat.
- Při tisku čísel s plovoucí desetinnou čárkou pomocí funkce print se nyní tiskne dostatečný počet číslic pro jejich správný převod zpět z řetězce do původní reprezentace.
- Povolený počet úrovní vnoření pro konstruktory tabulek byl zvýšen.
- Přidána funkce table.create(nseq, nrec) pro přidání prázdné tabulky a předběžnou alokaci paměti pro zadaný počet prvků.
- Funkce utf8.offset vrací nejen bajtový offset od začátku znaku, ale také pozici konce znaku.
- Přidána podpora pro vytváření externích řetězců, které se nacházejí v paměti, jež není spravována garbage collectorem Lua.
- Přidána funkce luaL_openselectedlibs pro načtení vybrané knihovny a také funkce luaL_makeseed, která generuje seed pro funkci lua_newstate.
- V lua.c je zajištěno dynamické načítání knihovny 'readline', pokud je k dispozici (pokud je knihovna v systému přítomna, načte se a zpřístupní se funkce pro úpravu řádků).
- Povolena optimalizace pro úsporu paměti při načítání předkompilovaného bajtkódu - Lua nyní může znovu použít paměť v některých interních strukturách bez vytváření duplikátů při načítání duplicitního bajtkódu.
- Zajištěno, že všechny řádky jsou znovu použity v operacích výpisu a odečtení.
- V pomocných bufferech je zajištěno opětovné použití bufferu (bez kopírování do nového bufferu) při vytváření finálního řetězce.
Zdroj: opennet.ru
