Bylo oznámeno otevření zdrojových kódů a publikace prvního samostatného vydání programovacího jazyka Luau, který pokračuje ve vývoji jazyka Lua a je zpětně kompatibilní s Lua 5.1. Jazyk Luau je navržen především pro vkládání skriptovacích handlerů do aplikací a cílí na dosažení vysokého výkonu a nízké spotřeby zdrojů. Kód projektu je napsán v jazyce C++ a je otevřen pod licencí MIT.
Luau rozšiřuje Lua o možnosti typové kontroly a některé nové syntaktické konstrukce, jako jsou řetězcové literály. Jazyk je zpětně kompatibilní s Lua 5.1 a částečně s novějšími verzemi. Podporuje API Lua Runtime, což umožňuje používat Luau s již existujícím kódem a vazbami. Jazykový runtime je založen na silně přepracovaném kódu Lua runtime 5.1, ale interpret je zcela přepsán. Při vývoji byly použity některé nové techniky optimalizace, které umožnily dosáhnout vyššího výkonu ve srovnání s Lua.
Projekt byl vyvinut společností Roblox a používá se v kódu herní platformy, her a uživatelských aplikací této společnosti, včetně editoru Roblox Studio. Původně se Luau vyvíjel za zavřenými dveřmi, ale nakonec bylo rozhodnuto převést jej do kategorie otevřených projektů pro další společný vývoj za účasti komunity.
Hlavní vlastnosti:
- Postupný systém typů (Gradual typing), který se nachází mezi dynamickým a statickým typováním. Luau umožňuje používat statické typování podle potřeby, udáváním informací o typech prostřednictvím speciálních anotací. Jsou poskytovány vestavěné typy jako „any“, „nil“, „boolean“, „number“, „string“ a „thread“. Přitom je zachována možnost používat dynamické typování bez explicitního určení typu proměnných a funkcí. function foo(x: number, y: string): boolean local k: string = y:rep(x) return k == "a" end
- Podpora řetězcových literálů (jak v Lua 5.3), jako jsou „\0x**“ (hexadecimální číslo), „\u{**}“ (Unicode znak) a „\z“ (konec řetězce), stejně jako možnost zřetelně formátovat čísla (můžete psát 1_000_000 místo 1000000), literály pro hexadecimální (0x…) a binární čísla (0b…….).
- Podpora výrazu „continue“, který doplňuje existující klíčové slovo „break“, pro přechod k nové iteraci cyklu.
- Podpora složených přiřazovacích operátorů (+=, -=, *=, /=, %=, ^=, ..=).
- Podpora podmínkových bloků „if-then-else“ ve formě výrazů, které vracejí hodnotu vyhodnocenou během běhu bloku. Je povoleno uvést libovolný počet výrazů elseif v bloku. local maxValue = if a > b then a else b local sign = if x 0 then 1 else 0
- Existence izolačního režimu (sandbox), který umožňuje spouštění nedůvěryhodného kódu. Tato možnost může být použita k uspořádání souběžného spuštění vlastního kódu a kódu napsaného jiným vývojářem, například externích knihoven, jejichž bezpečnost nelze zaručit.
- Omezení standardní knihovny z níž byly odstraněny funkce, které mohou potenciálně vytvářet bezpečnostní problémy. Například z běžného souboru byly vyloučeny knihovny „io“ (přístup k souborům a spouštění procesů), „package“ (přístup k souborům a načítání modulů), „os“ (byly odstraněny funkce přístupu k souborům a změny proměnných prostředí), „debug“ (nebezpečná práce s pamětí), „dofile“ a „loadfile“ (přístup k FS).
- Poskytnutí nástrojů pro statickou analýzu kódu, odhalování chyb (linter) a kontrolu správnosti používání typů.
- Vlastní vysoce výkonný parser, interpret bytecode a kompilátor. Luau zatím nepodporuje JIT kompilaci, ale tvrdí se, že interpret Luau je v některých situacích srovnatelný s výkonem LuaJIT.
Zdroj: opennet.ru
