Как я делаю противную программу C++ scriptable с Python и/или Lua? [закрытый]

12
задан Paul D. Waite 21 July 2010 в 12:38
поделиться

5 ответов

Я бы не рекомендовал swig, так как трудно заставить его генерировать удовлетворительную привязку в сложных ситуациях: был там, делал это. Мне пришлось написать ужасный скрипт, который "разбирал" исходный C++ код, чтобы сгенерировать приемлемый C++ код, который swig мог бы пережевать и сгенерировать приемлемые привязки. В общем, избегайте ЛЮБОГО решения, которое опирается на разбор исходной программы на C++.

Между Lua и Python: Я нашел, что Lua НАМНОГО, НАМНОГО лучше документирован и более чисто реализован. В Python есть GIL (глобальная блокировка), в то время как в Lua вы можете иметь экземпляр интерпретатора в каждом потоке, например. Поэтому, если вы можете выбирать, я бы рекомендовал Lua. Это более компактный язык, его легче понять, легче внедрить (намного чище и меньше API, с отличной документацией). Я использовал luabind для своего небольшого проекта и нашел его простым в использовании.

12
ответ дан 2 December 2019 в 21:01
поделиться

Относительно вопроса 1 - да, вам нужно сделать и то, и другое.

Вы должны предоставить интерфейс сценариев ваших приложений встроенному интерпретатору, который затем запускает соответствующий пользовательский сценарий.

Раздел руководств по встраиванию Python включает раздел Расширение встроенного Python , а также есть руководства по аналогичным вещам для Lua, см., Например, эта статья .Конечно, вероятно, есть более простые способы найти, если вы решите, с каким языком сценариев и механизмом привязки вы хотите перейти.

1
ответ дан 2 December 2019 в 21:01
поделиться

Некоторые из вышеперечисленных используют pygccxml, чтобы позволить gcc проанализировать код C ++ и затем создать привязку. Я считаю эту идею привлекательной, поскольку gcc, вероятно, понимает код лучше, чем я :-). Это хорошо работает?

Аналогичный подход используется в привязке Lua Qt - lqt . Он использует cpptoxml для создания XML-файла, содержащего все классы и методы с параметрами, и сгенерировал код привязки C ++ в соответствии с этим.

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

Хотя он был создан специально для Qt, он имеет режим «noqt», в котором он может служить универсальным связывателем, к сожалению, у меня нет опыта с ним, поэтому я не могу сказать, сколько работы потребуется для связывания вашего кода.

1
ответ дан 2 December 2019 в 21:01
поделиться

Мой опыт может быть не очень большим, но я считаю, что он по крайней мере стоит того, что вы за него заплатили ;)

Я сделал несколько базовых модулей "hello world" на python, и я не смог по-настоящему вникнуть в swig - он казался мне слишком накладным для того, что я делал. Конечно, возможно, что это как раз то, что нужно для ваших нужд.

0
ответ дан 2 December 2019 в 21:01
поделиться

Попробуйте Boost::Python, он имеет некоторую кривую обучения, связанную с ним, но это лучший инструмент для работы, на мой взгляд, у нас есть огромная система реального времени и мы разработали библиотеку сценариев для QA в Boost::Python.

0
ответ дан 2 December 2019 в 21:01
поделиться
Другие вопросы по тегам:

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