Python против Lua для встроенного скриптинга / движка обработки текста - PullRequest
15 голосов
/ 23 сентября 2010

Для проекта, над которым я сейчас работаю, я ищу встраивание механизма сценариев в мой код C ++, чтобы обеспечить некоторую расширяемость. Приложение потребует значительного объема обработки текста и использования регулярных выражений в этих сценариях.

Я знаю, что Lua - это вообще индустрия, когда дело доходит до встроенных скриптов, но я также знаю, что она не поддерживает регулярные выражения (по крайней мере, из коробки). Это заставляет меня склоняться к python для встраивания моего языка, так как он, кажется, имеет лучшую поддержку за Lua и все еще предлагает мощные возможности регулярных выражений.

Это правильный выбор? Должен ли я смотреть на другой язык? Есть ли причина, по которой я должен взглянуть на Луа еще раз?

Ответы [ 4 ]

17 голосов
/ 23 сентября 2010

Если вам нужно определенно то, что обычно называют «регулярными выражениями» (которые вообще не являются регулярными), тогда у вас есть два варианта:

  1. - с Python.он включает регулярное выражение, достаточно похожее на Perl, и sed / grep
  2. использует Lua и внешнюю библиотеку PCRE

, если, с другой стороны, вам понадобитсяхорошее сопоставление с образцом, вы можете остаться с Lua и либо:

  1. использовать включенное сопоставление с образцом Lua, что не в традиции grep, но вполне способно.Отсутствует функциональность подшаблонов (|)
  2. use LPEG , которые на намного более мощные, чем регулярные выражения, и обычно тоже быстрее.

Как вы можете сказать, я большой поклонник последнего.Он не только позволяет вам определять очень сложные, но и детерминированные шаблоны, это полный инструмент грамматики, который вы можете использовать для создания целого парсера.Если вы хотите, грамматика может быть описана в виде единственной многострочной строковой константы с вашими собственными определенными хуками для сбора данных и построения ваших структур.

Я использовал ее для быстрого взлома парсера JSON,C-дерево вызовов, библиотека xPath и т. Д.

7 голосов
/ 23 сентября 2010

Интеграция с Python и C ++ очень помогает при boost.python .Это может оказаться гораздо более удобным, если те, кто знаком с вашим источником C ++, в первую очередь пишут сценарии.

Даже если сценаристы не знакомы с вашим конкретным источником, если они более знакомы с синтаксисом C-like(C, C ++ и т. Д.), Они должны найти Python проще в использовании - возможно, немного, Lua не сложно.Хорошие программисты в любом случае могут использовать множество языков, но вы не предоставили никакой информации о своей аудитории.

Lua намного проще в песочнице, чем Python, поэтому, если вы должны ограничить то, что могут делать скрипты (например, spawn дополнительныйпроцессы, чтение файлов), которые могут исключить Python.

5 голосов
/ 23 сентября 2010

Включив Lua в один из моих C проектов, я предложу Lua, так как это проще.

Но это зависит от того, на что должен быть способен ваш язык сценариев. Lua поднялся на язык сценариев игр де-факто. Если вам нужны расширенные возможности сценариев, вы можете использовать Python, но если это просто для поддержки сценариев, возьмите Lua. Из того, что я видел, Lua легче учить для новичков, которые не привыкли к написанию сценариев.

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

3 голосов
/ 23 сентября 2010

не забудь дедушку их всех - tcl

есть оболочка c ++ для tcl, которая позволяет невероятно легко встраивать

Я использую его в текущем проекте

в предыдущем (c #) проекте я использовал lua over python. В старых проектах на c # я использовал python; Я выбрал lua, потому что синтаксис более нормален для обычного сценария (используется для vbscript или javascript). Однако я вернусь к (железному) питону для следующего проекта на c #; Луа слишком неясен

Для c ++ теперь я всегда буду использовать tcl

РЕДАКТИРОВАТЬ: мой новый любимый это jint (.net javascriptt интерпретатор) v простой в использовании, приятный интерфейс. И никто не может жаловаться на язык, учитывая, что на данный момент js - классный язык

...