Встраиваемый язык с хорошей поддержкой обработки строк

Я создал инструмент, подобный Ned Batchelder:

Поиск .dll и .exe файлы в ПУТИ

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

5
задан Matt Sheppard 15 August 2009 в 03:33
поделиться

8 ответов

Я ни разу не пожалел об использовании Lua.

Его очень легко встроить в ваше приложение. Фактически, сейчас я обычно не пишу приложения C, я просто пишу библиотеки C и управляю ими из Lua.

Манипуляции с текстом - не лучшая его функция, но она определенно намного лучше, чем только C. А библиотека LPEG упрощает создание синтаксических анализаторов, ставя под сомнение любое регулярное выражение (но все же имеет пару синтаксисов, похожих на регулярные выражения, если вы предпочитаете их).

10
ответ дан 18 December 2019 в 06:12
поделиться

Lua стоит на голову выше других вариантов.

... лучшая строка поддержка манипуляций при простоте встраивания?

Lua разработан для встраивания в C; API понятен и прост в использовании; документация потрясающая.

Некоторые другие ответы порочили строковые возможности Lua. Я думаю они недооценивают Lua . Lua's string capabilities actually find a sweet spot between "just concatenation" and the full complexity of regular expressions. String formatting capability is very strong, and accumulating strings through "buffers" or tables is simple and efficient.

String scanning is, in my opinion, one of the best parts of the design. It doesn't have "or" patterns but otherwise gives you a large fraction of what you get from regular expressions, including a very powerful and elegant "capture" function. For example, I can convert a string to hex by capturing every single character and applying a function to it:

s:gsub('.', function(c) return string.format("%02x", string.byte(c)) end)

Or I can escape non-alphanumeric, non-space characters into octal:

s:gsub('[^%w%s]', function(c) return string.format([[\%03o]], string.byte(c)) end)

Some of the features on display here:

  • The escape character for string scanning is %, which is different from the escape character for string quoting, which is \. This decision is brilliant and should win an award by itself :-)

  • There are multiple mechanisms for quoting literal strings, including [[...]] in which no characters have to be escaped. If you want to generate or match strings with backslashes in them (like LaTeX for example), this is a godsend.

If you want the full power of a context-free parser, you can always use LPEG, a library written by one of Lua's designers.

Performance is pretty important (especially startup time)

Lua consistently wins performance awards. Startup is lightning fast: the whole system (including compiler, library, garbage collector, and runtime system) fits in 150KB. To avoid pause times, Lua provides incremental garbage collection. See also SO question Why is Lua faster than other scripting languages?

You can make startup even faster by precompiling your scripts, but I've never found it necessary to do this—and because compiled code (as opposed to source code) is not portable, precompilation usually creates more headache than it solves.

Needs easily be compiled on multiple platforms

Lua compiles using pure ANSI C and does not even require POSIX. I have a version running on my PalmOS PDA.

Needs to be a language which will still be around in 5 years time.

Lua has been around since 1993. Moreover, the two members of the team who provide the most support are tenured professors at PUC-Rio. Lua is their livelihood. Finally, the whole system is only 17,000 lines of code. If Rio fell off the map tomorrow, anybody with a good undergraduate compiler course could pick the system up and maintain it. There would be plenty of volunteers.

I've looked a little at Python and Lua but don't really know enough about them

See SO question Which game scripting language is better to use: Lua or Python?.

5
ответ дан 18 December 2019 в 06:12
поделиться

Мы рассмотрели Python и Lua для написания сценариев для продукта .NET. Целью было предоставить конечным пользователям возможность создания сценариев. Решение было принято в пользу Python, потому что сильные мира сего предпочли все, что было поддержано Microsoft, всему остальному. Мой выбор был в пользу Lua.

3
ответ дан 18 December 2019 в 06:12
поделиться

Есть хороший обзор относительных достоинств встраиваемых API-интерфейсов различных сценариев. languages:

H. Muhammad and R. Ierusalimschy. C APIs in extension
and extensible languages. Journal of Universal Computer
Science, 13(6):839–853, 2007.

