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

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

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

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

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

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

11 ответов

Решение

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

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

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

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

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

Например:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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