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

Lua язык программирования для чего нужен

  • автор:

Встраиваемые языки: почему Lua?

Этот материал продолжает серию публикаций, основанных на докладах, которые мы сделали на конференции Games Gathering 2017 в декабре прошлого года. В одном из докладов была затронута тема выбора встраиваемого скриптового языка.

Что такое и зачем нужны скриптовые языки

Как уже упоминалось в предыдущем посте нашего блога, в нашей компании написан собственный движок. Сегодня речь пойдёт о том, чем мы руководствовались во время выбора скриптового языка для этого движка.

Почему вообще возникает потребность в скриптовых языках? Как говорится, «в игровой индустрии нет сложных проблем, незачем требовать сложных решений» . Помимо опытных (и дорогих!) программистов, решающих сложные задачи, нам нужны люди (много людей!), которые будут заниматься, скажем, квестами. И, если честно, нам бы хотелось, чтоб эти программисты были не такие дорогие, а в идеале и вовсе не программисты, а непосредственно геймдизайнеры и сценаристы.

Таким образом, есть потребность в средстве для описания несложной, но всё-таки логики, без привлечения тяжёлой артиллерии программистов. Сделаем вывод — что такое для нас скриптовый язык? Это средство, которое позволит сделать разработку игр быстрее и дешевле.
Сразу возникает вопрос, а почему бы нам просто не использовать что-то вроде XML? Дело в том, что для наших целей нам часто нужны управляющие конструкции — ветвление и циклы, в то время как XML это декларативное описание.

Ещё одно преимущество скриптовых языков в том, что скрипты в проекте могут быть как кодом, так и ресурсом. И, соответственно, обновлять скриптовую часть игры можно не только вместе с кодом, то есть в ходе обычных обновлений через механизмы магазинов приложений. Но и вместе с ресурсами — то есть вместе с графическими и прочими материалами, с использованием CDN.

Требования к идеальному скриптовому языку

Сформулируем требования к идеальному скриптовому языку.

  • Динамический. В нашем понимании идеальный скриптовый язык должен быть динамическим.
  • Популярность. Под популярностью языка мы понимаем наличие у него достаточно большого сообщества, готового отвечать на вопросы на специализированных ресурсах наподобие StackOverflow.
  • Пологая кривая обучения. Мы хотим взять, условно говоря, практически любого человека, и быстро обучить его до уровня, который позволит этому человеку продуктивно работать над нашими задачами.
  • Широкие возможности. Язык должен быть мощным и обладать достаточно широкими возможностями, должен поддерживать разные парадигмы программирования. Профессиональный программист, которому предложат писать на таком языке, сможет делать это с комфортом и с удовольствием.
  • Высокая производительность. Производительность — это один из краеугольных камней игровой индустрии.
  • Большое количество библиотек. Очень часто мы, в ходе решения встающих перед нами задач, не создаём принципиально новый код, а пользуемся тем, что уже кто-то написал. Чем больше стабильных, хорошо поддерживаемых библиотек мы можем задействовать, применяя некий язык — тем лучше.
  • Лёгкость встраивания. Речь идёт о встраиваемых языках, поэтому при выборе скриптового языка возможность его встраивания играет важную роль.

Python

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

Python обладает широкими возможностями, отличается хорошей производительностью. Его проблемой является неконсистентная система библиотек. Ещё одна его проблема, которая играет для нас важную роль, заключается в том, что он, на самом деле, не является встраиваемым языком. Это язык, из которого удобно вызывать библиотеки, написанные на C или C++.

По поводу возможностей по встраиванию Python можно сказать, что, например, существует Maya, где используется именно Python. Но тот, кто видел изнутри плагины для Maya, написанные на Python, согласится с нами в том, что выглядят они не очень хорошо.

В итоге можно сказать, что Python, при всех его сильных сторонах, нам не подходит. Теперь рассмотрим JavaScript.

JavaScript

JavaScript — это, без преувеличений, великий язык, который буквально захватил мир.

JavaScript — это популярный динамический язык, отличающийся пологой кривой обучения, обладающий широкими возможностями, хорошей производительностью и обширным набором библиотек.

