Lua книга. Lua книги


Lua - это... Что такое Lua?

У этого термина существуют и другие значения, см. LUA. Lua Класс языка: Тип исполнения: Появился в: Автор(ы): Релиз: Типизация данных: Основные реализации: Диалекты: Испытал влияние: Повлиял на: Лицензия Сайт:

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

интерпретируемый, JIT

1993

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

5.2.1 (14 июня 2012)

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

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

MetaLua

Scheme, Снобол, Модула, Клу, C++

Io, GameMonkey, Squirrel, Dao, MiniD

лицензия MIT

www.lua.org

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

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

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

В настоящее время (ноябрь 2012) проводится работа по внедрению поддержки Lua в движок Mediawiki[2][3].

История

Lua разработан подразделением Tecgraf Католического университета Рио-де-Жанейро в Бразилии (Computer Graphics Technology Group, Pontifícia Universidade Católica do Rio de Janeiro), история языка ведёт отсчёт с 1993 года. Авторами языка стали Роберто Иерусалимски, Luiz Henrique de Figueiredo и Waldemar Celes. Lua распространяется свободно, с открытыми исходными текстами на языке Си.

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

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

Так, в Lua отсутствует явная поддержка наследования, однако оно легко реализуется с помощью метатаблиц.

Параллельное присваивание

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

Типы

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 относятся обычно вещественные числа (double), но внутреннее представление чисел можно изменить при сборке интерпретатора. Тип 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, временем жизни замыкания управляет сборщик мусора.

Примеры кода

Классическая программа hello world на Lua выглядит вот так:

Для комментариев используется следующий синтаксис, близкий к языкам Ada, SQL и VHDL:

-- Комментарии в Lua начинаются с двойного дефиса и продолжаются до конца строки. --[[ Многострочные текстовые литералы и комментарии берут в двойные квадратные скобки. ]]

Факториал — пример рекурсивной функции:

function factorial(n) if n == 0 then return 1 else return n * factorial(n - 1) end end

Цикл со счётчиком:

for i = 1,5 do -- Statements end

Работа с функциями как с объектами первого класса демонстрируется в следующем примере, в котором модифицируется поведение функции print:

do local oldprint = print -- Сохраняем текущую функцию print как oldprint function print(s) -- Переопределяем функцию print if s == "foo" then oldprint("bar") else oldprint(s) end end end

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

Ключевой особенностью Lua является расширяемая семантика, механизм метатаблиц даёт большие возможности по настройке уникального поведения для таблиц Lua. В следующем примере демонстрируется «бесконечная» таблица. Для любого , fibs[n] даст -е число Фибоначчи с использованием мемоизации.

fibs = { 1, 1 } -- Первоначальные значения для fibs[1] и fibs[2]. setmetatable(fibs, { __index = function(name, n) -- Вызов функции, если fibs[n] не существует. name[n] = name[n - 1] + name[n - 2] -- Расчёт и мемоизация fibs[n]. return name[n] end })

Реализация

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

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

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

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

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

Игры

См. также категорию: Игры, использующие язык Lua

Первыми в разработку компьютерных игр язык Lua внедрила компания LucasArts, начиная с игры Grim Fandango[6]. Авторы языка в своём докладе на конференции HOPL (англ.)русск. вспоминают, что в январе 1997 они получили сообщение от Брета Могилефски, главного разработчика Grim Fandango, где он писал, что, прочитав о языке в статье 1996 года в Dr. Dobb’s Journal, он планирует заменить используемый ими самодельный скриптовый язык SCUMM на Lua[7]. В результате им был создан игровой движок GrimE, используемый также более поздним квестом от LucasArts — Escape from Monkey Island.

В 2003 году в результате опроса на сайте GameDev.net Lua был признан самым популярным скриптовым языком для разработки игр[8].

Примером игры, программируемой с помощью Lua, является World of Warcraft.[9][10] На языке Lua описываются уровни игры-головоломки Enigma[11].

В играх S.T.A.L.K.E.R используется Lua (скрипт смены группировки):

function select_actor_community(actor, npc) db.actor:set_character_community("dolg", 0, 0) -- сменит группировку игрока на "долг" end

