Lua — маленький скриптовый язык программирования, который встраивают внутрь других программ. На нём пишут скрипты в Roblox, настраивают редактор Neovim, расширяют Redis и nginx, делают игры на движках Defold и LÖVE. Язык создали в 1993 году в Католическом университете Рио-де-Жанейро, название по-португальски значит «луна».
Актуальная версия Lua 5.5.1 вышла 3 августа 2026 года (история версий на официальном сайте; из России он иногда открывается только со второй попытки). Ниже разберём, чем Lua отличается от Python, где он нужен на практике, как его поставить и как выглядит код. Если вы только выбираете первый язык, сначала загляните в нашу статью о том, как учить языки программирования самостоятельно.
Что за язык Lua и чем он отличается от Python

Авторы называют Lua «встраиваемым скриптовым языком» (страница About официального сайта). Lua написан на C как библиотека, и своей «главной программы» у него нет: код на Lua работает внутри программы-хозяина, которая его вызывает и даёт ему свои функции (справочное руководство Lua 5.5). Стандартная библиотека у Lua небольшая: строки, таблицы, математика, файлы. Зато сам язык легко подключить к игре, базе данных или веб-серверу.
Архив с исходниками Lua 5.5.1 вместе с документацией весит около 390 КБ в сжатом виде. Поэтому Lua так охотно вшивают в игры и устройства.
| Что сравниваем | Lua | Python |
|---|---|---|
| Как используют чаще всего | Внутри другой программы: игры, редактора, сервера | Самостоятельно: скрипты, бэкенд, анализ данных |
| Структуры данных | Только таблица: она и массив, и словарь, и объект | Списки, словари, множества, кортежи |
| Нумерация элементов | С 1 | С 0 |
| Блоки кода | then … end, do … end |
Отступы |
| Не равно | ~= |
!= |
| Склейка строк | .. |
+ |
| Типизация | Динамическая | Динамическая |
Синтаксис у Lua проще, чем у Python: ключевых слов меньше, а единственная структура данных снимает вопрос «список или словарь». Если хочется сначала разобраться в самих понятиях переменной, цикла и функции, у нас есть восемь основ программирования с примерами кода.
Где используется Lua
Lua редко пишут «с нуля в пустом файле». Почти всегда язык работает внутри какой-то среды, и от неё зависит, какая версия Lua вам достанется.
| Где | Что делают на Lua | Какой Lua внутри |
|---|---|---|
| Roblox Studio | Логику игр: движение, очки, магазины, события | Luau, диалект на основе Lua 5.1 (документация Roblox) |
| Defold | Игровую логику 2D- и 3D-игр | LuaJIT, совместимый с Lua 5.1 (руководство Defold) |
| LÖVE | 2D-игры целиком | Фреймворк на Lua (love2d.org) |
| Neovim | Конфиг редактора init.lua и плагины |
Lua как основной язык настройки (Lua-guide Neovim) |
| Redis | Скрипты, которые выполняются прямо на сервере базы | Встроенный Lua 5.1 (Redis Lua API) |
| OpenResty (nginx) | Логику веб-сервера: маршрутизацию, проверки, кеш | LuaJIT (openresty.org) |
| Tarantool | Серверные приложения рядом с данными | LuaJIT (документация Tarantool) |
| Adobe Lightroom | Часть логики самой программы | Lua (официальный сайт Lua) |
Обратите внимание на правую колонку. Большая часть популярных сред до сих пор живёт на Lua 5.1 или его потомках, хотя официальный Lua ушёл до 5.5. Базовый синтаксис у них общий, а различия начинаются в деталях: целые числа, побитовые операции, объявления глобальных переменных.
Многие знакомятся с Lua через Roblox. Как собрать там первую игру, мы разобрали в инструкции «Как создать игру в Роблоксе», а про профессию в целом есть обзор «Кто такой разработчик игр».
Канал основателя Checkroi Вани Буявца3 800 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединитьсяКак установить Lua и запустить первый скрипт

Сам интерпретатор ставится за минуту. Официальный сайт раздаёт только исходники, готовые сборки делают пакетные менеджеры и сторонние проекты (страница Download).
- macOS:
brew install lua. В Homebrew сейчас лежит версия 5.5.1. - Ubuntu и Debian:
sudo apt install lua5.4. В репозитории Ubuntu 24.04 пакета 5.5 пока нет, для учёбы 5.4 хватает с запасом. - Windows: скачайте архив с проекта LuaBinaries (последняя сборка там 5.5.0), распакуйте и добавьте папку в переменную PATH.
- Без установки: на странице demo официального сайта собраны онлайн-компиляторы, где код можно запустить прямо в браузере.
Проверить, что всё работает, проще всего файлом из двух строк. Создайте hello.lua:
print("Привет, Lua!")
print(_VERSION)
И запустите его в терминале командой lua hello.lua:
Привет, Lua!
Lua 5.5
Код можно писать в любом редакторе. В VS Code достаточно поставить расширение с поддержкой Lua: появятся подсветка и подсказки. Принцип тот же, что в нашей инструкции про создание и запуск файла в VS Code, только расширение другое.
Синтаксис Lua на примерах
Все примеры ниже мы запускали в Lua 5.5.1, вывод скопирован из терминала. В Roblox и Defold они тоже сработают, если не трогать функции, которых там нет (io.write, math.type).
Переменные и типы данных
Тип переменной Lua определяет сам по значению. Слово local делает переменную локальной, без него она станет глобальной (почему это плохо, расскажем в разделе с ошибками).
local name = "Аня"
local age = 27
local price = 1490.5
local isStudent = true
local nothing = nil
print(type(name), type(age), type(price), type(isStudent), type(nothing))
print(math.type(age), math.type(price))
print(name .. ", " .. age .. " лет")
string number number boolean nil
integer float
Аня, 27 лет
Основных типов восемь: nil, boolean, number, string, function, table, userdata и thread (справочное руководство Lua 5.5). Числа делятся на целые и дробные с версии 5.3, это видно по второй строке вывода.
Условия
local score = 72
if score >= 85 then
print("Отлично")
elseif score >= 60 then
print("Зачёт")
else
print("Пересдача")
end
print(score ~= 100)
Зачёт
true
Блок закрывается словом end, а elseif пишется слитно. «Не равно» в Lua выглядит как ~=.
Циклы
Циклов три вида: числовой for, while и repeat … until, который выполняется хотя бы один раз.
for i = 1, 3 do
print("Шаг " .. i)
end
for i = 10, 1, -4 do
io.write(i, " ")
end
print()
local n = 1
while n < 100 do
n = n * 3
end
print(n)
local tries = 0
repeat
tries = tries + 1
until tries == 3
print("Попыток: " .. tries)
Шаг 1
Шаг 2
Шаг 3
10 6 2
243
Попыток: 3
Третье число в for i = 10, 1, -4 задаёт шаг. Без него Lua считает шаг равным единице.
Досрочно выйти из любого цикла можно командой break, она работает так же, как в Python. Подробно про break и пропуск шага мы писали в статье про break в Python. Оператора continue в Lua нет, вместо него ставят goto continue с меткой ::continue:: в конце тела цикла.
Функции
Функция в Lua может вернуть сразу несколько значений. В Python для этого возвращают кортеж, здесь значения просто перечисляют через запятую.
local function minmax(list)
local min, max = list[1], list[1]
for _, v in ipairs(list) do
if v < min then min = v end
if v > max then max = v end
end
return min, max
end
local lo, hi = minmax({ 42, 7, 19, 88, 3 })
print(lo, hi)
3 88
Таблицы
Таблица в Lua единственная составная структура. Одна и та же конструкция работает как массив, как словарь и как объект с полями.
local langs = { "Lua", "Python", "Go" }
print(langs[1], langs[0], #langs)
table.insert(langs, "Rust")
for i, lang in ipairs(langs) do
print(i, lang)
end
local user = { name = "Ира", city = "Казань" }
user.age = 31
print(user.name, user["city"], user.age)
Lua nil 3
1 Lua
2 Python
3 Go
4 Rust
Ира Казань 31
Первый элемент лежит под индексом 1, а langs[0] возвращает nil без всякой ошибки. Оператор # даёт длину массива, ipairs перебирает элементы по порядку, pairs обходит все ключи словаря. Классы и наследование в Lua собирают из тех же таблиц и метатаблиц, сама идея та же, что в нашем разборе ООП простыми словами.
Мини-проект: считаем слова в тексте
Соберём всё вместе. Скрипт ниже считает, какие слова чаще всего встречаются в тексте, и печатает тройку лидеров.
local text = [[
Lua маленький язык. Lua быстрый язык.
Lua встраивают в игры и серверы.
]]
local counts = {}
for word in text:gmatch("[^%s%p]+") do
counts[word] = (counts[word] or 0) + 1
end
local list = {}
for word, n in pairs(counts) do
list[#list + 1] = { word = word, n = n }
end
table.sort(list, function(a, b)
if a.n ~= b.n then return a.n > b.n end
return a.word < b.word
end)
for i = 1, 3 do
print(list[i].word, list[i].n)
end
Lua 3
язык 2
быстрый 1
Здесь работают сразу три приёма: многострочная строка в [[ … ]], шаблон [^%s%p]+ (всё, что не пробел и не знак препинания) и сортировка таблицы своей функцией сравнения. Словарь напрямую не отсортировать: table.sort работает только с массивом, а порядок ключей при обходе через pairs не задан. Поэтому пары сначала складываем во временный список.
Частые ошибки новичков в Lua

Мы прогнали каждую ошибку в Lua 5.5.1, сообщения ниже взяты из терминала. По ним удобно искать, если вы увидели такое же у себя.
| Что пишут | Что получается | Как правильно |
|---|---|---|
total = salary + 5000 внутри функции |
Переменная total молча становится глобальной и видна во всей программе |
Писать local total = … |
if x != 4 then |
'then' expected near '!' |
if x ~= 4 then |
"Итого: " + 5 |
attempt to add a 'string' with a 'number' |
"Итого: " .. 5 |
list[0] для первого элемента |
nil без ошибки, баг всплывает позже |
Нумерация с list[1] |
user.adress.city с опечаткой в поле |
attempt to index a nil value (field 'adress') |
Проверить имя поля или написать user.adress and user.adress.city |
i = 4 внутри for i = 1, 5 |
attempt to assign to const variable 'i' (с версии 5.5) |
Завести отдельную переменную или перейти на while |
Первая ошибка самая коварная, потому что программа не падает. С версии 5.5 от неё можно защититься объявлением global: если в начале файла явно перечислить разрешённые глобальные имена, Lua откажется запускать код с необъявленной переменной.
global print
local function addBonus(salary)
total = salary + 5000
return total
end
lua: g55.lua:4: variable 'total' not declared
Ещё две ловушки связаны с кириллицей. Строки в Lua хранятся байтами, поэтому #"Луна" возвращает 8, а не 4, и правильную длину даёт utf8.len("Луна"). Функция string.lower переводит в нижний регистр только латиницу: ("Lua И Python"):lower() вернёт lua И python.
Решение: для русского текста считайте длину через
utf8.lenи не полагайтесь наlowerи классы вроде%aв шаблонах: в стандартной настройке они видят только латинские буквы.
Стоит ли учить Lua и с чего начать
Lua хорош как первый язык для тех, кто хочет делать игры, особенно в Roblox: результат виден сразу, синтаксис прощает многое. Единственным языком для карьеры мы бы Lua не делали: по таблице выше видно, что он почти всегда работает в паре с другим стеком (игровым движком, nginx, Redis), и работодатель ищет этот стек целиком.
Мы бы советовали такой маршрут:
- Хотите делать игры в Roblox. Учите Luau по официальной документации Roblox и сразу делайте маленькие механики в Studio.
- Хотите свои 2D-игры. Берите Defold или LÖVE, у Defold есть руководство по Lua на русском.
- Хотите разобраться в языке глубоко. Читайте книгу главного архитектора языка Роберто Иерусалимски Programming in Lua: первое издание лежит на официальном сайте бесплатно и, по словам сайта, во многом актуально для поздних версий.
- Хотите работать в геймдеве. Lua пригодится, но основой станут C# или C++. Тут поможет наш план «Как попасть в геймдев без опыта».
Если язык понравится и захочется понять, как он устроен изнутри, следующим шагом станет C, на котором Lua написан. Чем такой разработчик отличается от программиста C++, мы рассказали в статье «Кто такой разработчик на Си».
Где освоить Lua системно
Базовый синтаксис Lua можно выучить за пару вечеров по примерам выше. Писать игры и скрипты так, чтобы они не разваливались на сотом объекте, проще с наставником, который проверяет код. Программы разных школ собраны на странице курсов по Lua, а ниже пять из них с ценами и отзывами. Если цель именно Roblox, загляните в подборку курсов по Roblox Studio.
| Курс | Школа | Стоимость со скидкой | В рассрочку | Длительность | Обзор курса от Checkroi |
|---|---|---|---|---|---|
| ДО Разработчик игр на Lua Перейти на сайт курса | 74 400 ₽ | - | 8 месяцев | Обзор курса | |
| Программирование на Lua в Minecraft Перейти на сайт курса | 9200 ₽ | - | 3 месяца | Обзор курса | |
| Создание игр в Roblox. Программирование Lua | 28 800 ₽ | - | 9 месяцев | Обзор курса | |
| Базы данных для разработчиков Перейти на сайт курса | 24 908 ₽ | 4151 ₽/мес. | 4 месяца | Обзор курса | |
| Программирование и дизайн в Roblox Перейти на сайт курса | 69 086 ₽ | - | 1 месяц | Обзор курса |
Больше программ — в полном каталоге курсов по Lua




