Paskelbta apie atvirojo kodo ir pirmosios atskiros Luau programavimo kalbos leidimo paskelbimą, tęsiant Lua kalbos kūrimą ir atgalinį suderinamumą su Lua 5.1. „Luau“ kalba pirmiausia skirta scenarijų varikliams įterpti į programas ir siekiama užtikrinti aukštą našumą ir mažą išteklių suvartojimą. Projekto kodas parašytas C++ ir yra atidarytas pagal MIT licenciją.
„Luau“ išplečia „Lua“ tipo tikrinimo galimybes ir kai kurias naujas sintaksines konstrukcijas, tokias kaip eilučių literalai. Kalba yra suderinama su Lua 5.1 ir iš dalies su naujesnėmis versijomis. Palaikoma „Lua Runtime“ API, todėl galite naudoti „Luau“ su esamu kodu ir susiejimais. Kalbos vykdymo laikas yra pagrįstas labai perdirbtu „Lua Runtime 5.1“ kodu, tačiau vertėjas yra visiškai perrašytas. Kūrimo metu buvo naudojami keli nauji optimizavimo metodai, siekiant didesnio našumo, palyginti su Lua.
Projektą sukūrė „Roblox“ ir jis naudojamas šios įmonės žaidimų platformos, žaidimų ir vartotojų programose, įskaitant „Roblox Studio“ redaktorių. Iš pradžių „Luau“ buvo kuriamas už uždarų durų, tačiau galiausiai buvo nuspręsta jį perkelti į atvirų projektų kategoriją, kad būtų galima toliau bendrai plėtoti dalyvaujant bendruomenei.
Pagrindiniai bruožai:
- Laipsniškas spausdinimas, užimantis tarpinę padėtį tarp dinaminio ir statinio spausdinimo. Luau leidžia prireikus naudoti statinį spausdinimą, nurodant tipo informaciją specialiomis anotacijomis. Pateikiami įtaisytieji tipai „bet koks“, „nulis“, „loginis“, „skaičius“, „styga“ ir „gija“. Tuo pačiu išsaugoma galimybė naudoti dinaminį tipavimą, aiškiai nenurodant kintamųjų ir funkcijų tipo. funkcija foo(x: skaičius, y: eilutė): loginis lokalus k: eilutė = y:rep(x) return k == "a" pabaiga
- Palaikymas eilučių literalams (kaip Lua 5.3), pvz., „\0x**“ (šešioliktainis skaičius), „\u{**}“ (unikodo simbolis) ir „\z“ (eilutės pabaiga), taip pat galimybė vizualizuoti skaičių formatavimą (galite rašyti 1_000_000, o ne 1000000), šešioliktainių (0x...) ir dvejetainių skaičių literalius (0b......).
- Išraiškos „tęsti“ palaikymas, papildantis esamą „pertraukimo“ raktinį žodį, norint pereiti prie naujos ciklo iteracijos.
- Sudėtinių priskyrimo operatorių (+=, -=, *=, /=, %=, ^=, ..=) palaikymas.
- Sąlyginių „jei-tai-else“ blokų naudojimo palaikymas išraiškų forma, kurios grąžina reikšmę, apskaičiuotą vykdant bloką. Bloke galite nurodyti bet kokį elseif išraiškų skaičių. vietinė maksimali vertė = jei a > b tada a else b vietinis ženklas = jei x < 0, tada -1 elseif x > 0, tada 1 kitas 0
- Atskyrimo režimas (smėlio dėžė), leidžiantis paleisti nepatikimą kodą. Šią funkciją galima naudoti norint organizuoti paleidimą šalia savo ir kito kūrėjo parašyto kodo, pavyzdžiui, trečiųjų šalių bibliotekose, kurių saugumas negali būti garantuotas.
- Standartinės bibliotekos, iš kurios buvo pašalintos funkcijos, galinčios sukelti saugos problemų, apribojimas. Pavyzdžiui, bibliotekos „io“ (prieiga prie failų ir paleidžiami procesai), „paketas“ (prieiga prie failų ir įkeliami moduliai), „os“ (prieigos prie failų ir aplinkos kintamųjų keitimo funkcijos), „debug“ (nesaugus veikimas su atmintimi). , „dofile“ ir „loadfile“ (FS prieiga).
- Statinio kodo analizės, klaidų (linter) nustatymo ir tipų teisingo naudojimo tikrinimo įrankių suteikimas.
- Nuosavas didelio našumo analizatorius, baitinio kodo interpretatorius ir kompiliatorius. Luau dar nepalaiko JIT kompiliavimo, tačiau teigiama, kad Luau vertėjas kai kuriose situacijose yra gana panašus į LuaJIT.
Šaltinis: opennet.ru
