История языка Lua
История языка Lua
История Lua
В начале 1990-х годов группа исследователей из Tecgraf (научно-техническая лаборатория факультета информатики Католического университета Рио-де-Жанейро, PUC-Rio) работала над проектами для Petrobras — крупнейшей бразильской нефтегазовой компании. Их задача заключалась в разработке программного обеспечения для проектирования и моделирования нефтяных месторождений, скважин и трубопроводов.
Эти приложения были мощными, но крайне жёсткими: любое изменение в поведении — например, добавление нового правила расчёта давления или настройка интерфейса — требовало перекомпиляции всей системы. Это замедляло разработку, увеличивало стоимость и делало невозможным адаптацию ПО под нужды конкретного заказчика.
Группе, возглавляемой Роберто Иерусалимским (Roberto Ierusalimschy), стало очевидно: нужно что-то, что позволит пользователям настраивать логику приложения без доступа к исходному коду. Они пробовали использовать существующие языки — Tcl, Python, даже собственные конфигурационные форматы, — но всё было либо слишком тяжёлым, либо плохо встраивалось, либо требовало лицензий. Тогда они приняли решение: создать свой язык.
В 1993 году команда — Роберто Иерусалимский, Луис Эдуардо де Фариа (Luiz Henrique de Figueiredo) и Вальтер Серрапо (Waldemar Celes) — представила первый релиз Lua (произносится «луа», что по-португальски значит «луна»). Имя было выбрано символически: как и луна, которая не светит сама, а отражает свет солнца, Lua существует, чтобы облегчать жизнь другим системам, быть их «отражением», их внутренним скриптовым ядром.
Цели и философия
Lua никогда не стремился быть универсальным языком. Он не пытается решать все задачи сразу — ни заменить Python, ни конкурировать с Java.
Его цель — одна: быть идеальным скриптовым языком для расширения приложений.
Эта философия выражена в самом дизайне:
- Нет встроенных библиотек для сетей, GUI или баз данных — всё это остаётся за пределами ядра.
- Нет классов — но есть таблицы и метатаблицы, позволяющие самому реализовать ООП.
- Нет строгой типизации — но есть гибкость и скорость прототипирования.
С самого начала Lua был открытым и свободным. В 1994 году он был выпущен под лицензией, аналогичной MIT, что позволило использовать его бесплатно в любых целях — включая коммерческие продукты. Это стало одной из причин его успеха: разработчики могли встраивать Lua в свои приложения без юридических рисков. Ни одна корпорация не «владеет» Lua — им продолжает заниматься исследовательская группа PUC-Rio, но сообщество вносит вклад в развитие, документацию и библиотеки.
Эволюция
Lua эволюционировал медленно:
- Lua 5.0 (2003) — введение метатаблиц, улучшенная система модулей, goto.
- Lua 5.1 (2006) — стабильная, самая распространённая версия. Используется в World of Warcraft, Nginx, многих движках.
- Lua 5.2 (2011) — новые области видимости (
goto,::label::), улучшения GC,__close metamethod. - Lua 5.3 (2015) — поддержка 64-битных целых чисел, улучшения производительности.
- Lua 5.4 (2020) — потоковая сборка мусора, множественные значения в параметрах, улучшения JIT-совместимости.
Каждое обновление сохраняло обратную совместимость, что критично для embedded-систем, где обновление может быть невозможно.
К 2010-м годам Lua стал популярным в игровой индустрии, особенно после успеха World of Warcraft, где весь пользовательский интерфейс управлялся Lua-скриптами. В этой популярной MMORPG видеоигре, использовались специальные «аддоны», модификации интерфейса, упрощающие жизнь игроку. Но настоящий скачок произошёл с ростом платформы Roblox — виртуального мира, где миллионы пользователей создают свои игры. Roblox выбрал Lua как основу для скриптования игровой логики, но столкнулся с ограничениями - динамическая типизация, отсутствие строгой проверки типов и медленная разработка больших проектов.
В ответ на это, инженеры Roblox разработали Luau — диалект Lua, совместимый с Lua 5.1, но с важными улучшениями - статическая типизация, type inference, nullable-типы, обобщения, улучшенный анализ кода и оптимизированную производительность.
Сегодня Luau — один из самых массовых языков программирования в мире, ведь десятки миллионов детей и подростков учатся программировать на нём в Roblox Studio.
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Lua — это компактный, быстрый, встраиваемый интерпретируемый язык программирования высокого уровня, разработанный с акцентом на простоту, гибкость и эффективность. Набор советов, правил, принципов и обычаев в разработке на этом языке. LÖVE (Love2D) - 2D-движок для создания игр на Lua, кроссплатформенный, имеет простой API (love.load(), love.update(dt), love.draw()), используется инди-разработчиками и для обучения. Гайд по установке и настройке с написанием первой программы и её запуском. Кавычки, точки, запятые, скобки и прочие знаки препинания. Lua использует двадцать два зарезервированных ключевых слова. Все они являются частью синтаксиса языка и недоступны для использования в качестве идентификаторов. Набор функций, которые включены в стандартную библиотеку языка. Типизация, набор правил определения типа данных значений языка. Lua предоставляет две формы условной конструкции — if-then-else и её компактный аналог через and/or, хотя последний используется с осторожностью из-за семантических различий. Анонимные функции (или лямбда-выражения) — это функции без имени, которые могут быть определены inline. Они особенно полезны при передаче в качестве аргументов или при создании замыканий. Объектно-ориентированное программирование (ООП) — это парадигма программирования, которая организует код вокруг объектов, объединяющих данные и поведение. В языке Lua отсутствует встроенная поддержка… Файл — это именованный набор данных, хранящийся на носителе информации. В Lua работа с файлами осуществляется через встроенную библиотеку io. Библиотека предоставляет функции для открытия, чтения,…Основы языка Lua
Рекомендации по разработке на Lua
Экосистема приложений на Lua
Первая программа на Lua
Синтаксис и пунктуация в Lua
Ключевые слова языка Lua
Встроенные функции и стандартная библиотека Lua
Типы данных и объявление переменных в Lua
Управляющие конструкции и циклы в Lua
Функции, замыкания и анонимные функции
Объектно-ориентированное программирование в Lua
Работа со строками, таблицами и файлами