
22 декаб��я 2025 года состоялся стабильный выпуск языка программирования Lua 5.5. Предыдущая стабильная сборка проекта вышла в январе 2020 года. Это решение представляет собой быстрый и компактный скриптовый язык программирования, получивший большое распространение в качестве встраиваемого языка для определения конфигурации и для написания расширений. Код интерпретатора Lua написан на языке C и опубликован на GitHub под лицензией MIT.
В Lua сочетается простой процедурный синтаксис с возможностями описания данных через использование ассоциативных массивов и расширяемой семантики языка. В проекте Lua используется динамическая типизация, а языковые конструкции преобразуются в байт-код, выполняющийся поверх регистровой виртуальной машины с автоматическим сборщиком мусора. Интерпретатор оформлен в виде библиотеки, интегрируемой в проекты на языках C и C++.
По информации OpenNET, основные изменения и доработки в Lua 5.5:
в режиме «generational» полный цикл сборки мусора (major collection), перебирающий все объекты, переведён на использование инкрементальной обработки, при которой сборка мусора разбивается на отдельные шаги, чередующиеся с выполнением программы, что позволяет избавиться от длительных приостановок выполнения приложений с большим числом объектов в памяти;
предложена компактная реализация массивов, требующая на 60% меньше памяти для массивов с однотипными данными (экономия достигается благодаря тому, что данные о типе сохраняются не для каждого элемента, а для группы элементов);
добавлена возможность явного объявления глобальных переменных в любых блоках кода при помощи ключевого слова global. При указании в блоке кода выражений с ключевым словом global все переменные обязательно должны объявляется явно. Если объявление global отсутствует, то неявно выставляется выражение global, при котором сохра��яется старое поведение и все переменные трактуются как глобальные. Также добавлено выражение global<const>, при котором все неявно определённые глобальные переменные становятся доступны в режиме только для чтения;
указываемые в циклах «for» управляющие переменные теперь доступны только для чтения и не могут быть изменены в теле цикла. Например, переменная i, объявленная в цикле «for i = 1, 5 do», не может быть изменена в теле цикла;
при выводе чисел с плавающей запятой через функцию print теперь выводится достаточное число цифр для корректного обратного преобразования из строки в исходное представление;
увеличено допустимое число уровней вложенности конструкторов таблиц;
добавлена функция table.create(nseq, nrec) для добавления пустой таблицы и предварительного выделения памяти для указанного числа элементов;
в функции utf8.offset обеспечен возврат не только байтового смещения до начала символа, но и позиции конца символа;
добавлена поддержка создания внешних строк, размещаемых в памяти, не управляемой сборщиком мусора Lua;
добавлена функция luaL_openselectedlibs для загрузки выбранной библиотеки, а также функция luaL_makeseed, формирующая seed‑затравку для функции lua_newstate;
в lua.c обеспечена динамическая загрузка библиотеки 'readline' при её наличии (если библиотека есть в системе — она загружается и становятся доступны функции редактирования строк);
включена оптимизация для экономии памяти при загрузке предварительно скомпилированного байткода — Lua теперь может повторно использовать память в некоторых внутренних структурах без создания дубликатов при загрузке дублирующегося байткода;
обеспечено повторное использование всех строк в операциях dump и undump;
во вспомогательных буферах обеспечено повторное использование буферов (без копирования в новый буфер) при создании финальной строки.
