Luau, eine typgeprüfte Variante der Lua-Sprache, ist Open Source

Ankündigung der Open Source und Veröffentlichung der ersten eigenständigen Version der Programmiersprache Luau, die die Entwicklung der Lua-Sprache fortsetzt und abwärtskompatibel mit Lua 5.1 ist. Die Luau-Sprache ist in erster Linie für die Einbettung von Skript-Engines in Anwendungen gedacht und zielt auf eine hohe Leistung und einen geringen Ressourcenverbrauch ab. Der Projektcode ist in C++ geschrieben und steht unter der MIT-Lizenz.

Luau erweitert Lua um Typprüfung und einige neue syntaktische Konstrukte wie String-Literale. Die Sprache ist abwärtskompatibel mit Lua 5.1 und teilweise neueren Versionen. Die Lua Runtime API wird unterstützt, sodass Sie Luau mit vorhandenem Code und Bindungen verwenden können. Die Sprachlaufzeit basiert auf dem stark überarbeiteten Lua-Laufzeit-5.1-Code, der Interpreter wurde jedoch komplett neu geschrieben. Die Entwicklung umfasste einige neue Optimierungstechniken, die eine höhere Leistung im Vergleich zu Lua ermöglichten.

Das Projekt wurde von Roblox entwickelt und wird im Code der Spieleplattform, Spiele und Benutzeranwendungen dieses Unternehmens verwendet, einschließlich des Roblox Studio-Editors. Ursprünglich wurde Luau hinter verschlossenen Türen entwickelt, doch am Ende wurde beschlossen, es in die Kategorie der offenen Projekte für die weitere gemeinsame Entwicklung unter Beteiligung der Community zu verschieben.

Hauptmerkmale:

  • Konsistentes Typsystem (Gradual Typing), das eine Zwischenposition zwischen dynamischer und statischer Typisierung einnimmt. Mit Luau können Sie bei Bedarf statische Typisierung verwenden und Typinformationen durch spezielle Anmerkungen angeben. Es stehen die integrierten Typen „any“, „nil“, „boolean“, „number“, „string“ und „thread“ zur Verfügung. Gleichzeitig bleibt auch die Möglichkeit erhalten, dynamische Typisierung zu verwenden, ohne den Typ von Variablen und Funktionen explizit zu definieren. function foo(x: number, y: string): boolean local k: string = y:rep(x) return k == "a" end
  • Unterstützung für String-Literale (wie in Lua 5.3), wie „\0x**“ (hexadezimal), „\u{**}“ (Unicode-Zeichen) und „\z“ (Zeilenende) sowie das Möglichkeit zur Visualisierung der Zahlenformatierung (Sie können 1_000_000 anstelle von 1000000 schreiben), Literale für Hexadezimalzahlen (0x…) und Binärzahlen (0b…….).
  • Unterstützung für die Anweisung „continue“, die das vorhandene Schlüsselwort „break“ ergänzt, um zu einer neuen Iteration der Schleife zu springen.
  • Unterstützung für zusammengesetzte Zuweisungsoperatoren (+=, -=, *=, /=, %=, ^=, ..=).
  • Unterstützung für die Verwendung von „if-then-else“-Bedingungsblöcken in Form von Ausdrücken, die einen während der Blockausführung ausgewerteten Wert zurückgeben. Sie können eine beliebige Anzahl von elseif-Anweisungen in einem Block angeben. local maxValue = if a > b then a else b local sign = if x < 0 then -1 elseif x > 0 then 1 else 0
  • Das Vorhandensein eines Isolationsmodus (Sandbox), der es Ihnen ermöglicht, nicht vertrauenswürdigen Code auszuführen. Diese Funktion kann verwendet werden, um den Start parallel zu Ihrem eigenen Code und Code zu organisieren, der von einem anderen Entwickler geschrieben wurde, beispielsweise Bibliotheken von Drittanbietern, für deren Sicherheit keine Garantie übernommen werden kann.
  • Einschränkung der Standardbibliothek, aus der Funktionen entfernt wurden, die möglicherweise Sicherheitsprobleme verursachen könnten. Zum Beispiel die Bibliotheken „io“ (Zugriff auf Dateien und Starten von Prozessen), „package“ (Zugriff auf Dateien und Laden von Modulen), „os“ (entfernte Funktionen für den Zugriff auf Dateien und das Ändern von Umgebungsvariablen), „debug“ (unsichere Speicherbehandlung) , „dofile“ und „loadfile“ (FS-Zugriff).
  • Bereitstellung von Tools für die statische Codeanalyse, Fehlererkennung (Linter) und Typvalidierung.
  • Eigener Hochleistungs-Parser, Bytecode-Interpreter und Compiler. Luau unterstützt die JIT-Kompilierung noch nicht, es wird jedoch behauptet, dass die Leistung des Luau-Interpreters in manchen Situationen durchaus mit LuaJIT vergleichbar ist.

Source: opennet.ru

Kommentar hinzufügen