Если нам, для построения игрового движка, нужен какой-нибудь интерпретатор языка — мы можем найти множество таких интерпретаторов. В реальности же придётся выбирать из двух подобных проектов — V8 и WebKit. И тот и другой имеют достаточно большие размеры. Как результат, если речь идёт о настольных играх, можно было бы рискнуть и включить в игру весь интерпретатор, но в случае мобильных игр нас такой вариант не устраивает.

В компании SocialQuantum есть собственный интерпретатор JavaScript, который проходит 98% тестов, мы планируем перевести этот проект в разряд опенсорсных.

В результате оказывается, что JavaScript выглядит сильным кандидатом на роль встраиваемого языка, но нам он тоже не подходит.

Haxe

Тут надо отметить, что когда заходит разговор о JavaScript, следующим обычно вспоминают Haxe. Но, на самом деле, о возможности использования этого языка в качестве встраиваемого говорить нет смысла, так как Haxe, по сути, является не столько языком, сколько транс-компилятором в другие языки. А это не то, что нам нужно.

Может быть, нас устроит ActionScript или какой-нибудь другой скриптовый язык?

ActionScript

Если формально проанализировать ActionScript на соответствие вышеозначенным требованиям, то может показаться, что идеальный скриптовый язык найден. На его стороне динамическая природа, популярность, лёгкость изучения, хорошие возможности, производительность, наличие библиотек, лёгкость встраивания. Этот язык любят и помнят в игровой индустрии, на нём написано огромное количество замечательных Flash-игр. Главная проблема ActionScript заключается в том, что язык этот почти мёртв. Поэтому нас он тоже не устраивает.

AngelScript, Squirrel и другие

Помимо ActionScript существует множество скриптовых языков, таких, как AngelScript, Squirrel и другие. Среди них можно найти такие, которые, формально, почти полностью удовлетворяют нашим требованиям, но обычно это — языки, которые привязаны к их разработчику, в них бывают какие-то застарелые проблемы, которые годами не исправляются. Они, скорее всего, не слишком популярны, недостаточно хорошо документированы, по ним мало учебных материалов, у них не очень большие сообщества. Одним из следствий такого положения дел является тот факт, что их сложно изучать — хотя бы потому, что не до конца ясно — что они собой представляют и как работают.

Как видно, идеального встраиваемого языка мы пока не нашли. Что если создать собственный язык?

Создание собственного языка

Вполне возможно, что язык, разработанный внутри компании, будет идеально соответствовать её нуждам и его будет легко изучать. Но, скорее всего, такой язык не станет популярным. У такого языка либо будет минимальное количество библиотек, либо их не будет вовсе. Кроме того, сложно поверить, что в современных условиях можно создать нечто такое, что будет работать лучше, что будет обладать большей производительностью и будет проще встраиваться чем что-то, что уже есть на рынке.

Есть компании, которые разрабатывают и используют собственные языки, среди них есть и успешные игроки игрового рынка, но, скорее всего, это — не очень хорошая идея.

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

Lua — встраиваемый язык, который выбрали мы

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

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

Например, вот как выглядит наша рабочая среда на основе IDE CLion от JetBrains. Здесь можно видеть созданный нами механизм автодополнения для Lua, который планируется сделать опенсорсным. Опенсорсным мы собираемся сделать и отладчик.

Рабочая среда

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

Возражения по поводу использования Lua

Lua предназначен для C а не для С++

Никто не спорит с тем, что Lua — отличный встраиваемый язык. Главное, что считают его минусом, заключается в том, что он создан для использования с языком C, а не C++. Из-за этого, пытаясь применить в Lua что-то такое, что есть в C++ и нет в C, мы сталкиваемся с проблемами. Однако тут надо понимать, что проблемы эти решало множество довольно умных людей. Среди средств, решающих проблемы встраивания Lua в C++-проекты, можно отметить такие, как Luabind, Luabridge, toLua++, SQLuaHost. Это — далеко не полный список. Они обладают разными достоинствами и недостатками, но, тем не менее, скорее всего, всё, что вам может потребоваться, уже реализовано в одном из этих решений.

