Nach zwei Jahren der Entwicklung wurde am 29. Juni still und unbemerkt eine neue Version der Programmiersprache Lua – 5.4 – veröffentlicht.
Lua ist eine einfache interpretiert Sprache, die leicht in Anwendungen integriert werden kann. Aufgrund dieser Eigenschaften wird Lua häufig als Erweiterungs- oder Konfigurationssprache für Programme (insbesondere Computer Spiele) verwendet. Die Verbreitung von Lua erfolgt unter der MIT-Lizenz.
Die vorherige Version (5.3.5) wurde am 10. Juli 2018 veröffentlicht.
Wesentliche Änderungen in der neuen Version
ein neuer generationenbasierter Garbage Collector. In der Funktion collectgarbage sind die Parameter setpause und setstepmul als veraltet markiert; stattdessen wird empfohlen, den Parameter incremental zu verwenden;
eine neue Funktion zur Ausgabe von Warnungen warn mit der Möglichkeit, deren Anzeige zu deaktivieren;
die neue Implementierung von math.random verwendet den Algorithmus xoshiro256** anstelle von libc und initialisiert den Generator mit einer Zufallszahl;
Konstanten (constant variables);
„zu schließende“ (to-be-closed) Variablen – lokale Konstanten, für die die Methode __close beim Verlassen des Geltungsbereichs ausgeführt wird;
eine neue Funktion lua_resetthread – räumt den Stack auf und schließt alle „zu schließenden“ Variablen;
eine neue Funktion coroutine.close – schließt die angegebene Koroutine und alle ihre „zu schließenden“ Variablen;
Benutzerdefinierte Daten (userdata) können eine Menge von Werten mit indeksiertem Zugriff enthalten. Dafür wurden neue Funktionen eingeführt: lua_newuserdatauv, lua_setiuservalue und lua_getiuservalue;
Debugging-Informationen zu den Parametern und Rückgabewerten von Funktionen sind verfügbar;
wenn in einer for-Schleife ein ganzzahliger Index verwendet wird und ein Überlauf auftritt – wird die Schleife beendet;
der Funktion string.gmatch wurde ein optionales Argument hinzugefügt, das den Offset vom Anfang der Zeichenkette für die Suche nach Übereinstimmungen angibt;
die Funktionen für die implizite Umwandlung von Strings in Zahlen wurden in die String-Bibliothek verschoben, ihr Verhalten hat sich geändert. Zum Beispiel ist das Ergebnis der Operation "1" + "2" jetzt eine Ganzzahl und nicht mehr eine Fließkommazahl;
in der Gedächtniszuteilungsfunktion kann ein Fehler auftreten, wenn der Speicherblock verkleinert wird;
neues Formatierungszeichen in der Funktion string.format – %p (für Zeiger);
die Bibliothek utf8 akzeptiert Zeichencodes bis zu 2³¹ (bei Angabe eines speziellen Flags, ohne dieses sind nur Codes bis 0x10FFFF zulässig, und Surrogate sind nicht erlaubt);
Ganzzahlige Konstanten, die außerhalb des Wertebereichs liegen, werden in Fließkommazahlen umgewandelt (früher fand eine bitweise Abschneidung statt);
Das Metamethode __lt wird nicht mehr verwendet, um die Metamethode __le zu emulieren; wenn erforderlich, muss die Metamethode __le explizit angegeben werden;
Ein Label für den goto-Befehl kann nicht erstellt werden, wenn im aktuellen Gültigkeitsbereich bereits ein Label mit demselben Namen existiert (auch wenn es im äußeren Bereich definiert wurde);
Die Metamethode __gc kann nicht nur eine Funktion sein. Wenn der Aufruf der Methode fehlschlägt, wird eine Warnung ausgegeben;
Die Funktion print ruft tostring nicht für jedes Argument auf, sondern verwendet ihre internen Umwandlungen;
Die Funktion io.lines gibt ein Set von vier Werten anstelle eines einzelnen Wertes zurück. Um das alte Verhalten zu emulieren, setzen Sie den Aufruf in Klammern, wenn Sie ihn als Parameter beim Aufruf einer anderen Funktion verwenden.
Quelle: linux.org.ru
