【发布时间】:2011-03-18 23:07:30
【问题描述】:
我面临着使 C++ 应用程序可由用户编写脚本的任务。该应用程序已经开发了好几年,以前没有人在这方面浪费过任何想法。它包含各种细节,如多线程、模板巫术和多重继承。作为脚本语言,Python 是首选,但如果 Lua 更容易实现,则可能会被接受。
问题 1
根据我目前所了解的,大致有两种方法可以将 Python/Lua 与 C++ 集成:“扩展”和“嵌入”。
在这种情况下,看起来我需要两者。脚本语言需要访问应用程序中的对象、方法和数据,但需要在用户编写脚本后由应用程序调用 - 无需重新启动任何内容。
这在现实世界中通常是如何完成的?
问题 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、lux (此列表来自 lua wiki)
- CPB、tolua、tolua++、toLuaxx、luna 和再次痛饮
在网上找到的大多数评论都有些过时了。例如,据说 swig 在非平凡的情况下很困难,并且会生成难以理解的代码。 OTOH,最近到v2.0了。
上面的一些使用pygccxml让gcc分析C++代码然后生成绑定。我觉得这个想法很有吸引力,因为 gcc 可能比我更了解代码:-)。这个效果好吗?
测试所有这些可能很容易花费我为整个项目分配的一半时间。
那么,你推荐哪些?
【问题讨论】:
-
当实际将这些问题作为 3 个单独的问题发布时效果会更好 - 每种语言一个新的 Q 以获得最佳活页夹。为此,可能已经有重复了。
-
“以前没有人在这件事上浪费过任何想法”——嘿!我参与了一些项目,这些项目显然是由非常节俭的人开发的:)
-
@Georg Fritzsche 我觉得单独的问题可能会不受欢迎,有点像新闻组中的交叉发布。重复:是的,但我找不到太多关于使 user 可编写脚本的具体问题。你知道如何做到这一点(扩展和嵌入)的一个简单易懂的例子吗?
-
这取决于你在说什么语言。单独的问题在这里要好得多 - 它们可能会被不同的人回答,在搜索时更容易找到,......简而言之,越专注越好。 (旁注:@ 后面的空格使通知不起作用,您不需要全名 - 请参阅 here。)
标签: c++ python binding lua scriptable