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
