Python vs Lua для встроенного механизма обработки сценариев/обработки текста
Для проекта, над которым я сейчас работаю, я хочу встроить скриптовый движок в свой код на С++, чтобы обеспечить некоторую расширяемость. Приложение потребует значительного количества обработки текста и использования регулярных выражений в этих сценариях.
Я знаю, что Lua - это, как правило, любитель индустрии, когда дело доходит до встроенных скриптов, но я также знаю, что он не поддерживает регулярные выражения (по крайней мере, из коробки). Это заставляет меня склоняться к python для моего языка, чтобы вставлять его, поскольку он, кажется, имеет лучшую поддержку Lua и по-прежнему предлагает мощные возможности регулярных выражений.
Это правильный выбор? Должен ли я смотреть на другой язык? Есть ли причина, по которой я должен дать Lua второй взгляд?
Ответы
Ответ 1
если вам нужно конкретно то, что обычно называют "регулярными выражениями" (которые вообще не являются регулярными), у вас есть два варианта:
- перейти с Python. он включал regexp, достаточно похож на Perl и sed/grep
- используйте Lua и внешнюю библиотеку PCRE
если, с другой стороны, вам нужно хорошее совпадение с образцом, вы можете остаться с Lua и либо:
- используйте Lua в сочетании с шаблоном, которые не входят в традицию grep, но вполне способны. Недопустимая функциональность - это альтернативы подшаблонов (|)
- используйте LPEG, которые намного мощнее, чем регулярные выражения, и обычно быстрее.
Как вы можете сказать, я большой поклонник последнего. Это не только позволяет вам определять очень сложные, но детерминированные шаблоны, это полный инструмент грамматики, который вы можете использовать для создания всего парсера. Если вы хотите, грамматика может быть описана в одной многострочной строковой константе с вашими собственными определенными крючками для сбора данных и построения ваших структур.
Я использовал его для быстрого взлома парсера JSON, дерева вызовов C, библиотеки xPath и т.д.
Ответ 2
Интеграция Python и С++ в значительной степени помогает boost.python. Вы можете найти это гораздо более удобным, если те, кто знаком с вашим источником С++, в первую очередь являются тем, кто пишет сценарии.
Даже если сценаристы не знакомы с вашим конкретным источником, если они более знакомы с синтаксисом типа C (C, С++ и т.д.), они должны найти Python более простым в использовании - возможно, только слегка, Lua isn ' т трудно. Хорошие программисты могут использовать множество языков в любом случае, но вы не предоставили никакой информации о своей аудитории.
Lua намного проще в песочнице, чем в Python, поэтому, если вы должны ограничить выполнение сценариев (например, создавать дополнительные процессы, читать файлы), это может исключить Python.
Ответ 3
Включив Lua в один из моих проектов C, я предлагаю Lua, так как это проще.
Но это зависит от того, на что способен ваш язык сценариев. Lua поднялся до де-факто скриптового языка игр. Если вам нужны расширенные возможности сценариев, вы можете использовать Python, но если это просто для легкой поддержки скриптов, возьмите Lua. Из того, что я видел, Lua легче изучить для newbees, которые не используются для написания сценариев.
Я бы сказал, что Lua легче, если вам нужно иметь внешние пакеты, вы можете добавить их, но дело в том, что атомная часть Lua намного меньше, чем у Python.
Ответ 4
Не забывайте о великом папе из всех - tcl
существует С++-оболочка для tcl, что делает ее невероятно легкой встраивать
Я использую его в текущем проекте
в предыдущем (С#) проекте я использовал lua поверх python. В старых проектах С# я использовал python;
Я выбрал lua, потому что синтаксис более нормален для среднего скрипта (используется для vbscript или javascript). Однако я вернусь к (утюгу) python для следующего проекта С#; lua просто слишком неясен
Для С++ я всегда буду использовать tcl с этого момента
EDIT: Моим новым фаворитом является jint (.net javascriptt interpreter) v простой в использовании, приятный интерфейс. И никто не может жаловаться на язык, учитывая, что js - классный язык в настоящий момент