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

මූලාශ්රය: linux.org.ru

අදහස් එක් කරන්න