Die Veröffentlichung der Quelltexte und die erste eigenständige Version der Programmiersprache Luau wurde angekündigt. Diese Sprache entwickelt die Programmiersprache Lua weiter und ist rückwärtskompatibel mit Lua 5.1. Luau ist hauptsächlich für die Einbettung von Skripterstellern in Anwendungen konzipiert und zielt darauf ab, hohe Leistung bei niedrigem Ressourcenverbrauch zu erreichen. Der Code des Projekts ist in C++ geschrieben und steht unter der MIT-Lizenz.
Luau erweitert Lua um Typprüfung und einige neue Syntaxkonstruktionen, wie z. B. Stringliterale. Die Sprache ist rückwärtskompatibel mit Lua 5.1 und teilweise mit neueren Versionen. Die API der Lua-Laufzeitumgebung wird unterstützt, was die Verwendung von Luau mit bereits existierendem Code und Bindungen ermöglicht. Die Sprachlaufzeit basiert auf dem stark überarbeiteten Code der Lua-Laufzeitumgebung 5.1, der Interpreter wurde jedoch vollständig neu geschrieben. Bei der Entwicklung wurden einige neue Optimierungstechniken eingesetzt, die eine höhere Leistung im Vergleich zu Lua ermöglichten.
Das Projekt wurde von Roblox entwickelt und wird im Code ihrer Gaming-Plattform, in Spielen und in benutzerdefinierten Anwendungen verwendet, einschließlich des Roblox Studio Editors. Ursprünglich wurde Luau hinter verschlossenen Türen entwickelt, aber schließlich wurde entschieden, es zu einem Open-Source-Projekt zu machen, um eine weitere gemeinsame Entwicklung mit der Gemeinschaft zu ermöglichen.
Hauptmerkmale:
- Das graduierte Typsystem (Gradual typing) nimmt eine Zwischenstellung zwischen dynamischer und statischer Typisierung ein. Luau ermöglicht die Verwendung statischer Typisierung nach Bedarf, indem Typinformationen über spezielle Anmerkungen angegeben werden. Eingebaute Typen wie «any», «nil», «boolean», «number», «string» und «thread» werden bereitgestellt. Gleichzeitig bleibt die Möglichkeit bestehen, dynamische Typisierung ohne explizite Typdefinitionen für Variablen und Funktionen zu verwenden. function foo(x: number, y: string): boolean local k: string = y:rep(x) return k == «a» end
- Unterstützung von String-Literalen (wie in Lua 5.3), wie «\0x**» (Hexadezimalzahl), «\u{**}» (Unicode-Zeichen) und «\z» (Ende der Zeile), sowie die Möglichkeit, Zahlen anschaulich zu formatieren (man kann 1_000_000 anstelle von 1000000 schreiben), Literale für hexadezimale (0x…) und binäre Zahlen (0b…….).
- Unterstützung der Anweisung «continue», die das bestehende Schlüsselwort «break» ergänzt, um zu einer neuen Iteration der Schleife überzugehen.
- Unterstützung von zusammengesetzten Zuweisungsoperatoren (+=, -=, *=, /=, %=, ^=, ..=).
- Unterstützung der Nutzung von bedingten Blöcken «if-then-else» in Form von Ausdrücken, die einen Wert zurückgeben, der während der Ausführung des Blocks berechnet wird. Es können beliebig viele Ausdrücke elseif im Block angegeben werden. local maxValue = if a > b then a else b local sign = if x 0 then 1 else 0
- Verfügbarkeit eines Sandbox-Modus, der es ermöglicht, unsicheren Code auszuführen. Diese Funktion kann genutzt werden, um die Ausführung eigenen Codes und Codes von anderen Entwicklern, wie beispielsweise von unzuverlässigen externen Bibliotheken, nebenher zu organisieren.
- Einschränkung der Standardbibliothek, aus der Funktionen entfernt wurden, die potenziell Sicherheitsprobleme verursachen können. Beispielsweise wurden aus dem Standardset die Bibliotheken „io“ (Zugriff auf Dateien und Prozessstart), „package“ (Zugriff auf Dateien und Modulnutzung), „os“ (Funktionen zum Zugriff auf Dateien und zur Änderung von Umgebungsvariablen entfernt), „debug“ (unsichere Speicheroperationen), „dofile“ und „loadfile“ (Zugriff auf das Dateisystem) ausgeschlossen.
- Bereitstellung von Werkzeugen für die statische Codeanalyse, Fehlererkennung (Linter) und Überprüfung der korrekten Verwendung von Typen.
- Eigene leistungsstarke Parser, Bytecode-Interpreter und Compiler. Luau unterstützt derzeit kein JIT-Compiling, es wird jedoch behauptet, dass der Luau-Interpreter in einigen Situationen hinsichtlich der Leistung mit LuaJIT vergleichbar ist.
Quelle: opennet.ru
