После двух лет разработки, 29 июня тихо и незаметно вышла новая версия языка программирования Lua — 5.4.
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возвращает набор из четырёх значений вместо одного, для эмуляции старого поведения заключайте вызов в скобки, если подставляете его как параметр при вызове другой функции.
>>> Подробности