Глядя на сочетание отличных манипуляций со строками и отличного API для встраивания, я бы предложил по порядку:

  • Ruby: Отличная поддержка строк, включая поддержку синтаксиса для регулярных выражений. Хорошо спроектированный встроенный API, очень простой в использовании.
  • Lua: Я не уверен, что это за поддержка строк, но предполагается, что это отличный язык для встраивания.
  • Python: Менее легко встраивать, немного сложнее использовать строковые возможности, чем Ruby. Но в нем есть Pyrex, так что это может быть более простой способ его встраивания.
  • PHP: Гадкий API, гнусный язык. Встраиваемый SAPI - действительно гражданин второго сорта, но он работает. Есть много функций манипулирования строками. Тем не менее, я бы не рекомендовал его.
  • Perl: Неприятно встраивать (насколько я слышал), поддержка строк могла бы быть лучше.

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

Есть много функций манипулирования строками. Тем не менее, я бы не рекомендовал его.
  • Perl: Неприятно встраивать (насколько я слышал), поддержка строк могла бы быть лучше.
  • Я не могу комментировать TCL, но слышал, что он разработан для встраивание.

    Есть много функций обработки строк. Тем не менее, я бы не рекомендовал его.
  • Perl: Неприятно встраивать (насколько я слышал), поддержка строк могла бы быть лучше.
  • Я не могу комментировать TCL, но слышал, что он разработан для встраивание.

    3
    ответ дан 18 December 2019 в 06:12
    поделиться

    Python совсем не тяжеловес! Его довольно просто встроить (вот официальное руководство , но вы также можете найти множество руководств), очень мощный, отлично подходит для обработки строк, а также приятный и простой язык для использования в целом. Он имеет огромное сообщество пользователей и базу поддержки, что является плюсом.

    Python также был встроен в большое количество реальных приложений. Один классный пример, который я могу сразу придумать, - это игра Civilization IV, большая часть которой работает на скриптах Python поверх C ++ API.

    1
    ответ дан 18 December 2019 в 06:12
    поделиться

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

    Одна из вещей, которая отличает tcl от других языков программирования, состоит в том, что все является строкой.

    ваша ссылка, вот документация tcl по строковым функциям .

    tcl может быть проще встраивать, чем perl, но я должен согласиться с рассуждениями @Matthew Scharley. Кроме того, tcl не совсем известен своей производительностью, но, возможно, это изменилось в последние годы.

    В любом случае, вот ссылка на tcl wiki по встраиванию tcl в приложения C и соответствующая цитата из page:

    "Как мне встроить интерпретатор Tcl в мое существующее приложение C (или C ++)?" это очень часто задаваемый вопрос. Это просто, конечно, намного проще, чем делать то же самое с Perl или Python в целом; более того, такая «встраиваемость» была одной из первоначальных целей Tcl, и многие, многие проекты делают это. Полного обсуждения этой темы нет, но мы можем дать обзор здесь. (RWT, 14 октября 2002 г.)


    Другой альтернативой может быть использование Lua, как вы упомянули, при расширении его другой строковой библиотекой C по вашему выбору (Google предлагает The Better String Library , например).

    После того, как вы скомпилировали Lua в свое приложение, вы можете «расширить» функции C до интерпретатора Lua . Или, может быть, встроенные строковые функции вам подходят.

    У вас, безусловно, есть несколько вариантов.

    конечно, намного проще, чем делать то же самое с Perl или Python в целом; более того, такая «встраиваемость» была одной из первоначальных целей Tcl, и многие, многие проекты делают это. Полного обсуждения этой темы нет, но мы можем дать обзор здесь. (RWT, 14 октября 2002 г.)


    Другой альтернативой может быть использование Lua, как вы упомянули, при расширении его другой строковой библиотекой C по вашему выбору (Google предлагает The Better String Library , например).

    После того, как вы скомпилировали Lua в свое приложение, вы можете «расширить» функции C до интерпретатора Lua . Или, может быть, встроенные строковые функции вам подходят.

    У вас, безусловно, есть несколько вариантов.

    конечно, намного проще, чем делать то же самое с Perl или Python в целом; более того, такая «встраиваемость» была одной из первоначальных целей Tcl, и многие, многие проекты делают это. Полного обсуждения этой темы нет, но мы можем дать обзор здесь. (RWT, 14 октября 2002 г.)


    Другой альтернативой может быть использование Lua, как вы упомянули, при расширении его другой строковой библиотекой C по вашему выбору (Google предлагает The Better String Library , например).

    После того, как вы скомпилировали Lua в свое приложение, вы можете «расширить» функции C до интерпретатора Lua . Или, может быть, встроенные строковые функции вам подходят.

    У вас, безусловно, есть несколько вариантов.

    более того, такая «встраиваемость» была одной из первоначальных целей Tcl, и многие, многие проекты делают это. Полного обсуждения этой темы нет, но мы можем дать обзор здесь. (RWT, 14 октября 2002 г.)


    Другой альтернативой может быть использование Lua, как вы упомянули, при расширении его другой строковой библиотекой C по вашему выбору (Google предлагает The Better String Library , например).

    После того, как вы скомпилировали Lua в свое приложение, вы можете «расширить» функции C до интерпретатора Lua . Или, может быть, встроенные строковые функции вам подходят.

    У вас, безусловно, есть несколько вариантов.

    более того, такая «встраиваемость» была одной из первоначальных целей Tcl, и многие, многие проекты делают это. Полного обсуждения этой темы нет, но мы можем дать обзор здесь. (RWT, 14 октября 2002 г.)


    Другой альтернативой может быть использование Lua, как вы упомянули, при расширении его другой строковой библиотекой C по вашему выбору (Google предлагает The Better String Library , например).

    После того, как вы скомпилировали Lua в свое приложение, вы можете «расширить» функции C до интерпретатора Lua . Или, может быть, встроенные строковые функции вам подходят.

    У вас, безусловно, есть несколько вариантов.

    Полного обсуждения этой темы нет, но мы можем дать обзор здесь. (RWT, 14 октября 2002 г.)


    Другой альтернативой может быть использование Lua, как вы упомянули, при расширении его другой строковой библиотекой C по вашему выбору (Google предлагает The Better String Library , например).

    После того, как вы скомпилировали Lua в свое приложение, вы можете «расширить» функции C до интерпретатора Lua . Или, может быть, встроенные строковые функции вам подходят.

    У вас, безусловно, есть несколько вариантов.

    Полного обсуждения этой темы нет, но мы можем дать обзор здесь. (RWT, 14 октября 2002 г.)


    Другой альтернативой может быть использование Lua, как вы упомянули, при расширении его другой строковой библиотекой C по вашему выбору (Google предлагает The Better String Library , например).

    После того, как вы скомпилировали Lua в свое приложение, вы можете «расширить» функции C до интерпретатора Lua . Или, может быть, встроенные строковые функции вам подходят.

    У вас, безусловно, есть несколько вариантов.

    например).

    После того, как вы скомпилировали Lua в свое приложение, вы можете «расширить» функции C до интерпретатора Lua . Или, может быть, встроенные строковые функции вам подходят.

    У вас, безусловно, есть несколько вариантов.

    например).

    После того, как вы скомпилировали Lua в свое приложение, вы можете «расширить» функции C до интерпретатора Lua . Или, может быть, встроенные строковые функции вам подходят.

    У вас, безусловно, есть несколько вариантов.

    3
    ответ дан 18 December 2019 в 06:12
    поделиться

    Некоторые люди могут не согласиться, но Сара Гоулман опубликовала отличную книгу о расширении и встраивании PHP. Этот язык становится одним из наиболее широко используемых ... :)

    PHP Поддержка строк не так хороша, как Perl, но очень удобна.

    Я упоминал, что он написан на C?

    1
    ответ дан 18 December 2019 в 06:12
    поделиться

    Perl. Его (исходная) причина существования - манипуляции со строками.

    0
    ответ дан 18 December 2019 в 06:12
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: