Перейти к основному содержимому

История языка 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-2if / while / repeatuntil
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.