Существует новый выпуск скриптового языка Lua, через пять лет после предыдущего обновления. Версия 5.4 приносит улучшенную сборку мусора, поддержку закрытых переменных и новую реализацию math.random.
Lua-это язык сценариев, популярный для встраивания в игры и в промышленные приложения, такие как робототехника, обработка изображений, текстовые редакторы и веб-разработка. Он был создан в Бразилии и был разработан, чтобы быть простым, небольшим, портативным, быстрым и легко встроенным в приложения.
Язык поддерживает функции как объекты первого класса, закрытие и расширяемую семантику. Это также не язык, основанный на классах. В целом он больше всего напоминает JavaScript из всех популярных в настоящее время языков.
Первым улучшением в новом выпуске является новый режим поколения для сбора мусора. Это означает, что коллекционер часто создает второстепенные коллекции, в которых он просматривает только те объекты, которые были недавно созданы. Если после незначительной коллекции использование памяти все еще превышает лимит, сборщик выполняет остановку основной коллекции, которая пересекает все объекты.
Еще одним улучшением является поддержка переменных, подлежащих закрытию. Они ведут себя как постоянные локальные переменные, но их значение закрывается всякий раз, когда переменная выходит за пределы области действия, в том числе при обычном завершении блока, выходе из блока с помощью break/goto/return или выходе из-за ошибки.
Существует также новая реализация для math.random. В предыдущей версии math.random была основана на стандартной функции C rand, которая имеет тот недостаток, что она дает разные результаты в Windows и Linux. В новом выпуске функция math.random основана на алгоритме xoshiro256** , который производит псевдослучайные 64-битные целые числа.
Другие улучшения включают поддержку переменных const и возможность для userdata иметь несколько пользовательских значений. Появилась новая система предупреждений, и вы можете получить отладочную информацию об аргументах и возвратах функций. Ряд других незначительных улучшений можно найти в документации readme.