Рассмотрим, например SQLuaHost. Это — биндинг, который сделан внутри компании SocialQuantum, и который планируется сделать опенсорсным. Это решение представляет наше видение того, как должен биндиться Lua. Поэтому, вполне возможно, что если вы не нашли то, что вам нужно в существующих биндерах, вы найдёте это в SQLuaHost.

Lua — это медленно

Нам часто приходится сталкиваться с мнением, в соответствии с которым Lua — это очень медленный язык. Во-первых — это не так. Lua — это стековая машина, и там, на самом деле, просто нечему тормозить. К тому же надо понимать, что в скриптовый язык мы обычно отдаём игровую логику, бизнес-логику, а не какие-то действительно тяжёлые вещи. В результате, если Lua-скрипты заставляют игру тормозить, то проблема, возможно, кроется в неоптимальном биндинге или в нерациональном использовании каких-то функция языка. Мы, например, проводили синтетические тесты, на которых LuaJIT работает быстрее, чем Mono. При этом никто не мешает писать примерно такой вот неоптимальный код:

function myGame:onUpdate() local tex = Texture::new(name) self.background:setTexture(tex) end

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

Lua подходит только для маленьких проектов

Следующее возражение заключается в том, что Lua сделан для того, чтобы писать какие-то маленькие вещи и что-то большое на этом языке написать невозможно. С одной стороны это правда. Но у этого языка высокая модульность. И из множества маленьких блоков можно делать достаточно большие и сложные системы. А если вспомнить то, что было уже сказано о мультипарадигменности и об ООП, то окажется, что ООП подталкивает разработчика к тому, чтобы создавать маленькие модули, которые можно использовать при создании больших и сложных конструкций.

При этом зачастую на Lua какие-то маленькие модули пишутся быстро, а в игровой индустрии «быстрее» — значит «дешевле».

Другие аргументы против Lua

Критикуя Lua, говорят о том, что язык это древний, что он, что называется, «из коробки», не поддерживает ООП, что нумерация элементов в его таблицах начинается не с 0, как можно было бы ожидать от любого приличного языка, а с 1.

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

Итоги

Подведём итоги. Если ваша задача — с минимальными усилиями обзавестись встраиваемым языком — возьмите Lua. В то же время, если у вас есть время и ресурсы на разработку собственного языка или собственных биндингов — опять же — обратите внимание на Lua. Почему и в первом и во втором случаях мы рекомендуем Lua?

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

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

  • Блог компании Social Quantum
  • Программирование
  • Lua

Хочу всё знать. Язык Lua

Наш сегодняшний гость — настоящий боец скрытого фронта. Вы могли видеть его в играх (World of Warcraft, Angry Birds, X-Plane, S.T.A.L.K.E.R.) или продуктах компании Adobe (Lightroom), но даже не задумывались о его существовании. Между тем этому языку уже почти 25 лет и всё это время он незаметно делал нашу виртуальную жизнь чуть лучше.

Краткая справка

Lua бы придуман в 1993 году в Католическом университете Рио-де-Жанейро. Название переводится с португальского, как Луна, причем создатели убедительно просят не писать LUA, чтобы, не дай Бог, кто-нибудь не принял название за аббревиатуру. Является мультипарадигмальным скриптовым языком, использующим прототипную модель ООП.

Типизация здесь динамическая, а для реализации наследования используются метатаблицы, то есть это прекрасный инструмент для расширений возможностей вашего продукта. Причем из-за своей компактности он пригоден для использования практически на любой платформе. Посудите сами: tarball Lua 5.3.4 весит всего 296 килобайт (в “разжатом” виде — 1.1 мегабайт), интерпретатор (написанный на C) для Linux — от 182 до 246 килобайт, а стандартный набор библиотек — ещё 421 килобайт.

Узнай, какие ИТ — профессии
входят в ТОП-30 с доходом
от 210 000 ₽/мес
Павел Симонов
Исполнительный директор Geekbrains

Команда GeekBrains совместно с международными специалистами по развитию карьеры подготовили материалы, которые помогут вам начать путь к профессии мечты.

Подборка содержит только самые востребованные и высокооплачиваемые специальности и направления в IT-сфере. 86% наших учеников с помощью данных материалов определились с карьерной целью на ближайшее будущее!

