Доступен язык программирования Lua 5.5
После пяти лет разработки доступен релиз Lua 5.5, быстрого и компактного скриптового языка программирования, получившего большое распространение в качестве встраиваемого языка для определения конфигурации и для написания расширений. Код интерпретатора Lua написан на языке Си и распространяется под лицензией MIT.
Lua сочетает простой процедурный синтаксис с возможностями описания данных через использование ассоциативных массивов и расширяемой семантики языка. В Lua используется динамическая типизация, а языковые конструкции преобразуются в байт-код, выполняющийся поверх регистровой виртуальной машины с автоматическим сборщиком мусора. Интерпретатор оформлен в виде библиотеки, интегрируемой в проекты на языках Си и Си++.
Основные новшества:
Для большей части операций сборки мусора задействован инкрементальный режим, при котором цикл сборки мусора разбивается на отдельные шаги, чередующиеся с выполнением программы, что позволяет избавиться от длительных приостановок выполнения приложений с большим числом объектов в памяти.
Предложена компактная реализация массивов, требующая на 60% меньше памяти для массивов с однотипными данными (по сравнению с прошлой реализацией данные о типе сохраняются не для каждого элемента, а для группы элементов).
Добавлена возможность явного объявления глобальных переменных в любых блоках кода при помощи ключевого слова «global». При указании в блоке кода выражений с ключевым словом «global», все переменные обязательно должны объявляется явно. Если объявление «global» отсутствует, то неявно выставляется выражение «global *» при котором сохраняется старое поведение и все переменные трактуются, как глобальные. Также добавлено выражение «global‹const› *» при котором все неявно определённые глобальные переменные становятся доступны в режиме только для чтения.
X = 1 -- Ok, X - глобальная переменная, старое поведение по умолчанию. do global Y -- объявление переменой Y как глобальной, все остальные переменные в блоке должны объявляться явно Y = 1 -- Ok, переменная Y ранее определена X = 1 -- Ошибка, переменная X не определена end X = 2 -- Ok, вне блока global с действует старое поведениеУказываемые в циклах «for» управляющие переменные теперь доступны только для чтения и не могут быть изменены в теле цикла. Например, переменная i, объявленная в цикле «for i = 1, 5 do», не может быть изменена в теле цикла.
При выводе чисел с плавающей запятой через функцию print теперь выводится достаточное число цифр для корректного обратного преобразования из строки в исходное представление.
Увеличено допустимое число уровней вложенности конструкторов таблиц.
Добавлена функция table.create (nseq, nrec) для добавления пустой таблицы и предварительного выделения памяти для указанного числа элементов.
В функции utf8.offset обеспечен возврат не только байтового смещения до начала символа, но и позиции конца символа.
Добавлена поддержка создания внешних строк, размещаемых в памяти, не управляемой сборщиком мусора Lua.
Добавлена функция luaL_openselectedlibs для загрузки выбранной библиотеки, а также функция luaL_makeseed, формирующая затравку для рандомизации хеш-таблиц.
В lua.c обеспечена динамическая загрузка библиотеки 'readline' при её наличии (если библиотека есть в системе — она загружается и становятся доступны функции редактирования строк).
Включена оптимизация для экономии памяти при загрузке предварительно скомпилированного бинарного кода — Lua теперь может повторно использовать память в некоторых внутренних структурах без создания дубликатов при загрузке дублирующегося бинарного кода.
Обеспечено повторное использование всех строк в операциях «dump» и «undump».
Во вспомогательных буферах обеспечено повторное использование буферов (без копирования в новый буфер) при создании финальной строки.
Источник: http://www.opennet.ru/opennews/art.shtml? num=64476
OpenNet прочитано 1095 раз
