Почему Python, а не Lua? [закрыто]

45

Почему Python получил поддержку Google и стал настолько популярным, а Lua - нет?

Вы знаете, почему Луа остался на заднем плане?

BenjaminB
источник
3
Луа любит притворяться, что массивы и словари - это одно и то же, и у него есть получатель длины, который может не только возвращать неправильные результаты, но и недетерминированные результаты. Я не знаю, каковы причины Гугла, но этого достаточно, чтобы мне это не нравилось.
Steve314
4
Для меня Python проще в написании кода, более приятным и имеет больше возможностей. Несколько примеров из головы: генераторы приходят как первоклассный гражданин в Python ( yield), а Lua требует более громоздкой настройки. Индексирование списка Python [::]- огромный плюс. Python имеет законные классы и наследование. Lua быстрее, да, но мне действительно нравится писать код Go для использования в Python, когда важна скорость.
Фрэнк Брайс
Я люблю LuaJIT, но большая часть моей любви к нему - это простота встраивания, скорость и малюсенький след. Если бы мне пришлось программировать что-то целый день, я мог бы больше склоняться к Python.
@FrankBryce ты получил это задом наперед. Генераторы Python являются подмножеством сопрограмм Lua. См. Inf.puc-rio.br/~roberto/docs/MCC15-04.pdf
capr

Ответы:

37

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

Из-за цели сохранить Lua небольшим, существует только очень маленькая стандартная библиотека, которая имеет только функциональные возможности.

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

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

Не пойми меня неправильно. Я люблю Луа по тем же причинам, которые я только что перечислил.

Сильванаар
источник
54

Все просто: у Lua больше «нишевых» целей, чем у Python .

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

Lua нацелена на то, чтобы быть встроенным языком сценариев. Это первоначальная цель, даже если в настоящее время она используется в других контекстах, таких как системы сборки; должен быть встроен в программное обеспечение и обеспечивать простую реализацию функций и структур сценариев, специфичных для предметной области. Он настолько минималистичен, что его даже можно использовать на действительно ограниченном оборудовании (я использовал Lua на NintendoDS), он легкий, простой в использовании, FAST, и это такой минималистский язык, но считается расширенным, что в нем много диалектов (импортирующих такие парадигмы, как объект-ориентация) доступны. Он настолько переносим (ANSI C), что вы можете использовать его на любом встроенном оборудовании с достаточным объемом памяти для современного встроенного программного обеспечения (если я хорошо помню, по умолчанию lua vm составляет около 400ko и почти никогда не будет расти, если вы не будете создавать циклы при создании объектов). ...).

Итак, Lua изначально используется в контексте, где вам нужно встроить язык сценариев для вашего приложения .

Python используется для ... почти всего, что не требует более нишевого языка (вы можете создавать довольно производительные игры, используя Python, но некоторые игры с высокой производительностью действительно требуют избегать такой системы).

Просто Python используется в большем количестве контекстов, чем Lua. Насколько я знаю, кроме Android (который обеспечивает поддержку Java и родного языка), Google не является компанией-разработчиком встроенного программного обеспечения, поэтому им не нужен Lua везде, в то время как Python полезен для всего, что они делают (веб, система сборки , связь, сеть и сеть).

Python используется во многих играх и для встроенных скриптов, но он тяжелый и медленнее, чем Lua. Синтаксис Python делает его более подходящим для больших игр, которые в своей игровой структуре во многом полагаются на скриптовую информацию (не уверен, что я в этом разбираюсь, но просто думаю, что если вам нужен «действительно полный язык» для скриптинга, встраивание Python может быть хорошая идея, если производительность вам подходит). Python не был создан для встраивания, так что это нормально. Эквивалентом Python, предназначенным для встраивания в C ++, является Falcon.

Для экстремального сравнения некоторые языки, предназначенные для встраивания и имеющие более полный синтаксис, чем минималистский Lua, и конкурирующие по производительности: ChaiScript, AngelScript, Io ...

Кстати, я видел, как новые системы сборки, такие как PreMake или Bam, используют Lua в качестве языка файлов сборки. Идея заключается в том, что он легкий и хорошо известен разработчикам игр (сборка систем при разработке игр является серьезной проблемой). Так что, может быть, это еще одна область, где Lua может быть оценена более высоко. Это, конечно, более удобный, чем синтаксис CMake ....

Klaim
источник
4
Я думаю, что цель Lua как встроенного языка, вероятно, является основным вкладчиком. Но даже несмотря на это, я полагаю, что «популярность» языка связана не столько с фактическим дизайном или возможностями самого языка, сколько с вопросом «правильного времени, правильного места» (см., Например, PHP).
Дин Хардинг
Ну, я думаю, что язык, нацеленный на определенную цель, естественно, привлекает определенных пользователей, делая его аудиторию более сдержанной, чем любой язык общего назначения. Наличие меньшей аудитории, чем у языков общего назначения, напрямую влияет на количество людей, которые когда-либо будут об этом говорить. Помимо этого, конкретные цели означают конкретные особенности. Поэтому это не хорошо для каждой ситуации. Вот, например, один только lua - не очень хороший язык графического программирования. Это требует некоторых дополнений, чтобы быть действительно полезным.
Klaim
Тем не менее, я полностью согласен: если бы php не использовался для такой широко используемой области, как разработка веб-сайтов, он не был бы повсюду.
Klaim
Lua в основном используется как встроенный язык, но это язык программирования общего назначения, например, вы можете сделать CGI-скрипт с помощью mod_lua. Я мог бы изменить свой вопрос на то, почему Луа остался встроенным языком?
BenjaminB
Потому что это происхождение. Вы можете использовать его как язык общего назначения, да, так же как вы можете использовать php и для общего назначения. Вы также можете использовать Perl, чтобы сделать то же самое. Но их происхождение делает их ориентации. Опять же, их первоначальное назначение делает их менее полезными, чем другие языки для языков общего назначения. У Lua нет некоторого языка функций, чтобы его можно было легко использовать с системой графического интерфейса для примеров, таких как ориентация объекта (которую можно легко добавить, но она не является родной). Убедитесь, что вы видите разницу между языком, изначально созданным для конкретной цели, и общим языком. Все они имеют ограничения в любом случае.
Klaim
4

Вы можете делать все с Lua, он создан как язык сценариев для расширения программ? Да, но это далеко не ограничено, есть много библиотек для Lua, и с правильными инструментами (FFI или tolua LuaJIT) вы даже можете использовать библиотеку C / C ++. Причина, по которой Python более широко используется, на мой взгляд, заключается в том, что во многих колледжах и школах Python используется в качестве первых языков, так как есть больше людей, которые знают Python, чем Lua, и гораздо проще найти хорошую библиотеку для Python. чем для Lua, потому что язык более зрелый. Кроме того, я немного знаю о Python, но насколько я знаю, легко скрыть ваш код от конечного пользователя, что в Lua не так просто, я прав?

Gustavo
источник