Скачивайте и используйте уже сегодня:

Павел Симонов - исполнительный директор Geekbrains

Павел Симонов
Исполнительный директор Geekbrains

Топ-30 самых востребованных и высокооплачиваемых профессий 2023

Поможет разобраться в актуальной ситуации на рынке труда

Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка

Только проверенные нейросети с доступом из России и свободным использованием

ТОП-100 площадок для поиска работы от GeekBrains

Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽

Получить подборку бесплатно
Уже скачали 25504

Код

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

Начнем с традиционного:

Согласитесь, знакомо и не слишком информативно. Более интересный пример с точки зрения знакомства с Lua — вычисление факториала введенного числа:

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

print(«enter a number:»)
a = io.read(«*number») — read a number
print(fact(a))

Все предельно понятно. Кстати, в Lua поддерживается параллельное присваивание:

И в заключении довольно простой пример с использованием библиотек:

int main (void) char buff[256];
int error;
lua_State *L = lua_open(); /* opens Lua */
luaopen_base(L); /* opens the basic library */
luaopen_table(L); /* opens the table library */
luaopen_io(L); /* opens the I/O library */
luaopen_string(L); /* opens the string lib. */
&nbspluaopen_math(L); /* opens the math lib. */

while (fgets(buff, sizeof(buff), stdin) != NULL) error = luaL_loadbuffer(L, buff, strlen(buff), «line») ||
lua_pcall(L, 0, 0, 0);
if (error) fprintf(stderr, «%s», lua_tostring(L, -1));
lua_pop(L, 1); /* pop error message from the stack */
>
>

Для вас подарок! В свободном доступе до 14.01 —>
Скачайте ТОП-10
бесплатных нейросетей
для программирования
Помогут писать код быстрее на 25%
Чтобы получить подарок, заполните информацию в открывшемся окне

Преимущества и недостатки

Итак, чем же хорош Lua?

Во-первых, как уже было отмечено, своей компактностью, а вкупе с тем, что исходники написаны на С, вы получаете полное взаимодействие с одним из популярнейших языков на планете и широкий спектр доступных платформ.

Во-вторых, он быстрый. Если взглянуть на сравнительную характеристику с другими языками, то можно заметить, что хоть Lua и не укладывает на лопатки C или Python, но в некоторых тестах показывает отличные результаты.

В-третьих, он очень удобен для изучения даже не самыми опытными программистами. Наверняка даже те, кто просто знает английский язык, поняли минимум 80% описанного выше кода и без проблем смогут воспроизвести.

Четвертый аргумент — у вас не возникнет никаких проблем с поиском информации. У Lua есть много полезной информации непосредственно на официальном сайте. Кроме того, очень недурно развито сообщество на StackOverFlow и IRC-чате, а в США разработчики и создатели так и вовсе встречаются каждый год.

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

Впрочем, не существует языков без недостатков, но у Lua они носят локальный характер. Так, например, язык по умолчанию не поддерживает Unicode, но это исправляется с использованием специальной ICU библиотеки. Или ограниченные возможности обработки ошибок и исключений, хотя многие сочтут это за благо. Или необходимость ставить оператор return исключительно последним в блоке, но опять-таки для многих это естественное правило хорошего кода

Хотите стать веб-разработчиком? Тогда вам на наш курс обучения web-разработке!

Дарим скидку от 60%
на курсы от GeekBrains до 14 января
Уже через 9 месяцев сможете устроиться на работу с доходом от 150 000 рублей

Среды разработки

  • LDT (Lua Development Tools) для Eclipse — расширение для одной из наиболее популярных IDE;
  • ZeroBrane Studio — специализированная среда, написанная на Lua;
  • Decoda — не самая популярная кроссплатформенная IDE, но в качестве альтернативы подойдет;
  • SciTE — хороший редактор, полноценно поддерживающий Lua;
  • WoWUIDesigner — угадайте, для какой игры эта среда помогает обрабатывать скрипты, в том числе на Lua?

Lua Скриптовый язык программирования