В модификации Garry's Mod. Lua является основным инструментом. Используется для реализации игровых режимов и дополнений.

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

Список примеров в этой статье не основывается на авторитетных источниках непосредственно о предмете статьи.

Добавьте ссылки на источники, предметом рассмотрения которых является тема настоящей статьи в целом, и содержащие данные элементы списка как примеры. В противном случае раздел может быть удалён.

  • Пользовательский интерфейс Adobe Photoshop Lightroom написан с использованием Lua
  • Плагин Amnesia позволяет автоматизировать обработку событий в R&Q с помощью Lua
  • Конфигурационные файлы Awesome (динамический оконный менеджер для X Window System) используют язык программирования Lua
  • Библиотека виджетов BUIW для BREW использует Lua для описания файлов тем
  • В Celestia, свободной трёхмерной астрономической программе, Lua используется для написания расширений и плагинов
  • Программа для системного мониторинга Conky использует Lua как язык скриптов для расширения возможностей
  • В файлообменной сети Direct Connect Lua широко используется как язык скриптов в программном обеспечении сети
  • Dr.Web Enterprise Suite
  • HandyCache использует Lua как язык для написания расширений
  • Фреймовый оконный менеджер Ion использует Lua для настройки и добавления новых функций (возможностей)
  • IP-PBX Asterisk имеет возможность использовать Lua как язык управления вызовов (диалплан)
  • MySQL proxy использует Lua как встроенный язык для реализации возможностей своей функциональности
  • Платформа OpenAT позволяет разрабатывать пользовательские приложения на Lua
  • В OpenWRT на Lua написан веб интерфейс управления
  • Текстовый редактор SciTE использует Lua как язык скриптов для расширения возможностей
  • uiOne использует Lua как язык скриптов при создании пользовательских интерфейсов на языке TrigML
  • Медиаплеер VLC использует Lua как язык скриптов
  • Сниффер Wireshark использует Lua как язык для создания анализаторов сетевых протоколов.
  • Автоматизированная мобильная система Агент+ использует Lua как язык скриптов для расширения возможностей
  • Клавиатуры Logitech серии G (клавиатуры для геймеров) поддерживают написание скриптов на Lua.
  • Начиная с версии 7.3 текстовый редактор Vim поддерживает сценарии на Lua.
  • Lua поддерживается NSClient++ как язык скриптов для расширения возможностей
  • В СУБД CronosPro[12] Lua используется для создания сценариев управляющих (кнопочных) форм и форм ввода
  • FXCM Marketscope Charts использует язык Lua для написания технических индикаторов и торговых стратегий.
  • Треккер (DAW) Renoise поддерживает использование Lua для написания дополнений расширяющих возможности программы
  • Начиная с Far 3.0.2851, в Фаре вместо встроенного макроязыка используется скриптовый язык Lua 5.1.

Примечания

  1. ↑ Lua Implementations  (англ.). Lua-users wiki. Архивировано из первоисточника 24 августа 2011. Проверено 18 мая 2009.
  2. ↑ Wikimedia Foundation Report, April 2012  (англ.). Архивировано из первоисточника 23 июня 2012. Проверено 10 мая 2012.
  3. ↑ Lua scripting // MediaWiki
  4. ↑ The LuaJIT Project
  5. ↑ llvm-lua. JIT/Static compiler for Lua using LLVM on the backend.
  6. ↑ Bret Mogilefsky Lua in Grim Fandango. Архивировано из первоисточника 4 февраля 2012. Проверено 9 декабря 2011.
  7. ↑ HOPL, 2007, с. 11
  8. ↑ Which language do you use for scripting in your game engine?. GameDev.net — Poll Results
  9. ↑ Paul Emmerich Beginning Lua with World of Warcraft Add-ons. — Apress, July 2009. — ISBN 1430223715
  10. ↑ James Whitehead II, Bryan McLemore, and Matthew Orlando World of Warcraft Programming. — Wiley, May 2008. — ISBN 0470229810
  11. ↑ Tom Gutschmidt Ch. 8. The Lua Game Community → Game Engines // Game Programming with Python, Lua, and Ruby. — Premier Press, 2003. — 472 p. — ISBN 1-59200-079-7
  12. ↑ ИСУБД CronosPRO

Ссылки

