Teated on välja kuulutatud Luauprogrammeeri keele lähtekoodide avamisest ja esimese eraldi väljaande avaldamisest, mis jätkab Lua keele arengut ning on tagasiühilduv Lua 5.1-ga. Luau keel on peamiselt mõeldud skriptide töötlemiseks rakendustes ning on suunatud kõrge jõudluse ja madalaressursikasutuse saavutamisele. Projekti kood on kirjutatud keeles C++ ja avatud MIT litsentsi all.
Luau laiendab Lua-d tüübikontrolli võimaluste ja mõningate uute süntaktiliste konstruktsioonidega, nagu stringiliteraalid. Keel on tagasiühilduv Lua 5.1-ga ja osaliselt uuemate versioonidega. Toetatakse Lua Runtime API-d, mis võimaldab kasutada Luau-d juba olemasoleva koodi ja sidumiste (binding) koosseisus. Keel põhineb tugevalt ümber töötatud Lua runtime 5.1 koodil, kuid tõlgendaja on täiesti ümber kirjutatud. Arenduses on kasutatud uusi optimeerimistehnikaid, mis on võimaldanud saavutada võrreldes Luau-ga kõrgemat jõudlust.
Projekt on loodud Robloxi poolt ja seda kasutatakse mänguplatvormi, mängude ja kasutajarakenduste koodis, sealhulgas Roblox Studio redaktoris. Alguses arendati Luaut suletud ustega, kuid lõpuks otsustati see avatud projektiks muundada, et edendada edasist koostööd kogukonna osalusel.
Peamised omadused:
- Järjekindel tüüpide süsteem (Gradual typing), mis asub dünaamilise ja staatilise tüpiseerimise vahel. Luau võimaldab kasutada staatilist tüpiseerimist vajadusel, märkides tüüpide teavet spetsiaalsete annotatsioonide kaudu. Saadaval on sisseehitatud tüübid "any", "nil", "boolean", "number", "string" ja "thread". Samuti on säilinud dünaamilise tüpiseerimise võimalus, ilma et oleks vaja selgelt määratleda muutujate ja funktsioonide tüüpe. function foo(x: number, y: string): boolean local k: string = y:rep(x) return k == "a" end
- Stringide eriliste literaaride tugi (nagu Lua 5.3-s), näiteks «\0x**» (kuusnurkne number), «\u{**}» (Unicode-märk) ja «\z» (rea lõpp), samuti numbrite visualiseerimise võimalus (nt 1_000_000 asemel 1000000), literaarid kuusnurksete (0x…) ja kahekümnendate numbrite jaoks (0b…….).
- Väljendi «continue» tugi, mis täiendab olemasolevat võtmesõna «break», et liikuda tsükli uuele iteratsioonile.
- Koondamiste talituste tugi (+=, -=, *=, /=, %=, ^=, ..=).
- Tugi tingimuslike blokkide «if-then-else» kasutamiseks väljendite vormis, mis tagastavad väärtuse, mis arvutatakse välja ploki käitamisel. Lubatud on määrata meelevaldne arv väljendeid elseif plokis. local maxValue = if a > b then a else b local sign = if x 0 then 1 else 0
- Isolatsioonirežiimi (sandbox) olemasolu, mis võimaldab usaldamatut koodi käitada. Antud võimalust saab kasutada enda koodi ja teise arendaja kirjutatud koodi, näiteks kolmandate osapoolte teegid, mille turvalisuse osas ei saa kindel olla, kõrvuti käitamiseks.
- Standardteegi piirang, millest on eemaldatud funktsioonid, mis võivad potentsiaalselt põhjustada turvaprobleeme. Näiteks on standardkomplektist välja jäetud „io” (failide juurdepääs ja protsesside käivitamine), „package” (failide juurdepääs ja moodulite laadimine), „os” (failide juurdepääsu ja keskkonnamuutujate muutmise funktsioonid on eemaldatud), „debug” (mitteohutu mälutöötlus), „dofile” ja „loadfile” (FS-ile juurdepääs).
- Tööriistade pakkumine staatiliseks koodianalüüsiks, vigade tuvastamiseks (linter) ja tüüpide õige kasutamise kontrollimiseks.
- Oma kõrge jõudlusega parser, bytecode'i tõlgendaja ja kompilaator. Luau ei toeta praegu JIT-kompileerimist, kuid väidetakse, et Luau tõlgendaja on mõnes olukorras jõudluse poolest võrreldav LuaJIT-iga.
Allikas: opennet.ru
