Луа

Луа
Lua
Image:Логотип Lua.gif
Класс языка:

мультипарадигмальный: скриптовый, императивный, функциональный, объектно-ориентированный (прототипный)

Тип исполнения:

интерпретируемый, Появился в:

1993 г.

Автор(ы):

Руберту Иерузалимски, Вальдемар Селес, Луис Энрике ди Фигейреду

Последняя версия:

5.1.4 / 22 августа 2008 г.

Типизация данных:

динамическая, слабая ("утиная")

Основные реализации:

Lua, LuaJIT, LLVM-Lua, LuaCLR, Nua, Lua Alchemy и др.[1]

Диалекты:

MetaLua

Испытал влияние:

Modula, CLU, C++

Повлиял на:

Squirrel, Dao, MiniD

Lua ([лу́а], порт. «луна») — интерпретируемый язык программирования, разработанный подразделением Tecgraf Католического университета Рио-де-Жанейро (Computer Graphics Technology Group of Pontifical Catholic University of Rio de Janeiro in Brazil). Является свободно распространяемым, с открытыми исходными текстами на языке Си.

По возможностям, идеологии и реализации язык ближе всего к класса и объекта в явном виде, механизмы объектно-ориентированного программирования с поддержкой прототипов (включая множественное наследование) легко реализуются с использованием метатаблиц, которые также позволяют перегрузку операций и т. п. Реализуемая модель ООП (как и в JavaScript) — прототипная.

Lua в переводе с португальского значит «луна», поэтому неправильно писать «LUA» одними только прописными символами.

Содержание

История

Создание языка началось в 1993 г. Команда разработчиков из католического университета Рио-де-Жанейро невелика — Роберто Иерусалимский (Roberto Ierusalimschy), Вольдемар Целес (Waldemar Celes) и Луис Энрике (Luiz Henrique). Изначально язык задумывался как описательный — для удобства формирования больших массивов данных при решении задач вычислительного эксперимента и машинного моделирования. С тех пор язык претерпел множество изменений и ряд серьезных архитектурных модификаций. Сегодняшняя популярность Lua такова, что .NET-версии языка. Во многих играх Lua используется в качестве «скриптового движка» благодаря уникальному сочетанию быстродействия, легкости встраивания в программы и поддержке «расширяемой семантики».

Некоторые возможности

Подобно таким скриптовым языкам, как Icon, допускает параллельное присваивание. В простейшем случае это позволяет писать выражения вида

 x, y = y, x

Программа «Hello, world» в простейшем случае выглядит так:

 print "Hello, world!"

Типы

Lua представляет собой язык с динамическим определением типов данных. Переменная языка может содержать значения любого типа. Все значения в Lua могут храниться в переменных, использоваться в качестве аргументов при вызове функций и возвращаться в виде результата их выполнения.

В Lua восемь основных типов:

  1. nil (неопределенный)
  2. boolean (логический)
  3. number (числовой)
  4. string (строковый)
  5. function (функция)
  6. userdata (пользовательские данные)
  7. thread (поток)
  8. table (таблица)

Nil — это тип значения nil [пустое значение], главное свойство которого — отличаться от всех остальных значений и обозначать отсутствие пригодного значения. К типу Boolean относятся значения false (ложь) и true (истина). Значения nil и false считаются ложными, любое другое значение считается истинным. К типу Number относятся вещественные числа (двойной точности с плавающей запятой). (Легко можно сделать сборку интерпретатора Lua с другим внутренним представлением чисел, достаточно изменить определение в файле luaconf.h). Тип String обозначает массивы символов. Строки Lua могут содержать любые 8-битные символы, включая ноль ('\0'). Строки не изменяемы.

Таблицы

Таблицы являются самым важным типом данных в Lua и являются фундаментом для пользовательских типов данных, таких как структуры, массивы, списки, множества. Таблица в Lua представляет собой набор пар — (Ключ, Значение). Ключом может выступать значение любого типа, кроме nil.

Замыкания

Lua поддерживает концепцию замыканий, например:

