След като се разработва две години, новата версия на програмния език Lua — 5.4, тихо и незабележимо излезе на 29 юни.
Lua е прост интерпретируем език за програмиране, който лесно може да бъде интегриран в приложения. Благодарение на тези качества, Lua се използва широко като език за разширение или конфигурация на програми (по-специално компютърни игри). Lua се разпространява под MIT лиценз.
Предишната версия (5.3.5) излезе на 10 юли 2018 година.
Основните промени в новата версия
нов垃圾收集器 на база поколение (generational). В функцията collectgarbage параметрите setpause и setstepmul са обявени за остарели, вместо тях се препоръчва да се използва параметърът incremental;
нова функция за генериране на предупреждения warn с възможност за деактивиране на тяхното показване;
новата реализация на math.random използва алгоритъм xoshiro256** вместо предоставения от libc и инициализира генератора със случайно число;
константи (constant variables);
переменная «за затваряне» (to-be-closed) — локални константи, за които се изпълнява методът __close при изход от обхвата;
нова функция lua_resetthread — изчиства стека и затваря всички «за затваряне» променливи;
нова функция coroutine.close — затваря указаната подпрограма и всички нейни «за затваряне» променливи;
потребителски данни (userdata) могат да съдържат набор от стойности с достъп по индекс. За работа с тях са въведени нови функции: lua_newuserdatauv, lua_setiuservalue и lua_getiuservalue;
достъпна е отладъчна информация относно параметрите и връщаните стойности на функциите;
ако в цикъл for с целочислен индекс има преливане — цикълът се прекратява;
към функцията string.gmatch е добавен необязателен аргумент, задаващ отклонение от началото на низ за търсене на съвпадения;
функциите за неявно преобразуване на низове в числа са преместени в библиотеката за низове, променено е тяхното поведение. Например, резултатът от операцията "1" + "2" сега е цяло число, а не число с плаваща запетая;
в функциите за алокация на памет е възможно възникване на грешка при намаляване на блока памет;
нов символ за форматиране във функцията string.format — %p (за указатели);
библиотеката utf8 приема кодове на символи до 2³¹ (при посочване на специален флаг, без него се приемат само кодове до 0x10FFFF и не се допускат сурогати);
Целочисленните константи, излизащи извън пределите на стойностите, се преобразуват в плаващи числа (по-рано се извършваше битово отрязване);
Метаметодът __lt вече не се използва за емуляция на метаметод __le, при необходимост, метаметодът __le трябва да бъде зададен изрично;
Етикетът за оператора goto не може да бъде създаден, ако в текущата област на видимост вече съществува етикет с такова име (дори ако е бил дефиниран във външна област);
Метаметодът __gc може да не е само функция. Ако опитът за извикване на метода не успее, ще бъде изведено предупреждение;
Функцията print не извиква tostring за всеки аргумент, а използва своите вътрешни преобразования;
Функцията io.lines връща набор от четири стойности вместо една, за да емулира старото поведение, обгърнете повикването в скоби, ако го вмъквате като параметър при извикването на друга функция.
Източник: linux.org.ru
