Die Programmiersprache Lua 5.5 ist verfügbar

Nach fünf Jahren Entwicklung ist die Veröffentlichung von Lua 5.5 verfügbar, einer schnellen und kompakten Skriptsprache, die weit verbreitet ist als eingebettete Sprache zur Definition von Konfigurationen und zur Erstellung von Erweiterungen. Der Code des Lua-Interpreters ist in C geschrieben und wird unter der MIT-Lizenz verteilt.

Lua kombiniert eine einfache prozedurale Syntax mit der Möglichkeit, Daten über assoziative Arrays und erweiterbare Sprachsemantiken zu beschreiben. Lua verwendet eine dynamische Typisierung, und die Sprachkonstrukte werden in Bytecode umgewandelt, der auf einer Register-basierten virtuellen Maschine mit automatischer Speicherbereinigung ausgeführt wird. Der Interpreter ist als Bibliothek gestaltet, die in Projekte in C und C++ integriert werden kann.

Hauptneuheiten:

  • Für den Großteil der Operationen der Speicherbereinigung wird ein inkrementeller Modus verwendet, bei dem der Zyklus der Speicherbereinigung in einzelne Schritte unterteilt wird, die sich mit der Ausführung des Programms abwechseln, was es ermöglicht, lange Unterbrechungen bei der Ausführung von Anwendungen mit einer großen Anzahl von Objekten im Speicher zu vermeiden.
  • Es wurde eine kompakte Implementierung von Arrays vorgeschlagen, die 60 % weniger Speicher für Arrays mit homogenem Datentyp benötigt (die Einsparung entsteht dadurch, dass die Typinformationen nicht für jedes Element, sondern für Gruppen von Elementen gespeichert werden).
  • Die Möglichkeit, globale Variablen in beliebigen Codeblöcken mit dem Schlüsselwort „global“ explizit zu deklarieren, wurde hinzugefügt. Wenn im Codeblock Ausdrücke mit dem Schlüsselwort „global“ angegeben werden, müssen alle Variablen zwingend explizit deklariert werden. Wenn die Deklaration „global“ fehlt, wird implizit der Ausdruck „global *“ gesetzt, wobei das alte Verhalten beibehalten wird und alle Variablen als global betrachtet werden. Außerdem wurde der Ausdruck „global<const> *“ eingeführt, bei dem alle implizit definierten globalen Variablen im Nur-Lesen-Modus verfügbar werden. X = 1 — Ok, X — globale Variable, altes Standardverhalten. do global Y — Deklaration der Variablen Y als global, alle anderen Variablen im Block müssen explizit deklariert werden Y = 1 — Ok, die Variable Y wurde zuvor definiert X = 1 — Fehler, die Variable X ist nicht definiert end X = 2 — Ok, außerhalb des globalen Blocks gilt das alte Verhalten
  • Die in den "for"-Schleifen angegebenen Steuervariablen sind jetzt nur noch schreibgeschützt und können im Schleifenbody nicht geändert werden. Zum Beispiel kann die Variable i, die in der Schleife "for i = 1, 5 do" deklariert wird, im Schleifenbody nicht geändert werden.
  • Beim Ausgeben von Gleitkommazahlen über die Funktion print wird nun eine ausreichende Anzahl von Ziffern ausgegeben, um eine ordnungsgemäße Umwandlung von der Zeichenkette in die ursprüngliche Darstellung zu ermöglichen.
  • Die maximale Anzahl an Verschachtelungsebenen für Tabellenkonstrukte wurde erhöht.
  • Es wurde die Funktion table.create(nseq, nrec) hinzugefügt, um eine leere Tabelle zu erstellen und im Voraus Speicher für die angegebene Anzahl an Elementen zu reservieren.
  • In der Funktion utf8.offset wird nun nicht nur der Byte-Offset zum Beginn des Zeichens, sondern auch die Position des Endes des Zeichens zurückgegeben.
  • Die Unterstützung für die Erstellung externer Zeichenfolgen, die im von der Garbage Collection von Lua nicht verwalteten Speicher abgelegt sind, wurde hinzugefügt.
  • Es wurde die Funktion luaL_openselectedlibs zum Laden der ausgewählten Bibliothek sowie die Funktion luaL_makeseed zum Erzeugen eines Seed-Wertes für die Funktion lua_newstate hinzugefügt.
  • In lua.c wurde das dynamische Laden der Bibliothek ‘readline’ bei deren Vorhandensein sichergestellt (wenn die Bibliothek im System vorhanden ist, wird sie geladen und die Funktionen zur Bearbeitung von Zeichenfolgen stehen zur Verfügung).
  • Optimierungen zur Speichereinsparung beim Laden von vorab kompiliertem Bytecode wurden integriert – Lua kann nun Speicher in bestimmten internen Strukturen wiederverwenden, ohne Duplikate bei der Ladung von doppeltem Bytecode zu erzeugen.
  • Es wird sichergestellt, dass alle Zeichenfolgen in den Operationen "dump" und "undump" wiederverwendet werden.
  • In den Hilfs-Puffern wird das Wiederverwenden von Puffern (ohne Kopieren in einen neuen Puffer) beim Erstellen der endgültigen Zeichenfolge ermöglicht.

Quelle: opennet.ru

60GB SSD 8Gb DDR4