История языка Lua-проекты
  • Kepler Project team — Платформа веб-разработки под Lua (англ.)
  • LuaGL — интерфейс к OpenGL для Lua 5.1

Lua на русском

Переводы руководств Статьи и обзоры Прочее
  Lua Интерпретаторы и компиляторы Фреймворки и библиотеки Порты и дистрибутивы IDE Приложения
Lua • Parrot
IUP • Kepler • LÖVE
Plua • Lua Player • Corona
Decoda SciTE • Сравнение
Prosody

biograf.academic.ru

Lua книга

С другой стороны, оно полностью описывает язык: Вот псевдокод, демонстрирующий выполнение оператора for:. Фабрика pairs t возвращает итератор, дающий на каждом шаге индекс в книге и размещенное по этому индексу значение:.

Changing your username will break existing story embeds, meaning older stories embedded on other Web sites will no longer appear. Таблицы тип table соответствует ассоциативным массивам, которые можно индексировать любыми значениями кроме nil и которые могут одновременно содержать значения произвольных типов кроме nil.

Управление мета-таблицами getmetatable obj Если объект не имеет мета-таблицы, то возвращает nil. В них можно использовать следующие специальные книги символов: Если книга вызывается из выражения или из середины списка значений, то используется только первое возвращаемое значение.

В последнем случае переменная j пробегает последовательные целые значения, начиная с 1. Game Programming with Python, Lua, and Ruby offers an in-depth look at these three flexible languages as they relate to creating games. У этого решения есть недостаток:

Книга посвящена одному из самых популярных встраиваемых языков — Lua. Этот язык используется во многих книгах и большом количестве различных приложений. Он сочетает небольшой объем занимаемый памяти, высокое быстродействие, простоту использования и большую гибкость. Важной особенностью книги является огромный спектр охватываемых тем — практически все, что может понадобиться при использовании Lua.

Также к каждой главе дается несколько упражнений, позволяющих проверить свои знания. Книга будет полезна широкому кругу программистов и разработчиков книг. Для понимания последних глав книги необходимо знание языка С, но для большинства остальных глав достаточно базовых знаний о программировании. Эта интеграция несет с собой много преимуществ. И это не случайно. Многие книги языка вносят в это свой вклад. Функции высших порядков и анонимные книги позволяют высокую степень параметризации, делая функции более универсальными.

Существуют другие языки, которые вы можете использовать примерно для тех же книг. Эта книга может оказаться полезной всем этим людям. Первая часть покрывает сам язык, показывая, как можно использовать весь его потенциал. Главы этой части обсуждают структуры данных, их сохранение persistenceпакеты и объектно-ориентированное программирование. Именно там мы покажем всю силу языка.

Третья книга представляет стандартные библиотеки. Эта часть особенно полезна для тех, кто использует Lua как самостоятельный язык, хотя многие приложения включают частично или полностью стандартные библиотеки. В этой части каждой библиотеке посвящена отдельная глава: Наконец, последняя часть книги покрывает API между Lua и С.

Эта часть заметно отличается от всей остальной книги. В этой части мы будем программировать на С, а не на Lua. Во-первых, я обновил всю книгу на Lua 5. Глава об окружениях environments была практически полностью переписана.

Сложность этих упражнений варьируется от простых вопросов до полноценных небольших проектов. Другие ресурсы Краткое руководство необходимо всем, кто хочет освоить язык. Эта книга не заменяет краткое руководство. Напротив, они дополняют друг друга. Руководство только описывает Lua. Оно не показывает ни примеров, ни объяснений для книг языка. С другой стороны, оно полностью описывает язык: Там, где эта книга расходится с руководством, доверяйте руководству.

Эта книга описывает Lua 5. Некоторые отличия Lua 5. В книге моноширинный шрифт используется для фрагментов кода идентификаторов. Для зарезервированных слов используется жирный шрифт. Программирование на языке LUA January 25, December 23, Other. Он основан на небольшом числе понятий. Исходный код для каждой из этих книг практически одинаков. Таким образом, вам обычно не нужно адаптировать его под новую среду: Beginning Android Games, 2nd Edition.

Professional Visual Studio

Стандартная библиотека Lua - ltwood

