Релиз языка программирования Lua 5.4

После пяти лет разработки доступен релиз Lua 5.4, быстрого и компактного скриптового языка программирования, получившего большое распространение в качестве встраиваемого (например, для определения конфигурации или для написания расширений). Код интерпретатора Lua написан на языке Си и распространяется под лицензией MIT.

Lua комбинирует простой процедурный синтаксис с мощными возможностями описания данных через использование ассоциативных массивов и расширяемой семантики языка. В Lua используется динамическая типизация, языковые конструкции преобразуются в байт-код, выполняющийся поверх регистровой виртуальной машины с автоматическим сборщиком мусора. Сам интерпретатор оформлен в виде библиотеки, легко интегрируемой в проекты на языках Си и Си++.

Основные новшества:

  • Реализован новый режим работы сборщика мусора — «generational», который дополнил собой ранее доступный инкрементальный режим сборки мусора. Новый режим подразумевает более частый запуск сокращённого обхода, охватывающего только недавно созданные объекты. Полный обход всех объектов выполняется только, если после сокращённого обхода не удалось добиться желаемых показателей потребления памяти. Подобный подход позволяет достигнуть более высокой производительности и уменьшить потребление памяти в ситуации хранения большого числа объектов, живущих короткое время.
  • Добавлена возможность определения постоянных переменных, определяемых с атрибутом «const». Подобные переменные могут быть назначены только один раз и после инициализации уже не могут быть изменены.
  • Добавлена поддержка переменных «to-be-closed», которые назначаются при помощи атрибута «close» и напоминают постоянные локальные переменные (с атрибутом const), отличаясь от них тем, что значение закрывается (вызывается метод »__close») при любом выходе из области видимости, например, после нормального завершения блока, перехода при помощи break/goto/return или выхода при возникновении ошибки.
  • Тип «userdata», предоставляющий возможность хранения в Lua-переменных любых Си-данных (представляет блок данных в памяти или содержит Си-указатель), теперь может содержать несколько значений (иметь несколько метадаблиц).
  • Представлена новая реализация функции для генерации псевдослучайных чисел — math.random.
  • Добавлена система предупреждений, которые определяются при помощи выражения warn и в отличие от ошибок, не влияют на дальнейшее выполнение программы.
  • Добавлена отладочная информация об аргументах функций и значениях, возвращаемых в операторе «return».
  • Предложена новая семантика для перебора целых чисел в циклах «for». Расчёт числа итераций производится до начала цикла, что позволяет избежать переполнения переменной и зацикливания. Если начальное значение больше ограничивающего, то выводится ошибка).
  • В функцию 'string.gmatch' добавлен новый необязательный аргумент 'init', определяющий с какой позиции начать поиск (по умолчанию с 1 символа).
  • Добавлены новые функции 'lua_resetthread' (сбрасывает поток, очищает весь стек вызовов и закрывает все «to-be-closed» переменные) и 'coroutine.close' (закрывает сопрограмму и все связанные «to-be-closed» переменные).
  • Функции преобразования строк в числа перемещены в библиотеку «string».
  • Вызов функции выделения памяти теперь может завершиться неудачей в случае сокращения размера блока памяти.
  • В функцию 'string.format' добавлена поддержка нового спецификатора формата '%p' (указатель, возвращаемый lua_topointer).
  • В библиотеке utf8 обеспечена поддержка кодов символов с номерами до 2^31.



Источник: http://www.opennet.ru/opennews/art.shtml? num=53259

© OpenNet