Открыть сервис

Язык программирования Lua

Lua — интерпретируемый скриптовый язык программирования общего назначения, разработанный в 1993 году в Папском католическом университете Рио-де-Жанейро (Бразилия). Название происходит от португальского слова, означающего «луна». Язык отличается компактным ядром, высокой скоростью интерпретации и лёгкостью встраивания в приложения, написанные на C и C++. Благодаря этим свойствам Lua получил широкое распространение как язык встраиваемых сценариев, особенно в игровой индустрии.

История

Lua создали Роберту Иерузалимски, Луис Энрике де Фигейреду и Валдемар Селлес в рамках проекта Tecgraf. Изначально язык задумывался как средство конфигурирования и расширения прикладных программ на C. Первая версия вышла в 1993 году; версия 1.0 — в 1994-м. Начиная с версии 5.0 (2003) язык использует регистровую виртуальную машину, что заметно повысило производительность. Современные ветки — 5.1, 5.2, 5.3 (с поддержкой целочисленного типа) и 5.4. Язык распространяется под лицензией MIT.

Характеристики

Lua сочетает простой синтаксис с несколькими мощными механизмами:

  • Динамическая типизация. Переменные не требуют объявления типа; значения типов nil, boolean, number, string, function, table, userdata и thread.
  • Таблицы как универсальная структура. Единственный составной тип данных — таблица (table) — реализует одновременно массивы, словари, множества и объекты.
  • Функции как значения. Поддерживаются замыкания, функции высшего порядка, анонимные функции.
  • Метатаблицы и метаметоды. Позволяют переопределять поведение операций, реализовывать объектно-ориентированное программирование и перегрузку.
  • Автоматическое управление памятью. Сборщик мусора с инкрементальным режимом работы.
  • Компиляция в байт-код. Исходный код транслируется во внутренний байт-код, исполняемый виртуальной машиной.

Ядро языка занимает порядка 20–30 тысяч строк кода на C, что делает его одним из самых компактных среди распространённых языков.

Применение

Основная сфера Lua — встраивание в качестве скриптового слоя:

  • Компьютерные игры. Скрипты поведения, интерфейсы, конфигурации. Язык используется в движках и проектах, включая World of Warcraft, Roblox, Garry's Mod, а также в движках CryEngine и Corona SDK.
  • Веб-серверы. Модуль ngx_lua для nginx и платформа OpenResty позволяют писать серверную логику на Lua.
  • Встраиваемые системы и сеть. Применяется в маршрутизаторах, системах телекоммуникационного оборудования, например в продуктах Cisco.
  • Прикладные программы. Расширения для редакторов, САПР, мультимедийных пакетов (например, Adobe Lightroom, VLC).
  • Научные расчёты. Используется как язык конфигурирования в ряде вычислительных пакетов.

Экосистема

Стандартная библиотека Lua намеренно минимальна и покрывает работу со строками, таблицами, математикой, вводом-выводом и операционной системой. Расширения реализуются через внешние библиотеки, часто написанные на C. Для управления зависимостями служат менеджеры пакетов LuaRocks. Существуют реализации Lua на других платформах: LuaJIT (JIT-компилятор с высокой производительностью), а также порты для Java, .NET и JavaScript.

Критика и ограничения

К недостаткам относят отсутствие встроенной поддержки классов и наследования (реализуются вручную через метатаблицы), слабую стандартную библиотеку, ограниченную поддержку многопоточности (корутины вместо полноценных потоков) и неоднородность версий, из-за чего код для 5.1 может требовать доработки в 5.4. Тем не менее простота, скорость и малый размер обеспечивают языку устойчивую нишу в качестве встраиваемого инструмента.

IRONLIVE — база данных и аналитика по компаниям России.

На главную IRONLIVE →