Öppen källkod för Luau, en typkontrollerande variant av Lua-språket

Tillkännagav öppen källkod och publicering av den första fristående utgåvan av programmeringsspråket Luau, fortsatt utvecklingen av Lua-språket och bakåtkompatibelt med Lua 5.1. Luau är främst designad för att bädda in skriptmotorer i applikationer och syftar till att uppnå hög prestanda och låg resursförbrukning. Projektkoden är skriven i C++ och är öppen under MIT-licensen.

Luau utökar Lua med typkontrollfunktioner och några nya syntaktiska konstruktioner som strängliteraler. Språket är bakåtkompatibelt med Lua 5.1 och delvis med nyare versioner. Lua Runtime API stöds, vilket gör att du kan använda Luau med befintlig kod och bindningar. Språkets körtid är baserad på en kraftigt omarbetad Lua runtime 5.1-kod, men tolken är helt omskriven. Under utvecklingen användes några nya optimeringstekniker för att uppnå högre prestanda jämfört med Lua.

Projektet utvecklades av Roblox och används i koden för spelplattformen, spelen och användarapplikationerna för detta företag, inklusive Roblox Studio-redigeraren. Ursprungligen utvecklades Luau bakom stängda dörrar, men i slutändan beslutades det att överföra det till kategorin öppna projekt för vidare gemensam utveckling med deltagande av samhället.

Huvudfunktioner:

  • Gradvis typning, intar en mellanposition mellan dynamisk och statisk typning. Luau låter dig använda statisk typning efter behov genom att specificera typinformation genom speciella anteckningar. De inbyggda typerna "any", "noll", "boolean", "number", "string" och "thread" tillhandahålls. Samtidigt bevaras möjligheten att använda dynamisk typning utan att uttryckligen definiera typen av variabler och funktioner. funktion foo(x: tal, y: sträng): boolesk lokal k: sträng = y:rep(x) returnera k == "a" slut
  • Stöd för strängliteraler (som i Lua 5.3) som "\0x**" (hexadecimalt tal), "\u{**}" (Unicode-tecken) och "\z" (radens slut), samt förmåga att visualisera talformatering (du kan skriva 1_000_000 istället för 1000000), literaler för hexadecimala (0x...) och binära tal (0b......).
  • Stöd för uttrycket "fortsätt", som kompletterar det befintliga nyckelordet "break", för att hoppa till en ny loopiteration.
  • Stöd för sammansatta tilldelningsoperatorer (+=, -=, *=, /=, %=, ^=, ..=).
  • Stöd för användning av villkorliga "om-då-annat"-block i form av uttryck som returnerar det värde som beräknats under exekveringen av blocket. Du kan ange ett godtyckligt antal elseif-uttryck i ett block. lokalt maxValue = om a > b så a annat b lokalt tecken = om x < 0 så -1 annat om x > 0 så 1 annat 0
  • Närvaron av ett isoleringsläge (sandlåda), som låter dig köra opålitlig kod. Den här funktionen kan användas för att organisera lanseringen sida vid sida av din egen kod och kod skriven av en annan utvecklare, till exempel tredje parts bibliotek för vilkas säkerhet inte kan garanteras.
  • En begränsning av standardbiblioteket från vilket funktioner som potentiellt kan skapa säkerhetsproblem har tagits bort. Till exempel biblioteken "io" (åtkomst till filer och startprocesser), "paket" (åtkomst till filer och laddningsmoduler), "os" (funktioner för att komma åt filer och ändra miljövariabler), "debug" (osäker drift med minne) , "dofile" och "loadfile" (FS-åtkomst).
  • Tillhandahålla verktyg för statisk kodanalys, identifiera fel (linter) och kontrollera korrekt användning av typer.
  • Egen högpresterande parser, bytekodtolkare och kompilator. Luau stöder ännu inte JIT-kompilering, men det påstås att Luau-tolken är ganska jämförbar i prestanda med LuaJIT i vissa situationer.

Källa: opennet.ru

Lägg en kommentar