Lua как язык сценариев общего назначения? - PullRequest
35 голосов
/ 30 октября 2008

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

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

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

  • Переименование группы файлов
  • Загрузка некоторых файлов из Интернета
  • Webscraping

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

Ответы [ 11 ]

36 голосов
/ 31 октября 2008

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

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

  • Переименование группы файлов
  • Загрузка некоторых файлов из Интернета
  • Webscraping

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

Например:

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

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

С другой стороны, если вы выбираете второе, вы тратите время на бег программа, но вы можете делать другие вещи, когда программа Бег. Как насчет игры World of Warcraft, убивать монстров с твоим колдуном? Съешь мой Д.О.Т ! : P

Вот и все! Хотя Lua не так сложна в написании, все в Lua спроектировано так, чтобы быть эффективным. Более того, есть немного модулей для Lua, но есть очень много модулей для Python. Вы не хотите портировать библиотеку C для Lua только для запуска программы, не так ли? Вместо этого выберите Python и используйте этот модуль для легкого решения вашей задачи.

К вашему сведению: На самом деле я пытался использовать Луа, чтобы заняться веб-шоппингом, но, наконец, я понял, что мне не нужно заботиться о языковой эффективности. Узким местом веб-скрапинга является не на исполнении языка . Узкое место включено сетевой ввод / вывод, разбор HTML и многозадачность. Все что мне нужно сделать это убедиться, что программа работает и найти узкое место. Наконец, я выбрал Python, а не Lua. Есть так много отличных модулей Python; У меня нет причин строить владеть.

Судя по моему опыту с веб-скрепингом, я выбрал Витая для сетевого ввода-вывода и lxml для разбора html в качестве бэкэнда моей веб-программы. Я написал статью для введения в эту технологию.

Лучший выбор для получения данных с веб-сайтов: Python + Twisted + lxml

Надеюсь, это полезно.

23 голосов
/ 31 октября 2008

Lua имеет меньше библиотек, чем Python. Но обязательно взгляните на LuaForge . У него много интересных библиотек, таких как LuaCURL , wxLua или getopt .

Затем посетите LuaRocks , систему управления пакетами для Lua. С его помощью вы можете искать и устанавливать наиболее зрелые модули Lua с зависимостями. По ощущениям RubyGems или aptitude .

На сайте lua-users.org также есть много интересных ресурсов, таких как учебные пособия или Lua Wiki .

Что мне нравится в Lua, так это не скорость, а минимальный базовый язык, гибкость и расширяемость.

Тем не менее, я бы, вероятно, использовал Python для задач, о которых вы упомянули, потому что более широкое сообщество делает такие вещи в Python.

12 голосов
/ 30 октября 2008

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

10 голосов
/ 30 октября 2008

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

9 голосов
/ 28 ноября 2008

Это социологический вопрос, а не вопрос программирования.

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

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

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

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

6 голосов
/ 30 октября 2008

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

5 голосов
/ 20 февраля 2009

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

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

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

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

4 голосов
/ 08 октября 2009

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

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

4 голосов
/ 16 декабря 2008

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

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

4 голосов
/ 31 октября 2008

Я думаю, что ответ о том, что это «маркетинговая» вещь, вероятно, правильный, наряду с отсутствием большого набора библиотек на выбор. Я хотел бы указать на еще один случай этого: Ruby. Ruby должен быть языком сценариев общего назначения. Проблема в том, что, поскольку Ruby on Rails стал очень популярным, становится все труднее найти что-то, что не имеет отношения к Rails. Боюсь, что Луа тоже пострадает от этого, будучи популярным из-за нескольких важных вещей, использующих его, но никогда не сможет избавиться от этой стигмы.

...