Lua — скриптовый язык программирования, разработанный в подразделении Tecgraf (Computer Graphics Technology Group) Католического университета Рио-де-Жанейро (Бразилия). Интерпретатор языка является свободно распространяемым, с открытыми исходными текстами на языке Си.

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

Lua предназначен для пользователей, не являющихся профессиональными программистами, вследствие чего большое внимание уделено простоте дизайна и лёгкости обучения. Язык используется для создания тиражируемого программного обеспечения (например, на нём написан графический интерфейс пакета Adobe Lightroom) [1] .

2022: Исправление уязвимости, позволяющей удаленно выполнить код

Ботнет Muhstik атакует серверы Redis (сокр. от Remote Dictionary Server, быстрое хранилище данных типа «ключ‑значение» в памяти с открытым исходным кодом). Об этом стало известно 29 марта 2022 года.

Вредоносное ПО эксплуатирует уязвимость обхода песочницы в Lua (CVE-2022-0543).

Уязвимость получила 10 из 10 баллов по шкале оценивания опасности и позволяет удаленно выполнить код на системе с уязвимым ПО.

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

Согласно данным телеметрии Juniper Threat Labs, атаки с использованием данной уязвимости начались 11 марта 2022 года. Атаки заключаются в извлечении с удаленного сервера вредоносного shell-скрипта russia.sh, который затем извлекает и выполняет код ботнета с другого сервера.

Впервые задокументированный специалистами китайской ИБ-компании Netlab 360 ботнет Muhstik активный с марта 2018 года и используется для майнинга криптовалюты и осуществления DDoS-атак.

Вредонос способен распространяться подобно червю на Linux- и IoT-устройствах наподобие домашних маршрутизаторов GPON, DD-WRT и Tomato. За последние несколько лет он эксплуатировал следующие уязвимости:

  • CVE-2017-10271 (оценка CVSS 7,5 балла) – уязвимость проверки вводимых данных в компоненте Oracle WebLogic Server пакета программ Oracle Fusion Middleware;
  • CVE-2018-7600 (оценка CVSS 9,8 балла) – уязвимость удаленного выполнения кода в Drupal;
  • CVE-2019-2725 (оценка CVSS 9,8 балла) – уязвимость удаленного выполнения кода в Oracle WebLogic Server;
  • CVE-2021-26084 (оценка CVSS 9,8 балла) – уязвимость инъекции OGNL (Object-Graph Navigation Language) в Atlassian Confluence;
  • CVE-2021-44228 (оценка CVSS 10,0 балла) – уязвимость удаленного выполнения кода в Apache Log4j (Log4Shell).

В связи с эксплуатацией уязвимости CVE-2022-0543 в хакерских атаках пользователям настоятельно рекомендуется как можно скорее обновить свои серверы Redis до последней версии [2] .

Языки программирования

Примечания

  1. ↑Lua
  2. ↑Ботнет Muhstik атакует серверы Redis

Язык программирования Lua

Язык программирования Lua

В большом многообразии языков программирования отдельное место занимает Lua. Этот скриптовый язык разработки имеет свободно распространяемый интерпретатор. По своей идеологии, Lua больше всего похож на JavaScript. Однако в отличие от последнего, у Луа представлены более гибкие конструкции.

Немного истории

Разработчиком этого языка является подразделение Tecgraf из Бразилии. Появился Lua в 1993 году. Авторами являются Роберту Иерузалимски, Вальдемар Селиш и Луиш Энрике ди Фигейреду. Язык имеет открытый код, то есть каждый желающий может внести свою лепту в его развитие. Важной особенностью создания этого языка является то, что он появился в Бразилии, стране, которая ни до этого ни после особенно не отличалась в плане разработки.

Прародителями Lua являются два языка разработки – SOL и DEL. Они также разработаны Tecgraf в период с 1992 по 1993 гг. Причем заказчиком выступала известная компания Petrobras. На сегодняшний день последней версией языка является 5.4.0. Обновление вышло летом 2020 года.

Как видно, Луа, наряду со многими современными языками программирования, имеет длительную историю. При этом, проводятся регулярные обновления, что говорит о том, что Lua пользуется популярностью в определенных кругах и имеет довольно серьезное сообщество.

Особенности языка программирования Lua

