Когда я вижу Lua, единственное, что я когда-либо читал, это «отлично подходит для встраивания», «быстрый», «легкий» и чаще всего: «World of Warcraft» или, короче, «WoW».
Почему это ограничивается встраиванием всего этого в другое приложение? Почему бы не писать сценарии общего назначения, как вы это делаете с Python или Perl?
Lua, кажется, преуспевает в таких аспектах, как скорость и использование памяти (самый быстрый язык сценариев afaik), так почему же я никогда не видел, чтобы Lua использовался как «язык сценариев рабочего стола» для автоматизации задач? Например:
Это отсутствие стандартной библиотеки?






Тот факт, что он «продается» (в некотором общем смысле) как язык специального назначения для встроенных скриптовых машин, не означает, что он ограничивается этим. Фактически, WoW, вероятно, с таким же успехом мог бы выбрать Python в качестве своего встроенного языка сценариев.
Я не думаю, что Python был бы таким хорошим выбором. Разница между Lua и Python для встраивания заключается в том, что семантика Lua предназначена для минимизации проблем при работе с другим кодом, тогда как Python обычно предполагает, что это контроль.
Вероятно, это потому, что Lua был разработан как язык сценариев и расширений. В официальный сайт он описан как мощный, быстрый, легкий, встраиваемый язык сценариев. Ничто не мешает вам писать для него программы общего назначения (если я правильно помню, он поставляется с интерпретатором и компилятором), но разработчики языка планировали использовать его в основном как встроенный язык (следовательно, он легкий и все такое)
Однозначно отсутствие стандартных библиотек. Он также менее известен, чем Python, Perl или Ruby.
Lua - классный язык, легкий и очень быстрый!
Но суть в том, что Так ли важна производительность для тех, кто задачи вы упомянули?
Вы пишете эти программы один раз и, может быть, один раз запускаете их. Почему вы так заботитесь о производительности для программы с однократным запуском?
Например:
Если вы выберете первый, вы сэкономите время на запуск программы, но вы потратите свое время на разработку программы.
С другой стороны, если вы выберете второй, вы потратите время на запуск программу, но вы можете делать другие вещи, когда программа Бег. Как насчет играть в World of Warcraft, убивать монстров с твоим чернокнижником? Ешь мой D.O.T! :П
Вот и все! Хотя Lua не так уж и сложно написать, все в Lua разработано так, чтобы быть эффективным. И более того, для Lua есть небольшие модули, но очень много модулей для Python. Вы же не хотите переносить библиотеку C для Lua только для однократной программы, не так ли? Вместо этого лучше выбрать Python и использовать этот модуль для легкого решения вашей задачи.
К вашему сведению: На самом деле, я пытался использовать Lua для веб-сканирования, но в конце концов я понял, что мне не нужно так сильно заботиться о языковых способностях. Узкое место веб-скребка - не на исполнении языка. Узкое место есть сетевой ввод-вывод, парсинг HTML и многозадачность. Все что мне нужно сделать Убедитесь, что программа работает, и найдите узкое место. Наконец, я выбрал Python, а не Lua. Есть так множество отличных модулей Python; У меня нет причин строить свои своя.
Исходя из моего опыта работы с веб-скрэпингом, я выбрал Twisted для сетевого ввода-вывода и lxml для разбора html в качестве бэкэнда моей программы для просмотра веб-страниц. Я написал статью для введения в эту технологию.
Лучший выбор для получения данных с веб-сайтов: Python + Twisted + lxml
Надеюсь, это будет полезно.
Хороший ответ, хотя я пытаюсь придумать, какую сумасшедшую схему одноразового использования вы могли бы придумать, которая будет работать в 10 раз медленнее на Python, чем на C ... большинство этих одноразовых сценариев, как правило, ограничены диском в любом случае.
@TM, согласился. И, как правило, вы можете использовать некоторые из сэкономленных 2,5 часа, чтобы использовать лучший алгоритм и в конечном итоге работать быстрее, чем C, не говоря уже о большей уверенности в том, что он работает правильно и более удобен в обслуживании.
Я думаю, что ответ о том, что это «маркетинговая» вещь, вероятно, правильный, наряду с отсутствием большого набора библиотек на выбор. Я хотел бы указать на другой случай: Ruby. Ruby задуман как язык сценариев общего назначения. Проблема в том, что с тех пор, как Ruby on Rails стал настолько популярным, становится трудно найти что-то, не связанное с Rails. Боюсь, что Lua тоже пострадает от этого, будучи популярным из-за нескольких важных вещей, которые его используют, но никогда не сможет освободиться от этой стигмы.
У Lua меньше библиотек, чем у Python. Но обязательно взгляните на LuaForge. В нем много интересных библиотек, таких как LuaCURL, wxLua или Getopt.
Затем посетите LuaRocks, систему управления пакетами для Lua. С его помощью вы можете искать и устанавливать наиболее зрелые модули Lua с зависимостями. Похоже на RubyGems или способность.
На сайте lua-users.org также есть много интересных ресурсов, таких как учебные пособия или Lua Вики.
Что мне нравится в Lua, так это не его скорость, а его минимальный базовый язык, гибкость и расширяемость.
Тем не менее, я бы, вероятно, использовал Python для задач, о которых вы упомянули, потому что более широкое сообщество делает такие вещи на Python.
Это социологический вопрос, а не вопрос программирования.
Я использую Lua почти исключительно для сценариев общего назначения. Но мне пришлось написать несколько сотен строк кода, чтобы Lua лучше работал с оболочкой. Сюда входили такие уловки, как
(Для тех, кому может быть интересно, я оставил код в моем Выпадающий ящик Lua, который также содержит некоторые другие вещи. Интересный материал, вероятно, находится в osutil в os.quote, os.runf, os.capture и, возможно, в os.execve. Подстановка в posixutil.lua. Они оба используют Библиотека Lua Posix Луиса Энрике де Фигерайдо.)
Для меня дополнительные усилия того стоят, потому что я могу иметь дело с простым синтаксисом и отличными структурами данных. Для других может быть предпочтительнее более прямое соединение с оболочкой.
У вас есть где-нибудь ссылка на эти несколько сотен строк кода?
Отсутствие стандартной библиотеки. Период. Даже для перечисления всех файлов в каталоге требуется нестандартный модуль.
Для этого есть веские причины (соблюдение строгой переносимости ANSI, отсутствие необходимости в POSIX), но в результате для общего программирования я предпочитаю Python.
Недавно была предпринята попытка создать установку с включенными батареями для Lua в Windows. Результат можно найти в проекте Lua для Windows на LuaForge. Он включает интерпретатор и большой набор дополнительных модулей, позволяющих писать и использовать полезные сценарии и приложения прямо из коробки.
Я знаю, что различные дистрибутивы Linux включают Lua и некоторые модули сейчас, а в будущем и другие.
В списке рассылки также обсуждается пара предлагаемых библиотек модулей, но сообщество еще не выбрало одну в качестве «официального» механизма.
Я использую Lua и как язык сценариев, и как «основной» цикл моего типичного приложения, поддерживаемый одной или несколькими библиотеками DLL, содержащими код, который лучше реализован на C, или как оболочку существующих библиотек или функций API, которые необходимы для конкретного проекта. Используемый с инструментарием GUI, таким как IUP или wxLua (привязка Lua для wxWindows), Lua делает написание небольших и средних приложений с графическим интерфейсом довольно приятным.
Какой набор инструментов с графическим интерфейсом вы предпочитаете, IUP или wxLua?
@ Джимми, лично я использовал IUP для нескольких небольших проектов, и мне это очень понравилось. Его самая сильная сторона - это также и его слабость: ему нравится создавать собственную компоновку элементов управления с помощью ящиков и склеенной модели, поэтому действительно легко указать диалоговое окно, полное элементов управления, но трудно сделать его макет идеально подходящим для других диалогов с помощью различное сочетание элементов управления. Я пробовал демоверсии wxLua, и это явно качественный продукт, но у меня не было личной причины переходить на него.
Чтобы Lua было легко встраивать, он должен иметь мало зависимостей и быть маленьким. Это делает его плохо подходящим в качестве языка сценариев общего назначения. Потому что для его использования в качестве языка сценариев общего назначения потребуется множество стандартных библиотек. Но если бы в Lua было много стандартных библиотек, было бы сложнее встроить их (из-за зависимостей и занимаемой памяти).
Lua используется в LuaTeX, расширении TeX, в качестве встроенного языка и благодаря этому быстро завоевал популярность среди разработчиков TeX. Он используется в качестве языка сценариев для некоторых утилит в дистрибутиве TeX Live, хотя бы потому, что теперь есть двоичный файл luatex, доступный на всех платформах, который также можно использовать в качестве интерпретатора Lua (с добавлением некоторых важных модулей - slnunicode, luafilesystem и т. д.). Это очень важно для установок Windows, которые раньше полагались на дополнительные инструменты сценариев Unix (ActivePerl и т.д.). В настоящее время макроязык ConTeXt широко использует сценарии Lua.
По общему признанию, это очень особенная область :-) Но совершенно не связанная с играми!
Пожалуйста, напишите заголовки вопросов, которые соответствуют содержанию вашего вопроса. Если интуитивно понятный ответ на заголовок вашего вопроса - «Да», но интуитивно понятный ответ на текст вопроса - «Ну, никто никогда не реализовал хороший автономный исполнитель сценария для LUA», то заголовок вопроса не совсем удачный. Это как иметь титул «Коровы-боги?» а затем тело вопроса типа «Когда я пью молоко, меня рвет, почему?».