Objavljeno je otvaranje izvornog teksta i objava prvog odvojenog izdanja programskog jezika Luau, koji nastavlja razvoj jezika Lua i potpuno je kompatibilan s Lua 5.1. Jezik Luau prvenstveno je namijenjen za ugradnju skriptnih procesora u aplikacije i usmjeren je na postizanje visoke izvedbe i niske potrošnje resursa. Kod projekta napisan je na jeziku C++ i otvoren je pod MIT licencom.
Luau proširuje Lua mogućnostima za provjeru tipova i nekim novim sintaktičkim konstrukcijama, kao što su string literal. Jezik je potpuno kompatibilan s Lua 5.1 i djelomično s novijim verzijama. Podržava Lua Runtime API, što omogućava korištenje Luaua s već postojećim kodovima i vezama (binding). Jezični runtime temelji se na značajno prepravljenom kodu Lua runtime 5.1, ali je interpreter potpuno prepisan. Tijekom razvoja korištene su neke nove tehnike optimizacije, što je omogućilo postizanje više izvedbe u odnosu na Lua.
Projekt je razvijen od strane Roblox-a i koristi se u kodu igrališne platforme, igara i korisničkih aplikacija ove tvrtke, uključujući Roblox Studio uređivač. Isprva se Luau razvijao iza zatvorenih vrata, ali je na kraju odlučeno da se prebaci u otvorene projekte za daljnji zajednički razvoj uz sudjelovanje zajednice.
Glavne značajke:
- Sekvencijalni sustav tipova (Gradual typing) koji zauzima srednji položaj između dinamičke i statičke tipizacije. Luau omogućava korištenje statičke tipizacije prema potrebi, navodeći informacije o tipovima putem posebnih anotacija. Pružaju se ugrađeni tipovi 'any', 'nil', 'boolean', 'number', 'string' i 'thread'. Istodobno, zadržana je mogućnost korištenja dinamičke tipizacije bez eksplicitnog definiranja tipova varijabli i funkcija. function foo(x: number, y: string): boolean local k: string = y:rep(x) return k == 'a' end
- Podrška za string literale (kao u Lua 5.3), kao što su '\0x**' (heksadecimalni broj), '\u{**}' (Unicode simbol) i '\z' (kraj niza), kao i mogućnost vizualnog oblikovanja brojeva (možete pisati 1_000_000 umjesto 1000000), literali za heksadecimalne (0x…) i binarne brojeve (0b…….).
- Podrška za izraz 'continue', koji dopunjuje postojeću ključnu riječ 'break', za prijelaz na novu iteraciju petlje.
- Podrška za složene operatore dodjele (+=, -=, *=, /=, %=, ^=, ..=).
- Podrška za korištenje uvjetnih blokova 'if-then-else' u obliku izraza koji vraćaju vrijednost izračunatu tijekom izvršavanja bloka. Dopušteno je označiti proizvoljan broj izraza elseif unutar bloka. local maxValue = if a > b then a else b local sign = if x 0 then 1 else 0
- Postojanje načina izolacije (sandbox) koji omogućuje pokretanje nepouzdanog koda. Ova mogućnost se može koristiti za simultano pokretanje vlastitog koda i koda napisanog od strane drugih programera, poput vanjskih biblioteka čija sigurnost nije zajamčena.
- Ograničenje standardne biblioteke iz koje su uklonjene funkcije koje potencijalno mogu uzrokovati sigurnosne probleme. Na primjer, iz standardnog skupa su isključene biblioteke 'io' (pristup datotekama i pokretanje procesa), 'package' (pristup datotekama i učitavanje modula), 'os' (uklonjene funkcije za pristup datotekama i promjenu varijabli okruženja), 'debug' (nesigurno upravljanje memorijom), 'dofile' i 'loadfile' (pristup FS-u).
- Pružanje alata za statičku analizu koda, otkrivanje grešaka (linter) i provjeru ispravnosti korištenja tipova.
- Vlastiti visokoučinkoviti parser, interpreter bytecode-a i kompajler. Luau još ne podržava JIT kompajlaciju, ali se tvrdi da je interpreter Luau u nekim situacijama usporediv po performansama s LuaJIT-om.
Izvor: opennet.ru
