Lua — это не просто язык, это инструмент для передачи управления пользователю

public

Автор: Антон Солдатов · Podlodka Podcast


Антон Солдатов работал в IPONWEB — высоконагруженном ad-tech — и участвовал в разработке внутреннего форка LuaJIT. Это человек, который использовал Lua не в хобби-проектах, а в production-системах под серьёзной нагрузкой.

Lua занимает странное место в списке языков: его редко выбирают для нового проекта «с нуля», но он встроен буквально везде — в Nginx (OpenResty), Redis, Neovim, World of Warcraft, Roblox. Причина одна: Lua проектировался как язык для встраивания в хост-приложение, а не как самостоятельный рантайм. Он крошечный (библиотека меньше 300 KB), быстрый в встраивании, и позволяет дать пользователю возможность расширять систему без доступа к её исходникам. Антон объясняет, почему именно Lua, а не Python или JS, стал де-факто стандартом для этой задачи — и почему альтернативы проигрывают в этой конкретной нише.

Кому смотреть: разработчикам, которые строят платформы или приложения с пользовательской расширяемостью — плагины, скрипты, пользовательские правила обработки.

Из этого можно взять в работу: если ты строишь систему, которую пользователи должны кастомизировать, посмотри на Lua как на язык плагинов. Он добавляет расширяемость без того, чтобы отдавать пользователю весь рантайм.

Главная тема выпуска — не синтаксис Lua, а его ниша. Lua сравнивается с Python, C++ и JavaScript по нескольким осям: скорость встраивания, размер рантайма, изоляция, лицензия. По каждому из этих параметров у Lua есть конкурентное преимущество именно для сценария «я хочу дать пользователю скрипт».

LuaJIT — отдельная история. Это JIT-компилятор для Lua, который в некоторых бенчмарках обгоняет Python в десятки раз и вплотную приближается к C. Антон работал с форком LuaJIT в IPONWEB, где Lua использовался как язык правил ставок в real-time bidding — системе, где латентность в несколько миллисекунд критична. Это не учебный пример, это production-кейс, где язык выбирался под жёсткие требования.

Один из важных углов разговора — почему Lua не стал более популярным как основной язык. Ответ: он никогда и не проектировался для этого. У него нет стандартной библиотеки в привычном смысле, нет большой экосистемы пакетов — потому что хост-приложение само предоставляет всё нужное. Это сознательный дизайн-выбор, а не недостаток.

Отдельно обсуждается LPeg — библиотека парсинга на Lua, которая меняет взгляд на то, что языки скриптования могут делать с текстом. Если ты думал, что Lua — это только for/while и простые операции над таблицами, выпуск существенно расширит эту картину.