function makeaddfunc(x)
  -- Возвращает новую анонимную функцию, которая добавляет x к аргументу
  return function(y)
    -- Когда мы ссылаемся на переменную x, которая вне текущей области,
    -- и время жизни которой меньше, чем этой анонимной функции, 
    -- Lua создаёт замыкание.
    return x + y
  end
end
plustwo = makeaddfunc(2)
print(plustwo(5)) -- Выводит 7

Каждый раз, когда вызывается makeaddfunc, создаётся новое замыкание для переменной x, так что каждая возвращаемая анонимная функция будет ссылаться на свой параметр x. Как и у любого другого объекта Lua, временем жизни замыкания управляет сборщик мусора.

Реализация

Как и многие интерпретируемые языки программирования, реализация Lua имеет отдельно компилятор с исходного языка в исполняемый байт-код и виртуальную машину для исполнения сгенерированного байт-кода. Причём байт-код — это не команды стековой машины, а команды некоего виртуального процессора с несколькими регистрами, что повышает эффективность исполнения. В стандартной виртуальной машине Lua используется распределение памяти со сборкой мусора (аналогично Java или .NET).

Lua использует единый строковой пул, что позволяет снизить расходы памяти на хранение строк.

Для задач критичных по времени имеется LuaJIT. Также разработан компилятор llvm-lua генерирующий код для виртуальной машины LLVM, позволяющей последующую компиляцию в очень эффективный машинный код для процессоров различной архитектуры.

Использование

В настоящее время используется в различных проектах, где требуется встроить достаточно быстрый и нетрудный в освоении скриптовый язык программирования — например, в разработке игр, где Lua часто используется между игровым «движком» и данными для написания сценариев поведения/взаимодействия объектов.

Игры

Программное обеспечение

Примечания

  1. Lua Implementations (англ.). Lua-users wiki. Проверено 18 мая 2009.

Ссылки

Lua на русском


Wikimedia Foundation. 2010.

Игры ⚽ Поможем решить контрольную работу

Полезное


Смотреть что такое "Луа" в других словарях:

  • ЛУА — в римской мифологии дочь Сатурна, богиня, в честь которой сжигали захваченное у неприятеля оружие …   Большой Энциклопедический словарь

  • ЛУА — ЛУА, в римской мифологии дочь Сатурна (см. САТУРН (бог)) , богиня, в честь которой сжигали захваченное у неприятеля оружие …   Энциклопедический словарь

  • Луа (Шаранта Приморская) — Коммуна Луа Loix Страна ФранцияФранция …   Википедия

  • Луа-Луа — фамилия Луа Луа, Ломана конголезский футболист Луа Луа, Казенга конголезский футболист, младший брат Ломана …   Википедия

  • луа а ла мэн — * la loi à la main. С законом в руках. Анатоль хоть и стоит la loi à la main, но в этом трогательном положении усматривает только фигу. Салт. Письма из провинции. // ОЗ 1868 9 2 104 …   Исторический словарь галлицизмов русского языка

  • луа д'арм — * loi d armes. Английский лавочник не имеет представления о loi d armes: удар можно либо вернуть, либо получить за него возмещение деньгами. Не то во Франции, где огромное большинство людей принадлежащих к любому классу, хоть несколько… …   Исторический словарь галлицизмов русского языка

  • луа де пасивите — * loi de passivité. Закон пассивности. Нетрудно заметить, что во время этих приключений сам Эраст абсолютно ничего не предпринимает, следуя loi de passivité героя настоящего авантюрного романа. РЛ 2001 3 113 …   Исторический словарь галлицизмов русского языка

  • луа натюрель — * lois naturelles. Естественные законы. Lois naturelles обозначали веления самой природы относительно устройства челвоеческих обществ, неведомые невежественным предкам, но теперь открытые просвещенным разумом того или другого философа. Засулич… …   Исторический словарь галлицизмов русского языка

  • Луа-Луа, Ломана — В Википедии есть статьи о других людях с такой фамилией, см. Луа Луа. Ломана Луа Луа …   Википедия

  • Луа-Луа, Казенга — Казенга Луа Луа …   Википедия

  • Луа (Приморская Шаранта) — Коммуна Луа Loix Страна ФранцияФранция …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»