Der Code von Luau, einer Variantensprache von Lua mit Typprüfung, wurde veröffentlicht.

Die Veröffentlichung des Quellcodes und des ersten separaten Releases der Programmiersprache Luau wurde angekündigt, die die Weiterentwicklung der Sprache Lua fortsetzt und rückwärtskompatibel mit Lua 5.1 ist. Luau ist hauptsächlich für die Einbettung von Skript-Handlern in Anwendungen gedacht und zielt darauf ab, hohe Leistung und niedrigen Ressourcenverbrauch zu erreichen. Der Code des Projekts ist in C++ geschrieben und unter der MIT-Lizenz offen.

Luau erweitert Lua um Typprüfungsfunktionen und einige neue syntaxseitige Konstrukte wie Stringliterale. Die Sprache ist rückwärtskompatibel mit Lua 5.1 und teilweise mit neueren Versionen. Die Lua Runtime API wird unterstützt, was die Verwendung von Luau mit bestehendem Code und Bindungen ermöglicht. Die Laufzeitumgebung der Sprache basiert auf stark überarbeitetem Code der Lua Runtime 5.1, jedoch ist der Interpreter vollständig neu geschrieben. Bei der Entwicklung kamen einige neue Optimierungstechniken zum Einsatz, die eine bessere Leistung im Vergleich zu Lua ermöglichten.

Das Projekt wurde von Roblox entwickelt und wird im Code der Spieleplattform, der Spiele und der Benutzeranwendungen des Unternehmens, einschließlich des Roblox Studio Editors, verwendet. Ursprünglich wurde Luau hinter verschlossenen Türen entwickelt, aber schließlich wurde beschlossen, es als Open-Source-Projekt für eine zukünftige gemeinsame Entwicklung mit der Community zu öffnen.

Hauptmerkmale:

  • Das schrittweise Typensystem (Gradual typing) nimmt eine Zwischenstellung zwischen dynamischer und statischer Typisierung ein. Luau ermöglicht die Verwendung der statischen Typisierung nach Bedarf, indem Typinformationen über spezielle Annotationsdaten angegeben werden. Es werden eingebaute Typen wie „any“, „nil“, „boolean“, „number“, „string“ und „thread“ bereitgestellt. Gleichzeitig bleibt die Möglichkeit der dynamischen Typisierung ohne explizite Typdefinitionen für Variablen und Funktionen erhalten. function foo(x: number, y: string): boolean local k: string = y:rep(x) return k == "a" end
  • Unterstützung von Stringliteralen (wie in Lua 5.3), wie „\0x**“ (hexadezimale Zahl), „\u{**}“ (Unicode-Zeichen) und „\z“ (Ende der Zeile), sowie die Möglichkeit zur anschaulichen Darstellung von Zahlen (man kann 1_000_000 anstelle von 1000000 schreiben), Literale für hexadezimale (0x…) und binäre Zahlen (0b…….).
  • Unterstützung des „continue“-Ausdrucks, der das vorhandene Schlüsselwort „break“ ergänzt, um zur nächsten Iteration der Schleife überzugehen.
  • Unterstützung zusammengesetzter Zuweisungsoperatoren (+=, -=, *=, /=, %=, ^=, ..=).
  • Unterstützung der Verwendung bedingter Blöcke »if-then-else« in Form von Ausdrücken, deren Rückgabewert zur Laufzeit des Blocks berechnet wird. Es ist die Angabe einer beliebigen Anzahl von Ausdrücken elseif im Block erlaubt. local maxValue = if a > b then a else b local sign = if x 0 then 1 else 0
  • Verfügbarkeit eines Sandbox-Modus, der die Ausführung von untrusted Code ermöglicht. Diese Möglichkeit kann genutzt werden, um die gleichzeitige Ausführung eigenen Codes und von Code anderer Entwickler, wie z. B. von Drittanbieterbibliotheken, die möglicherweise unsicher sind, zu organisieren.
  • Einschränkung der Standardbibliothek durch das Entfernen von Funktionen, die potenziell Sicherheitsprobleme verursachen können. Beispielsweise wurden die Bibliotheken „io“ (Zugriff auf Dateien und Ausführen von Prozessen), „package“ (Zugriff auf Dateien und Laden von Modulen), „os“ (Funktionen zum Datei- und Umgebungvariablenzugriff entfernt), „debug“ (unsichere Speicherverwaltung), „dofile“ und „loadfile“ (Zugriff auf das FS) aus dem Standardset ausgeschlossen.
  • Bereitstellung von Tools für die statische Codeanalyse, Fehlererkennung (Linter) und Typüberprüfung.
  • Eigene Hochleistungsparser, Bytecode-Interpreter und Compiler. Luau unterstützt derzeit kein JIT-Compiling, es wird jedoch behauptet, dass der Luau-Interpreter in bestimmten Situationen in Bezug auf die Leistung mit LuaJIT vergleichbar ist.

Quelle: opennet.ru

60GB SSD 8Gb DDR4