Главная особенность Луа заключается в том, что он может использоваться как в качестве отдельного, так и встроенного скриптового языка. Уже в процессе создания разработчики поставили себе цель – сделать компактный и простой инструмент, который мог бы с легкостью работать в различных исполняющих средах и обеспечивать при этом должный уровень производительности.

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

Lua относится к языкам программирования ООП. Благодаря встроенным средствам параллельного программирования, разработчики могут создавать многопоточные приложения без обращения к внешним библиотекам или API. При этом, в языке эффективно реализованы возможности межъязыкового взаимодействия.

Где применяется язык Lua? Несмотря на достаточно широкое применение в промышленности (не будем забывать, что язык изначально разрабатывался для нужд нефтяной компании Petrobras), более активно Луа сегодня используется при разработке компьютерных игр.

Связано это с тем, что Lua позволяет довольно легко запрограммировать поведение так называемых NPC (от англ. Non-playable characters). Также, с помощью этого языка программируются и другие персонажи, поведение которых можно впоследствии быстро менять, не оказывая влияния на движок.

Наиболее известным игровым продуктом, в котором применяется язык Lua является World of Warcraft. Здесь язык использовался при написании интерфейса. Также, Lua активно использовался и при создании других известных игровых шедевров, таких как Цивилизация 5, Crysis, Sim City, Far Cry, Stalker.

Помимо игрового применения, Луа также подходит для написания ботов для Телеграм, например. Также, Википедия планирует использовать данный язык разработки для встраивания в MediaWiki.

Наконец, применяется Lua и в обсерваториях, которые занимаются исследованиями космоса. Язык также используется различными университетами. А в самой Бразилии его применяют повсеместно. То есть он стал чем-то вроде государственного языка программирования.

Преимущества и недостатки

Язык программирования Луа обладает следующими преимуществами:

  1. Lua обладает хорошей портируемостью. Например, можно без особых изменений перенести программу из Windows на Linux.
  2. Большое количество библиотек. Несмотря на то, что по этому параметру Lua проигрывает JavaScript, на официальном сайте языка можно найти все необходимые библиотеки для работы, которых более чем достаточно для выполнения различных задач.
  3. Возможность быстрого добавления новых библиотек, написанных на языке С.
  4. Простота синтаксисам и развертывания. Изучение языка не потребует много времени у тех, кто уже занимается программированием. Для новичков этот язык также будет просто в изучении.
  5. Приложения и программы, написанные на Луа потребляют меньше памяти.

Что касается недостатков, к ним можно отнести то, что язык является скриптовым. Конечно, его можно использовать и самостоятельно, однако чаще всего он применяется вместе с другими языками программирования, например С. Поэтому для полноценной работы потребуется знание еще одного языка разработки.

Критика Луа

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

Также критике подвергается и скорость этого языка. В среде программистов бытует мнение, что Луа намного медленнее своих «конкурентов». Но на самом деле, это миф. Дело в том, что скриптовый язык чаще всего работает с какой-то логикой. То есть здесь просто нечему замедлять процесс работы приложений.

Наконец, еще одним заблуждением является то, что Луа подходит исключительно для небольших проектов. Частично здесь есть рациональное зерно, однако Lua является модульным языком. То есть из различных маленьких блоков можно построить что-то большое и весомое.

Некоторые разработчики критикуют «древность» языка и отсутствие ООП в его базовой версии. Помимо этого, говорят о том, что нумерация элементов начинается не с 0, как это принято в большинстве других ЯП, а с 1. Но здесь, скорее, речь идет уже о личных предпочтениях и взгляде отдельных программистов.

Пример кода на Lua

Посмотрим, как написать простейшую программу с помощью языка программирования Луа на примере строки «Привет Мир». Сделать это на Lua достаточно просто:

print (“Привет мир!”)

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

Перспективы

Разработка игр – очень перспективное направление. Индустрия видео развлечений растет с каждым годом. Соответственно, эта ниша будет только набирать популярность. Но как дело обстоит с языком Lua? По версии индекса популярных языков программирования Tiobe, Луа занимает 30 место, уступая многим популярным инструментам разработки, таким как JS или Java.

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

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *