Bejelentették a Luau programozási nyelv első önálló kiadásának nyílt forráskódját és publikálását. Ez a nyelv a Lua fejlesztését folytatja, és visszafelé kompatibilis a Lua 5.1-gyel. A Luau elsősorban szkriptkezelők alkalmazásokba való beágyazására szolgál, és célja a nagy teljesítmény és az alacsony erőforrás-fogyasztás elérése. A projekt kódja C++ nyelven íródott, és nyílt forráskódú az MIT licenc alatt.
A Luau kibővíti a Lua nyelvet típusellenőrzési képességekkel és néhány új szintaktikai konstrukcióval, például karakterlánc literálokkal. A nyelv visszafelé kompatibilis a Lua 5.1-gyel, és részben a későbbi verziókkal is. A Lua Runtime API támogatott, lehetővé téve a Luau használatát a meglévő kóddal és kötésekkel. A nyelvi futásidejű környezet egy jelentősen átírt Lua 5.1 futásidejű környezeten alapul, de az értelmezőt teljesen átírták. A fejlesztés során számos új optimalizálási technikát alkalmaztak, amelyek a Lua-hoz képest jobb teljesítményt eredményeztek.
A projektet a Roblox fejlesztette, és a cég játékplatformjának, játékainak és felhasználói alkalmazásainak kódjában használják, beleértve a Roblox Studio szerkesztőt is. A Luau fejlesztése kezdetben zárt ajtók mögött zajlott, de végül úgy döntöttek, hogy nyílt forráskódú projektté alakítják a további együttműködésen alapuló fejlesztés érdekében, a közösség részvételével.
Főbb jellemzői:
- Fokozatos tipizálás, amely a dinamikus és a statikus tipizálás között helyezkedik el. A Luau lehetővé teszi a statikus tipizálás használatát, amikor szükséges, a típusinformációkat speciális annotációk segítségével megadva. Beépített típusok állnak rendelkezésre: "any", "nil", "boolean", "number", "string" és "thread". A dinamikus tipizálás a változók és függvények típusainak explicit definiálása nélkül is támogatott. function foo(x: number, y: string): boolean local k: string = y:rep(x) return k == "a" end
- Támogatás a karakterlánc literálokhoz (mint a Lua 5.3-ban), például a "\0x**" (hexadecimális szám), a "\u{**}" (Unicode karakter) és a "\z" (sor vége), valamint a számok vizuális formázásának lehetősége (1_000_000 írható 1000000 helyett), a hexadecimális (0x…) és bináris számok literáljai (0b…….).
- A „continue” kifejezés támogatása, kiegészítve a meglévő „break” kulcsszót, egy új ciklus iterációba való átlépéshez.
- Összetett értékadó operátorok támogatása (+=, -=, *=, /=, %=, ^=, ..=).
- „if-then-else” feltételes blokkok használatának támogatása kifejezések formájában, amelyek a blokk végrehajtása során kiszámított értéket adják vissza. Tetszőleges számú elseif kifejezés adható meg egy blokkban. local maxValue = if a > b then a else b local sign = if x < 0 then -1 elseif x > 0 then 1 else 0
- A sandbox mód megléte lehetővé teszi a nem megbízható kódok futtatását. Ez a funkció arra használható, hogy saját kódot futtasson mások által írt kóddal együtt, például harmadik féltől származó könyvtárakkal, amelyek biztonsága nem garantálható.
- Egy szabványos könyvtárkorlátozás, amely eltávolítja azokat a függvényeket, amelyek potenciálisan biztonsági problémákat okozhatnak. Például a következő könyvtárakat eltávolították a szabványos készletből: "io" (fájlhozzáférés és folyamatindítás), "package" (fájlhozzáférés és modulbetöltés), "os" (fájlhozzáférési és környezeti változók módosítási függvényei eltávolítva), "debug" (nem biztonságos memóriakezelés), valamint "dofile" és "loadfile" (fájlrendszer-hozzáférés).
- Eszközök biztosítása statikus kódelemzéshez, hibaészleléshez (linter) és típusvalidációhoz.
- A Luau saját nagy teljesítményű elemzője, bájtkód-értelmezője és fordítója. A Luau egyelőre nem támogatja a just-in-time (JIT) fordítást, de állítólag a Luau értelmező bizonyos helyzetekben teljesítményben összehasonlítható a LuaJIT-tel.
Forrás: opennet.ru
