След като се разработва две години, новата версия на програмния език 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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster