gpt4 book ai didi

c++ - 如何使用 Python 和/或 Lua 编写可编写脚本的讨厌的 C++ 程序?

转载 作者:IT老高 更新时间:2023-10-28 23:17:13 25 4
gpt4 key购买 nike

我面临着使 C++ 应用程序可由用户编写脚本的任务。该应用程序已经开发了好几年,以前没有人在这方面浪费过任何想法。它包含各种细节,如多线程、模板巫术和多重继承。作为脚本语言,Python 是首选,但如果 Lua 更容易实现,则可能会被接受。

问题 1

根据我目前所了解的,大致有两种方法可以将 Python/Lua 与 C++ 集成:“扩展”和“嵌入”。

在这种情况下,看起来我需要两者。脚本语言需要访问应用程序中的对象、方法和数据,但需要在用户编写脚本后由应用程序调用 - 无需重新启动任何内容。

这在现实世界中通常是如何完成的?

问题 2

那里似乎有一系列令人眼花缭乱的手动解决方案和绑定(bind)生成器,它们都不够完美。

  • 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++代码然后生成绑定(bind)。我觉得这个想法很有吸引力,因为 gcc 可能比我更了解代码:-)。这个效果好吗?

测试所有这些可能很容易花费我为整个项目分配的一半时间。

那么,你推荐哪些?

最佳答案

我不推荐 swig,因为它很难在复杂的情况下产生令人满意的绑定(bind):去过那里,做到了。我不得不编写一个可怕的脚本来“解析”原始 C++ 代码以生成一些可接受的 C++ 代码,这些代码可以让 swig 咀嚼并生成可接受的绑定(bind)。所以,一般来说:避免任何依赖于解析原始 C++ 程序的解决方案。

在 Lua 和 Python 之间:我发现 Lua 好多了,好多了,文档更好,实现也更干净。例如,Python 有一个 GIL(全局锁),而使用 Lua,您可以在每个线程中拥有一个解释器实例。所以,如果你可以选择,我会推荐 Lua。它是更小的语言,更容易理解,更容易嵌入(更简洁和更小的 API,具有出色的文档)。我在我的一个小项目中使用了 luabind,发现它很容易使用。

关于c++ - 如何使用 Python 和/或 Lua 编写可编写脚本的讨厌的 C++ 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3299067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com