Lua как язык сценариев общего назначения?

Когда я вижу Lua, единственное, что я когда-либо читал, это «отлично подходит для встраивания», «быстрый», «легкий» и чаще всего: «World of Warcraft» или, короче, «WoW».

Почему это ограничивается встраиванием всего этого в другое приложение? Почему бы не писать сценарии общего назначения, как вы это делаете с Python или Perl?

Lua, кажется, преуспевает в таких аспектах, как скорость и использование памяти (самый быстрый язык сценариев afaik), так почему же я никогда не видел, чтобы Lua использовался как «язык сценариев рабочего стола» для автоматизации задач? Например:

  • Переименование кучи файлов
  • Загрузите несколько файлов из Интернета
  • Веб-сканирование

Это отсутствие стандартной библиотеки?

Пожалуйста, напишите заголовки вопросов, которые соответствуют содержанию вашего вопроса. Если интуитивно понятный ответ на заголовок вашего вопроса - «Да», но интуитивно понятный ответ на текст вопроса - «Ну, никто никогда не реализовал хороший автономный исполнитель сценария для LUA», то заголовок вопроса не совсем удачный. Это как иметь титул «Коровы-боги?» а затем тело вопроса типа «Когда я пью молоко, меня рвет, почему?».

Lasse V. Karlsen 19.12.2009 03:30
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
36
1
11 888
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

Ответ принят как подходящий

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

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

Charles Stewart 20.01.2010 13:49

Вероятно, это потому, что Lua был разработан как язык сценариев и расширений. В официальный сайт он описан как мощный, быстрый, легкий, встраиваемый язык сценариев. Ничто не мешает вам писать для него программы общего назначения (если я правильно помню, он поставляется с интерпретатором и компилятором), но разработчики языка планировали использовать его в основном как встроенный язык (следовательно, он легкий и все такое)

Однозначно отсутствие стандартных библиотек. Он также менее известен, чем Python, Perl или Ruby.

Lua - классный язык, легкий и очень быстрый!

Но суть в том, что Так ли важна производительность для тех, кто задачи вы упомянули?

  • Переименование кучи файлов
  • Загрузите несколько файлов из Интернета
  • Веб-сканирование

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

Например:

  1. Стоимость 3 часа для написания программы C / C++, для обработки данных один раз, программа займет 1 час для запуска.
  2. Стоит 30 минут, чтобы написать программу Python для однократной обработки данных, выполнение программы займет 10 часов.

Если вы выберете первый, вы сэкономите время на запуск программы, но вы потратите свое время на разработку программы.

С другой стороны, если вы выберете второй, вы потратите время на запуск программу, но вы можете делать другие вещи, когда программа Бег. Как насчет играть в 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. 15.10.2009 22:09

@TM, согласился. И, как правило, вы можете использовать некоторые из сэкономленных 2,5 часа, чтобы использовать лучший алгоритм и в конечном итоге работать быстрее, чем C, не говоря уже о большей уверенности в том, что он работает правильно и более удобен в обслуживании.

Peter Hansen 19.12.2009 03:50

Я думаю, что ответ о том, что это «маркетинговая» вещь, вероятно, правильный, наряду с отсутствием большого набора библиотек на выбор. Я хотел бы указать на другой случай: 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 лучше работал с оболочкой. Сюда входили такие уловки, как

  • Цитирование строки, чтобы оболочка воспринимала ее как одно слово
  • Написание функции для захвата вывода команды как в оболочке $ (command)
  • Написание функции для обхода файловой системы с использованием библиотеки Lua posix и расширения шаблонов подстановки оболочки

(Для тех, кому может быть интересно, я оставил код в моем Выпадающий ящик Lua, который также содержит некоторые другие вещи. Интересный материал, вероятно, находится в osutil в os.quote, os.runf, os.capture и, возможно, в os.execve. Подстановка в posixutil.lua. Они оба используют Библиотека Lua Posix Луиса Энрике де Фигерайдо.)

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

У вас есть где-нибудь ссылка на эти несколько сотен строк кода?

RyanE 17.12.2009 01:37

Отсутствие стандартной библиотеки. Период. Даже для перечисления всех файлов в каталоге требуется нестандартный модуль.

Для этого есть веские причины (соблюдение строгой переносимости ANSI, отсутствие необходимости в POSIX), но в результате для общего программирования я предпочитаю Python.

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

Я знаю, что различные дистрибутивы Linux включают Lua и некоторые модули сейчас, а в будущем и другие.

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

Я использую Lua и как язык сценариев, и как «основной» цикл моего типичного приложения, поддерживаемый одной или несколькими библиотеками DLL, содержащими код, который лучше реализован на C, или как оболочку существующих библиотек или функций API, которые необходимы для конкретного проекта. Используемый с инструментарием GUI, таким как IUP или wxLua (привязка Lua для wxWindows), Lua делает написание небольших и средних приложений с графическим интерфейсом довольно приятным.

Какой набор инструментов с графическим интерфейсом вы предпочитаете, IUP или wxLua?

Jimmy 29.06.2011 10:50

@ Джимми, лично я использовал IUP для нескольких небольших проектов, и мне это очень понравилось. Его самая сильная сторона - это также и его слабость: ему нравится создавать собственную компоновку элементов управления с помощью ящиков и склеенной модели, поэтому действительно легко указать диалоговое окно, полное элементов управления, но трудно сделать его макет идеально подходящим для других диалогов с помощью различное сочетание элементов управления. Я пробовал демоверсии wxLua, и это явно качественный продукт, но у меня не было личной причины переходить на него.

RBerteig 30.06.2011 01:10

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

Lua используется в LuaTeX, расширении TeX, в качестве встроенного языка и благодаря этому быстро завоевал популярность среди разработчиков TeX. Он используется в качестве языка сценариев для некоторых утилит в дистрибутиве TeX Live, хотя бы потому, что теперь есть двоичный файл luatex, доступный на всех платформах, который также можно использовать в качестве интерпретатора Lua (с добавлением некоторых важных модулей - slnunicode, luafilesystem и т. д.). Это очень важно для установок Windows, которые раньше полагались на дополнительные инструменты сценариев Unix (ActivePerl и т.д.). В настоящее время макроязык ConTeXt широко использует сценарии Lua.

По общему признанию, это очень особенная область :-) Но совершенно не связанная с играми!

Другие вопросы по теме