Я столкнулся с задачей сделать приложение С++ доступным для сценариев пользователями. Приложение находится в разработке в течение нескольких лет, и никто не тратил впустую мысль об этом раньше. Он содержит всевозможные тонкости, такие как многопоточность, шаблонное колдовство и множественное наследование. В качестве языка сценариев предпочтительнее использовать Python, но Lua может быть принят, если его значительно проще реализовать.
Вопрос 1
Из того, что я узнал до сих пор, в целом существуют два способа интеграции Python/Lua с С++: "расширение" и "внедрение".
В этом случае, похоже, мне нужны оба. Язык сценариев должен иметь доступ к объектам, методам и данным из приложения, но должен быть вызван приложением после того, как пользователь написал script - без перезапуска.
Как это обычно делается в реальном мире?
Вопрос 2
Кажется, что существует путаное множество ручных решений и генераторов привязки, причем все они менее совершенны.
- swig, pyste, Py ++, ctypes, Boost.Python sip, PyCXX, pybindgen, robin, (Cython/Pyrex, Weave)
- CppLua, Diluculum, Luabind, Luabridge, LuaCpp, Luna/LunaWrapper, MLuaBind, MultiScript, OOLua, SLB, Sweet Lua, люкс (этот список из wiki wiki)
- CPB, tolua, tolua ++, toLuaxx, luna и снова swig
Большинство предложений по ним, найденным в Интернете, немного устарели. Например, swig считается сложным в нетривиальных случаях и порождает непонятный код. OTOH, он недавно перешел к версии 2.0.
Некоторые из вышеперечисленных используют pygccxml, чтобы gcc анализировал код С++, а затем разгладил привязку. Я считаю эту идею привлекательной, поскольку gcc, вероятно, лучше понимает код, чем я:-). Это хорошо работает?
Тестирование их всех может легко обойтись мне половину времени, выделенного для всего проекта.
Итак, какие из них вы рекомендуете?