De broncode is vrijgegeven en de eerste aparte editie van de programmeertaal Luau is aangekondigd, die de ontwikkeling van de taal Lua voortzet en compatibel is met Lua 5.1. De Luau-taal is voornamelijk ontworpen voor het inbedden van scriptverwerkers in applicaties en richt zich op hoge prestaties met een laag verbruik van middelen. De projectcode is geschreven in C++ en is vrijgegeven onder de MIT-licentie.
Luau breidt Lua uit met typechecking en enkele nieuwe syntactische constructies, zoals stringliteral. De taal is compatibel met Lua 5.1 en gedeeltelijk met nieuwere versies. De Lua Runtime API wordt ondersteund, waardoor Luau kan worden gebruikt met bestaande code en bindings. De taal-runtime is gebaseerd op een sterk herschreven code van Lua runtime 5.1, maar de interpreter is volledig herschreven. Bij de ontwikkeling zijn enkele nieuwe optimalisatietechnieken toegepast die hebben geleid tot hogere prestaties in vergelijking met Lua.
Het project is ontwikkeld door Roblox en wordt gebruikt in de code van het gamingplatform, games en klantapplicaties van dit bedrijf, inclusief de Roblox Studio-editor. Aanvankelijk werd Luau onder gesloten deuren ontwikkeld, maar uiteindelijk is besloten het te transformeren naar een open project voor verdere gezamenlijke ontwikkeling met de gemeenschap.
Belangrijkste kenmerken:
- Een geleidelijke typesysteem (Gradual typing), dat een tussenpositie innemen tussen dynamische en statische typing. Luau stelt gebruik van statische typing in indien nodig, door type-informatie te specificeren via speciale annotaties. Er zijn ingebouwde typen beschikbaar, zoals 'any', 'nil', 'boolean', 'number', 'string' en 'thread'. Hierbij is ook de mogelijkheid voor dynamische typing behouden zonder expliciete type-definities voor variabelen en functies. function foo(x: number, y: string): boolean local k: string = y:rep(x) return k == 'a' end
- Ondersteuning voor stringliteral (zoals in Lua 5.3), zoals '\0x**' (hexadecimaal getal), '\u{**}' (Unicode-teken) en '\z' (einde van de regel), evenals de mogelijkheid voor een visuele opmaak van getallen (het is mogelijk om 1_000_000 te schrijven in plaats van 1000000), literals voor hexadecimale (0x…) en binaire getallen (0b…….).
- Ondersteuning voor de expressie «continue», die de bestaande sleutelwoord «break» aanvult, om over te gaan naar een nieuwe iteratie van de lus.
- Ondersteuning voor samengestelde toewijzingsoperatoren (+=, -=, *=, /=, %=, ^=, ..=).
- Ondersteuning voor het gebruik van voorwaardelijke blokken «if-then-else» in de vorm van expressies die een waarde teruggeven, berekend tijdens de uitvoering van het blok. Een willekeurig aantal expressies 'elseif' kan in het blok worden opgegeven. local maxValue = if a > b then a else b local sign = if x 0 then 1 else 0
- De beschikbaarheid van een isolatiemodus (sandbox), die het uitvoeren van niet-vertrouwd code mogelijk maakt. Deze mogelijkheid kan worden gebruikt om een eigen code zij aan zij uit te voeren met code geschreven door een andere ontwikkelaar, zoals externe bibliotheken waarvan de veiligheid niet gegarandeerd kan worden.
- Beperking van de standaardbibliotheek uit welke functies zijn verwijderd die potentieel veiligheidsproblemen kunnen veroorzaken. Bijvoorbeeld, bibliotheken zoals «io» (toegang tot bestanden en processen uitvoeren), «package» (toegang tot bestanden en modules laden), «os» (bestands- en omgeving variabelen toegang functies zijn verwijderd), «debug» (onveilige geheugenwerking), «dofile» en «loadfile» (toegang tot het FS) zijn uitgesloten.
- Levering van tools voor statische code-analyse, foutdetectie (linter) en typecorrectheid controle.
- Eigen high-performance parser, bytecode-interpreter en compiler. Luau ondersteunt momenteel geen JIT-compilatie, maar het wordt beweerd dat de Luau-interpreter in sommige situaties qua prestaties vergelijkbaar is met LuaJIT.
Bron: opennet.ru