Этот документ не претендует на полное описание всех возможностей стандартных библиотек Lua. Тюнинг, ремонт, эксплуатация и обслуживание мотоциклов марки ИЖ. Переназначение умалчиваемых потоков io. Функция возвращает имя новой локали или nil если установка новой локали не была выполнена. Также управляющая программа может регистрировать собственные функции таким образом, что их можно будет вызывать из книга на Lua. Куплю, мотоциклы, мопеды, велосипеды, книги, мотоблоки, снегоходы, запчасти, спорттовары.

Оператор not всегда возвращает логическое значение, принимая аргумент произвольного типа при этом только значение nil соответствует логическому значению falseостальные же трактуются как true. Мотоцикл Иж Планета 5 Руководство по книги, обслуживанию и ремонту в черно белых фотографиях. Каждое выполнение конструктора создает новую книгу. Эта книга описывает Lua 5. При этом локальная переменная видима в блоках, внутренних по отношению к блоку, в котором она описана.

The book is targeted at people with some programming background, but it does not assume any prior knowledge about Lua or other scripting languages.

Книга по эксплуатации иж планета 5 скачать · Storify

Управление мета-таблицами getmetatable obj Если объект не имеет мета-таблицы, то возвращает nil. При этом локальная переменная видима в блоках, внутренних по отношению к блоку, в котором она описана. Мотоцикл ИЖ Планета Автор: Отношения равенства и порядка всегда дают в результате true или false то есть логическое значение.

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

Вот пример простого итератора без внутреннего состояния: Эта библиотека поддерживает манипулирование таблицами как обычными массивами. Также к каждой главе дается несколько упражнений, позволяющих проверить свои знания. В следующем примере пустая таблица выполняет роль прокси, переадресующего обращения к полям таблицы:. ИЖ Юпитер 2 и. Возврат из функции происходит как при завершении выполнения ее тела, так и при выполнении оператора return.

Некоторые отличия Lua 5. Если функция передается как возвращаемое значение, то она сохраняет доступ ко всем переменным, входящим в ее замыкание. Changing your username will break existing story embeds, meaning older stories embedded on other Web sites will no longer appear Of course not!

Руководство по ремонту и техническому обслуживанию Формат: Основная проблема состоит в порождении многих объектов, имеющих сходное поведение то есть порожденных от одного класса: Если паттерн не найден, то функция возвращает nil.

Это позволяет использовать Lua как интерпретатор скриптов в Unix-подобных системах.

Popular Videos - Paracelsus & Lifestyle

4966 :: 4967 :: 4968 :: 4969 :: 4970 :: 4971

u9670973.beget.tech

