История языка Lua
Play ITЗагрузка интерактивного демо…
История языка Lua
История Lua
В начале 1990-х годов группа исследователей из Tecgraf (научно-техническая лаборатория факультета информатики Католического университета Рио-де-Жанейро, PUC-Rio) работала над проектами для Petrobras — крупнейшей бразильской нефтегазовой компании. Их задача заключалась в разработке программного обеспечения для проектирования и моделирования нефтяных месторождений, скважин и трубопроводов.
Эти приложения были мощными, но крайне жёсткими: любое изменение в поведении — например, добавление нового правила расчёта давления или настройка интерфейса — требовало перекомпиляции всей системы. Это замедляло разработку, увеличивало стоимость и делало невозможным адаптацию ПО под нужды конкретного заказчика.
Группе, возглавляемой Роберто Иерусалимским (Roberto Ierusalimschy), стало очевидно: нужно что-то, что позволит пользователям настраивать логику приложения без доступа к исходному коду. Они пробовали использовать существующие языки — Tcl, Python, даже собственные конфигурационные форматы, — но всё было либо слишком тяжёлым, либо плохо встраивалось, либо требовало лицензий. Тогда они приняли решение: создать свой язык.
В 1993 году команда — Роберту Иерузалимски (Roberto Ierusalimschy), Луиш Энрике ди Фигейреду (Luiz Henrique de Figueiredo) и Вальдемар Селиш (Waldemar Celes) — представила первый релиз Lua 1.0. Имя lua ("луна") контрастирует с предшественником SOL (sol — "солнце"): оба языка создавались в Tecgraf для настраиваемых графических приложений Petrobras.
Lua — один из немногих языков программирования, разработанных в развивающейся стране и получивших мировое признание (в том числе приглашение на конференцию истории языков HOPL).
Предшественники SOL и DEL
До Lua в Tecgraf (1992–1993) независимо появились два языка конфигурации и описания данных:
| Язык | Назначение |
|---|---|
| SOL (Simple Object Language) | гибкость в одном интерактивном CAD-проекте Petrobras |
| DEL (Data-Entry Language) | то же для второго проекта |
В SOL и DEL не было полноценных управляющих конструкций — только данные и простые правила. Заказчику понадобилось добавить программирование без пересборки всего приложения.
Кандидатом на роль встраиваемого языка рассматривали Tcl, но его синтаксис был непривычным, слабо поддерживались структуры данных, а на целевых платформах Petrobras Tcl часто отсутствовал. Lisp и Scheme отвергли из‑за "неудобного" для инженеров синтаксиса. Python в 1993 году ещё только набирал обороты. В итоге группа написала свой язык — простой для непрограммистов, легко портируемый, поставляемый библиотекой с API на C — по образцу SOL.
Заимствования в дизайне
| Источник | Что попало в Lua |
|---|---|
| Modula-2 | if / while / repeat–until |
| CLU | параллельное присваивание, несколько возвращаемых значений функции |
| C++ | local только там, где переменная нужна |
| Snobol, AWK | ассоциативные массивы → таблицы |
| Lisp, Scheme | идея единой универсальной структуры (список → таблица) |
Управляющие конструкции в Lua 1.0 частично повторяли синтаксис SOL в конструкторах объектов; позже язык упростили до современного "лёгкого" стиля.
Цели и философия
Lua никогда не стремился быть универсальным языком. Он не пытается решать все задачи сразу — ни заменить Python, ни конкурировать с Java.
Его цель — одна: быть идеальным скриптовым языком для расширения приложений.
Эта философия выражена в самом дизайне:
- Нет встроенных библиотек для сетей, GUI или баз данных — всё это остаётся за пределами ядра.
- Нет классов — но есть таблицы и метатаблицы, позволяющие самому реализовать ООП.
- Нет строгой типизации — но есть гибкость и скорость прототипирования.
С самого начала Lua распространялся свободно. Версии до 5.0 шли под лицензией, близкой к BSD; с Lua 5.0 (2003) — под MIT. Обе разрешительные и практически эквивалентны для коммерческого встраивания.
Ни одна корпорация не "владеет" языком — развитие ведёт группа PUC-Rio, сообщество дополняет документацию и библиотеки (LuaRocks, LuaJIT и др.).
Эволюция
Lua эволюционировал медленно:
- Lua 5.0 (2003) — введение метатаблиц, улучшенная система модулей, goto.
- Lua 5.1 (2006) — стабильная, самая распространённая версия. Используется в World of Warcraft, Nginx, многих движках.
- Lua 5.2 (2011) —
gotoи метки::label::,_ENV, библиотекаbit32. - Lua 5.3 (2015) — целые числа и побитовые операторы в ядре, библиотека
utf8. - Lua 5.4 (2020) — инкрементальный и generational GC,
<const>,<toclose>/__close,__gcдля таблиц.
Каждое обновление сохраняло обратную совместимость, что критично для embedded-систем, где обновление может быть невозможно.
Первым крупным внедрением в играх стала LucasArts: после статьи в Dr. Dobb's Journal (1996) команда Grim Fandango (1997) заменила внутренний SCUMM на Lua и создала движок GrimE, позже использованный в Escape from Monkey Island.
К 2010-м годам Lua стал популярным в игровой индустрии, особенно после успеха World of Warcraft, где весь пользовательский интерфейс управлялся Lua-скриптами. В этой популярной MMORPG видеоигре, использовались специальные "аддоны", модификации интерфейса, упрощающие жизнь игроку. Но настоящий скачок произошёл с ростом платформы Roblox — виртуального мира, где миллионы пользователей создают свои игры. Roblox выбрал Lua как основу для скриптования игровой логики, но столкнулся с ограничениями - динамическая типизация, отсутствие строгой проверки типов и медленная разработка больших проектов.
В ответ на это, инженеры Roblox разработали Luau — диалект Lua, совместимый с Lua 5.1, но с важными улучшениями - статическая типизация, type inference, nullable-типы, обобщения, улучшенный анализ кода и оптимизированную производительность.
Сегодня Luau — один из самых массовых языков программирования в мире, ведь десятки миллионов детей и подростков учатся программировать на нём в Roblox Studio.
В подборках
Статья входит в тематические подборки и блок "С чего начать?" на главной. Соседние шаги того же маршрута:
История — История языка Swift, История языка COBOL, История языка Rust, История языка Fortran, История языка Groovy, История языка Lisp.