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;

  • во вспомогательных буферах обеспечено повторное использование буферов (без копирования в новый буфер) при создании финальной строки.