Po dwóch latach prac, 29 czerwca z cichą i niezauważalną premierą ukazała się nowa wersja języka programowania Lua — 5.4.
Lua to prosty język programowania interpretowany, który łatwo można zintegrować z aplikacjami. Dzięki tym cechom, Lua jest szeroko stosowany jako język rozszerzeń lub do opisywania konfiguracji programów (w szczególności gier komputerowych). Lua jest udostępniana na licencji MIT.
Poprzednia wersja (5.3.5) została wydana 10 lipca 2018 roku.
Główne zmiany w nowej wersji
nowy zbieracz śmieci oparty na generacjach (generational). W funkcji collectgarbage parametry setpause i setstepmul zostały oznaczone jako przestarzałe, zamiast nich zaleca się użycie parametru incremental;
nowa funkcja do wydawania ostrzeżeń warn z możliwością wyłączenia ich wyświetlania;
nowa implementacja math.random używa algorytmu xoshiro256** zamiast tego dostarczanego przez libc i inicjalizuje generator losowym numerem;
zmienne stałe (constant variables);
zmienne 'do zamknięcia' (to-be-closed) — lokalne stałe, dla których wykonywana jest metoda __close przy wychodzeniu z zakresu widoczności;
nowa funkcja lua_resetthread — czyści stos i wykonuje zamknięcie wszystkich zmiennych 'do zamknięcia';
nowa funkcja coroutine.close — zamyka wskazaną współpracę i wszystkie jej zmienne 'do zamknięcia';
dane użytkownika (userdata) mogą zawierać zestaw wartości z dostępem przez indeks. Wprowadzono nowe funkcje do pracy z nimi: lua_newuserdatauv, lua_setiuservalue i lua_getiuservalue;
dostępne informacje debugowe o parametrach i zwracanych wartościach funkcji;
jeżeli w pętli licznikowej for używany jest indeks całkowity i następuje przepełnienie — pętla zostaje zakończona;
do funkcji string.gmatch dodano opcjonalny argument określający przesunięcie od początku ciągu do wyszukiwania dopasowań;
funkcje niejawnej konwersji ciągów na liczby zostały przeniesione do biblioteki ciągów, zmieniło się ich zachowanie. Na przykład, wynik operacji "1" + "2" jest teraz liczbą całkowitą, a nie liczbą zmiennoprzecinkową;
w funkcji alokacji pamięci dopuszczalne jest wystąpienie błędu przy zmniejszaniu bloku pamięci;
nowy symbol formatowania w funkcji string.format — %p (dla wskaźników);
biblioteka utf8 akceptuje kody znaków aż do 2³¹ (przy wskazaniu specjalnego flagu, bez niego dopuszczalne są tylko kody do 0x10FFFF i nie są akceptowane surrogaty);
stałe całkowite, które wychodzą poza zakres wartości, są konwertowane na liczby zmiennoprzecinkowe (wcześniej występowało przycinanie bitowe);
metametoda __lt nie jest już używana do emulacji metametody __le; w razie potrzeby metametoda __le powinna być określona wyraźnie;
etykieta dla operatora goto nie może być utworzona, jeśli w bieżącym zasięgu już istnieje etykieta o tej samej nazwie (nawet jeśli została określona w zasięgu zewnętrznym);
metametoda __gc nie musi być jedynie funkcją. Jeśli próba wywołania metody się nie powiedzie, zostanie wyświetlone ostrzeżenie;
funkcja print nie wywołuje tostring dla każdego argumentu, lecz wykorzystuje swoje wewnętrzne konwersje;
funkcja io.lines zwraca zestaw czterech wartości zamiast jednej; aby emulować stare zachowanie, otocz wywołanie w nawiasy, jeśli podstawiasz je jako parametr podczas wywoływania innej funkcji.
Źródło: linux.org.ru