Роберту Иерузалимски. Программирование на языке Lua

  • Lua — У этого термина существуют и другие значения, см. LUA. Lua Класс языка …   Википедия

  • Программирование — Эта статья должна быть полностью переписана. На странице обсуждения могут быть пояснения. У этого термина существуют и другие значения, см. Программи …   Википедия

  • Отражение (программирование) — У этого термина существуют и другие значения, см. Отражение. Для улучшения этой статьи желательно?: Перевести текст с иностранного языка на русский. Н …   Википедия

  • Объект (программирование) — У этого термина существуют и другие значения, см. Объект (значения). Объект в программировании  некоторая сущность в виртуальном пространстве, обладающая определённым состоянием и поведением, имеющая заданные значения свойств (атрибутов) и… …   Википедия

  • Замыкание (программирование) — Эта статья или раздел нуждается в переработке. Пожалуйста, улучшите статью в соответствии с правилами написания статей. У этого термина …   Википедия

  • Визуальное программирование — Возможно, эта статья содержит оригинальное исследование. Добавьте ссылки на источники, в противном случае она может быть выставлена на удаление. Дополнительные сведения могут быть на странице обсуждения. (25 мая 2011) …   Википедия

  • Hope (программирование) — У этого термина существуют и другие значения, см. Hope (значения). Hope функциональный язык программирования, разработанный в начале 1980 х годов; является предшественником языков Miranda и Haskell. В журнале Byte за август 1985 впервые… …   Википедия

  • Комментарии (программирование) — У этого термина существуют и другие значения, см. Комментарий. Комментарии  пояснения к исходному тексту программы, находящиеся непосредственно внутри комментируемого кода. Синтаксис комментариев определяется языком программирования. С точки …   Википедия

  • Garry’s Mod — В этой статье не хватает ссылок на источники информации. Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена. Вы можете отредактировать …   Википедия

  • D (язык программирования) — У этого термина существуют и другие значения, см. D. D Семантика: мультипарадигменный: императивное, объектно ориентированное, обобщённое программирование Тип исполнения: компилятор Появился в: 1999 Автор(ы) …   Википедия

  • Модула-2 — Modula 2 Класс языка: императивный, структурированный, модульный, data and method hiding Появился в: 1978 Автор(ы): Никлаус Вирт Типизация данных: статическая, сильная …   Википедия

  • dic.academic.ru

    lua книги

    Allaae „та «anw npong?oan'r'i.. lua Mon/ml; x. Hawunaf'rm moar/amm по данным : .- »i no Jaaa/M 4 {la} nfcahium Maimg Molo : БЁ'Ь; на : 4i тронной. Подробные характеристики Программирование на языке Lua, отзывы покупателей, обзоры и обсуждение товара на форуме. Выбирайте из более 6. Haw l'rpAl'rH Hailual uiaoro'raopll'lua: no'хоть llfaw Hdspoy'wbi, la'poc'rll же lea , a' niaflll'rao ‚понёс/е Haplllla'lollll . A'qle же не HgllaafllllH nl'awawax ты,. Легко изучать: Corona использует язык программирования Lua,. Программируем на Lua – отличная книга о Lua-программировании В этой справке есть мануал по луа, первая редакция книги Programming in Lua в электронном виде и справка по библиотекам,. Для чего: рассказать про Lua начинающим программистам,. Если говорить академическим языком, Lua — это интерпретируемый язык. Автор: Kurt Jung, Aaron Brown Название: Beginning Lua Programming. книги фантастика. можно было смотреть программирование на lua книга купить. Books.Ru – Книги: Lua (programming language) купить цена, заказ, оптом, отзывы, Russell Cohn, ISBN 978-5-5093-0918-2. Книга посвящена одному из самых популярных встраиваемых языков – Lua. Этот язык использовался во многих играх и большом количестве различных. Нож мне нужен только для того, чтобы разыскать у моего деда немного буровые. программирование на lua книга. Он взаимодействует с языком программирования Lua, во многом. Если книга вам не понятна, то попробуйте поискать руководство по. Придерживаясь практического подхода этой книги вы научитесь через примеры, как пройти весь путь разработки приложения с самого начала до его. Собственно сама тема - посоветуйте мне хорошие книги по PHP,. Lua), поэтому книги совсем для чайников лучше не советовать smile. Книга является детальным и авторитетным введением во все аспекты прграммирования на Lua, написанная разработчиком архитектуры Lua. Огромное кол-во уроков/туториалов по Lua.. Хорошая книга для улучшения памяти, внимания и запоминания информации? О языке Lua написать должно, потому как он сопровождает мировые. обратиться к книге соавтора проекта Роберто Иерусалимского. Может я и не прав, но ошибка в том, что по пути к main.lua есть.. В том то и дело, что я не смог найти полноценную книгу(Такие как для. Книги. Иерузалимски Роберту, Программирование на языке Lua. Белоруссия, книги в Минске. A small yet extraordinarily powerful programming language, Lua achieved its popularity early on as a video game scripting language and has since evolved into. Нужен был скриптовый язык для создания игры на С++, lua показался самым уместным. Он создан как раз для скриптовых целей в. Вышла из печати книга "Программиров

    wallinside.com

    Lua - это... Что такое Lua?

    У этого термина существуют и другие значения, см. LUA. Lua Класс языка: Тип исполнения: Появился в: Автор(ы): Релиз: Типизация данных: Основные реализации: Диалекты: Испытал влияние: Повлиял на: Лицензия Сайт:

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

    интерпретируемый, JIT

    1993

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

    5.2.1 (14 июня 2012)

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

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

    MetaLua

    Scheme, Снобол, Модула, Клу, C++

    Io, GameMonkey, Squirrel, Dao, MiniD

    лицензия MIT

    www.lua.org

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

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

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

    В настоящее время (ноябрь 2012) проводится работа по внедрению поддержки Lua в движок Mediawiki[2][3].

    История

    Lua разработан подразделением Tecgraf Католического университета Рио-де-Жанейро в Бразилии (Computer Graphics Technology Group, Pontifícia Universidade Católica do Rio de Janeiro), история языка ведёт отсчёт с 1993 года. Авторами языка стали Роберто Иерусалимски, Luiz Henrique de Figueiredo и Waldemar Celes. Lua распространяется свободно, с открытыми исходными текстами на языке Си.

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

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

    Так, в Lua отсутствует явная поддержка наследования, однако оно легко реализуется с помощью метатаблиц.

    Параллельное присваивание

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

    Типы

    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 относятся обычно вещественные числа (double), но внутреннее представление чисел можно изменить при сборке интерпретатора. Тип 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, временем жизни замыкания управляет сборщик мусора.

    Примеры кода

    Классическая программа hello world на Lua выглядит вот так:

    Для комментариев используется следующий синтаксис, близкий к языкам Ada, SQL и VHDL:

    -- Комментарии в Lua начинаются с двойного дефиса и продолжаются до конца строки. --[[ Многострочные текстовые литералы и комментарии берут в двойные квадратные скобки. ]]

    Факториал — пример рекурсивной функции:

    function factorial(n) if n == 0 then return 1 else return n * factorial(n - 1) end end

    Цикл со счётчиком:

    for i = 1,5 do -- Statements end

    Работа с функциями как с объектами первого класса демонстрируется в следующем примере, в котором модифицируется поведение функции print:

    do local oldprint = print -- Сохраняем текущую функцию print как oldprint function print(s) -- Переопределяем функцию print if s == "foo" then oldprint("bar") else oldprint(s) end end end

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

    Ключевой особенностью Lua является расширяемая семантика, механизм метатаблиц даёт большие возможности по настройке уникального поведения для таблиц Lua. В следующем примере демонстрируется «бесконечная» таблица. Для любого , fibs[n] даст -е число Фибоначчи с использованием мемоизации.

    fibs = { 1, 1 } -- Первоначальные значения для fibs[1] и fibs[2]. setmetatable(fibs, { __index = function(name, n) -- Вызов функции, если fibs[n] не существует. name[n] = name[n - 1] + name[n - 2] -- Расчёт и мемоизация fibs[n]. return name[n] end })

    Реализация

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

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

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

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

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

    Игры

    См. также категорию: Игры, использующие язык Lua

    Первыми в разработку компьютерных игр язык Lua внедрила компания LucasArts, начиная с игры Grim Fandango[6]. Авторы языка в своём докладе на конференции HOPL (англ.)русск. вспоминают, что в январе 1997 они получили сообщение от Брета Могилефски, главного разработчика Grim Fandango, где он писал, что, прочитав о языке в статье 1996 года в Dr. Dobb’s Journal, он планирует заменить используемый ими самодельный скриптовый язык SCUMM на Lua[7]. В результате им был создан игровой движок GrimE, используемый также более поздним квестом от LucasArts — Escape from Monkey Island.

    В 2003 году в результате опроса на сайте GameDev.net Lua был признан самым популярным скриптовым языком для разработки игр[8].

    Примером игры, программируемой с помощью Lua, является World of Warcraft.[9][10] На языке Lua описываются уровни игры-головоломки Enigma[11].

    В играх S.T.A.L.K.E.R используется Lua (скрипт смены группировки):

    function select_actor_community(actor, npc) db.actor:set_character_community("dolg", 0, 0) -- сменит группировку игрока на "долг" end

    В модификации Garry's Mod. Lua является основным инструментом. Используется для реализации игровых режимов и дополнений.

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

    Список примеров в этой статье не основывается на авторитетных источниках непосредственно о предмете статьи.

    Добавьте ссылки на источники, предметом рассмотрения которых является тема настоящей статьи в целом, и содержащие данные элементы списка как примеры. В противном случае раздел может быть удалён.

    • Пользовательский интерфейс Adobe Photoshop Lightroom написан с использованием Lua
    • Плагин Amnesia позволяет автоматизировать обработку событий в R&Q с помощью Lua
    • Конфигурационные файлы Awesome (динамический оконный менеджер для X Window System) используют язык программирования Lua
    • Библиотека виджетов BUIW для BREW использует Lua для описания файлов тем
    • В Celestia, свободной трёхмерной астрономической программе, Lua используется для написания расширений и плагинов
    • Программа для системного мониторинга Conky использует Lua как язык скриптов для расширения возможностей
    • В файлообменной сети Direct Connect Lua широко используется как язык скриптов в программном обеспечении сети
    • Dr.Web Enterprise Suite
    • HandyCache использует Lua как язык для написания расширений
    • Фреймовый оконный менеджер Ion использует Lua для настройки и добавления новых функций (возможностей)
    • IP-PBX Asterisk имеет возможность использовать Lua как язык управления вызовов (диалплан)
    • MySQL proxy использует Lua как встроенный язык для реализации возможностей своей функциональности
    • Платформа OpenAT позволяет разрабатывать пользовательские приложения на Lua
    • В OpenWRT на Lua написан веб интерфейс управления
    • Текстовый редактор SciTE использует Lua как язык скриптов для расширения возможностей
    • uiOne использует Lua как язык скриптов при создании пользовательских интерфейсов на языке TrigML
    • Медиаплеер VLC использует Lua как язык скриптов
    • Сниффер Wireshark использует Lua как язык для создания анализаторов сетевых протоколов.
    • Автоматизированная мобильная система Агент+ использует Lua как язык скриптов для расширения возможностей
    • Клавиатуры Logitech серии G (клавиатуры для геймеров) поддерживают написание скриптов на Lua.
    • Начиная с версии 7.3 текстовый редактор Vim поддерживает сценарии на Lua.
    • Lua поддерживается NSClient++ как язык скриптов для расширения возможностей
    • В СУБД CronosPro[12] Lua используется для создания сценариев управляющих (кнопочных) форм и форм ввода
    • FXCM Marketscope Charts использует язык Lua для написания технических индикаторов и торговых стратегий.
    • Треккер (DAW) Renoise поддерживает использование Lua для написания дополнений расширяющих возможности программы
    • Начиная с Far 3.0.2851, в Фаре вместо встроенного макроязыка используется скриптовый язык Lua 5.1.

    Примечания

    1. ↑ Lua Implementations  (англ.). Lua-users wiki. Архивировано из первоисточника 24 августа 2011. Проверено 18 мая 2009.
    2. ↑ Wikimedia Foundation Report, April 2012  (англ.). Архивировано из первоисточника 23 июня 2012. Проверено 10 мая 2012.
    3. ↑ Lua scripting // MediaWiki
    4. ↑ The LuaJIT Project
    5. ↑ llvm-lua. JIT/Static compiler for Lua using LLVM on the backend.
    6. ↑ Bret Mogilefsky Lua in Grim Fandango. Архивировано из первоисточника 4 февраля 2012. Проверено 9 декабря 2011.
    7. ↑ HOPL, 2007, с. 11
    8. ↑ Which language do you use for scripting in your game engine?. GameDev.net — Poll Results
    9. ↑ Paul Emmerich Beginning Lua with World of Warcraft Add-ons. — Apress, July 2009. — ISBN 1430223715
    10. ↑ James Whitehead II, Bryan McLemore, and Matthew Orlando World of Warcraft Programming. — Wiley, May 2008. — ISBN 0470229810
    11. ↑ Tom Gutschmidt Ch. 8. The Lua Game Community → Game Engines // Game Programming with Python, Lua, and Ruby. — Premier Press, 2003. — 472 p. — ISBN 1-59200-079-7
    12. ↑ ИСУБД CronosPRO

    Ссылки

    История языка Lua-проекты
    • Kepler Project team — Платформа веб-разработки под Lua (англ.)
    • LuaGL — интерфейс к OpenGL для Lua 5.1

    Lua на русском

    Переводы руководств Статьи и обзоры Прочее
      Lua Интерпретаторы и компиляторы Фреймворки и библиотеки Порты и дистрибутивы IDE Приложения
    Lua • Parrot
    IUP • Kepler • LÖVE
    Plua • Lua Player • Corona
    Decoda SciTE • Сравнение
    Prosody

    dic.academic.ru