Выпущена версия Lua 5.5 с инкрементальной сборкой мусора и компактными массивами

Lua, легковесный высокоуровневый язык сценариев, предназначенный для встраивания в другие приложения, только что выпустил версию 5.5.
Одним из ключевых дополнений является явное объявление глобальных переменных, которое позволяет разработчикам более чётко определять глобальные переменные и избегать распространённых ошибок, связанных с неявным объявлением глобальных переменных. Кроме того, переменные в циклах for теперь доступны только для чтения, что снижает вероятность непреднамеренных побочных эффектов в циклических конструкциях.
В Lua 5.5 значительно оптимизировано использование памяти для массивов. По словам разработчиков, реализация более компактных массивов позволяет сократить объём памяти, занимаемый большими таблицами, примерно на 60 %, что повышает производительность приложений, работающих с большими объёмами данных.
Сбор мусора также был улучшен. Внедрение нового режима сборки мусора по поколениям повышает производительность за счёт разделения недолговечных и долгоживущих объектов. Кроме того, основные циклы сборки мусора теперь выполняются постепенно, что сокращает время простоя и повышает скорость отклика в долго работающих приложениях.
Кроме того, значения с плавающей запятой теперь выводятся с достаточным количеством десятичных знаков, чтобы их можно было правильно считать. В релиз также вошли обновления для работы со строками и UTF-8, например расширенная функция utf8.offset, которая возвращает последнюю позицию символов, и поддержка внешних строк, использующих память, не управляемую собственным распределителем Lua.
Было добавлено несколько новых служебных функций, в том числе luaL_openselectedlibs и luaL_makeseed, которые расширяют возможности загрузки библиотек и рандомизации. Кроме того, интерпретатор Lua (lua.c) теперь динамически загружает поддержку readline, если она доступна, что расширяет возможности интерактивного использования.
Статические двоичные файлы также претерпели улучшения: при загрузке двоичных фрагментов в память Lua может повторно использовать исходную память в определённых внутренних структурах. Операции дампа и антидампа теперь повторно используют все строки, а вспомогательный буфер повторно использует свою память при создании окончательных строк, что сокращает количество выделений.
Дополнительную информацию обо всех изменениях в Lua 5.5 можно найти по этой ссылке.
Редактор: AndreyEx