hostprofi.ru
Подобрать хостинг
Термин

Lua

краткое определение

Lua — компактный (~250 КБ) встраиваемый язык для расширения приложений. В веб-инфраструктуре используется в OpenResty (Nginx + LuaJIT), Kong API Gateway и Cloudflare.

Lua — компактный встраиваемый язык программирования с интерпретатором размером около 250 КБ. Создавался как механизм расширения приложений. Ключевая особенность: таблица — единственная составная структура данных, заменяющая массивы, словари, объекты и модули.

Как работает Lua

Lua компилирует исходный код в байткод, который выполняется виртуальной машиной. LuaJIT (Just-In-Time компилятор) компилирует горячие участки в машинный код — один из самых быстрых динамических языков в бенчмарках. Lua легко встраивается в C/C++ приложения через простое API: приложение регистрирует функции, Lua их вызывает.

Применение в веб-инфраструктуре

Главное применение — OpenResty: Nginx с встроенным LuaJIT. OpenResty позволяет писать логику обработки запросов прямо в конфигурации Nginx:

-- Проверка JWT в Nginx до передачи на бэкенд
access_by_lua_block {
    local jwt = require "resty.jwt"
    local token = ngx.req.get_headers()["Authorization"]
    local verified = jwt:verify("secret_key", token)
    if not verified["verified"] then
        ngx.status = 401
        ngx.exit(ngx.HTTP_UNAUTHORIZED)
    end
}

Cloudflare использует Lua/OpenResty на своей инфраструктуре для обработки триллионов HTTP-запросов. Kong API Gateway — популярное решение на OpenResty/Lua для управления API.

Применение в играх

Lua — стандартный язык скриптинга в игровой индустрии: World of Warcraft (система аддонов), Roblox (игровые скрипты), VLC Media Player (плагины), Wireshark (диссекторы протоколов), Neovim (конфигурация с Lua 5.1+).

История

Lua создан Роберто Иерусалимски (Roberto Ierusalimschy), Луисом Энрике де Фигейредо (Luiz Henrique de Figueiredo) и Вальдемаром Железнику (Waldemar Celes) в Pontifical Catholic University of Rio de Janeiro (PUC-Rio) в 1993 году. Lua 5.1 (2006) — наиболее распространённая версия: LuaJIT совместим именно с ней. Lua 5.4 (2020) — текущая версия с generational GC и to-be-closed переменными.

Lua в хостинге

OpenResty доступен как пакет или через Docker: openresty/openresty. На VPS OpenResty устанавливается рядом с обычным Nginx или вместо него — конфигурация Nginx-совместима. Reverse proxy на OpenResty с Lua-валидацией JWT позволяет авторизовывать запросы без изменения кода бэкенд-приложения.

Lua как язык конфигурации

Neovim использует Lua как основной язык конфигурации с версии 0.5 (2021). Конфиг в ~/.config/nvim/init.lua позволяет писать полноценную программную логику вместо Vimscript. Redis поддерживает Lua-скрипты через EVAL: скрипт выполняется атомарно на сервере Redis.

# Атомарная операция через Lua в Redis
EVAL "
  local current = redis.call('GET', KEYS[1])
  if tonumber(current) > tonumber(ARGV[1]) then
    return redis.call('DECRBY', KEYS[1], ARGV[1])
  end
  return -1
" 1 counter 10

Особенности языка

Lua индексирует массивы с 1, а не с 0. Таблица {1, 2, 3} имеет индексы 1, 2, 3. Это часто путает разработчиков, привыкших к C-подобным языкам. Нет классов — ООП реализуется через метатаблицы и __index. Строки неизменяемы — конкатенация создаёт новую строку. Для эффективной работы со строками используют table.concat.

Производительность

LuaJIT в бенчмарках часто обгоняет Python 3 в 10–50 раз на вычислительных задачах и сравним с Java. Для Nginx/OpenResty это означает возможность обрабатывать логику авторизации, rate limiting и трансформации запросов прямо в прокси без дополнительных сетевых вызовов. Overhead минимален — LuaJIT инициализируется за микросекунды.

Другие термины