8

我知道许多大型应用程序(例如视频游戏)是使用多种语言创建的。例如,游戏/物理引擎很可能是用 C++ 编写的,而游戏任务、GUI 可能是用 Python 或 Lua 之类的东西编写的。

我理解为什么要进行这种角色划分;将低级语言用于需要极端优化、调整、效率和速度的任务,同时使用高级语言来加快生产时间,减少讨厌的错误等。

最近,我决定进行一个更大的个人项目,并希望将项目的部分内容与上述类似。在这个时间点,我真的很困惑语言之间的这种互操作性(尤其是编译与解释)是如何工作的。

当用 C/C++ 之类的东西编写时,我非常熟悉从 ANSCII 代码测试到加载可​​执行文件的细节。我很好奇像电子游戏这样由多种不同语言构建的东西是如何工作的。这是一个大/广泛的问题,但我特别感兴趣的是:

  • 代码级逻辑如何工作?即如何从 C++ 程序中调用 Python 代码?特别是因为它们不支持相同的内置类型?
  • 程序图像是什么样的?据我所知,视频游戏在单个进程中运行,那么运行调用 Python 函数的 C/C++ 程序时运行时映像是什么样的?
  • 如果从编译程序调用解释语言的代码,发生的事件顺序是什么?即如果我在我编译的可执行文件中,并且由于某种原因在循环中调用了解释语言,我是否必须在每次迭代时等待解释器?

实际上,我很难找到有关机器级别发生的事情的信息,因此我们将不胜感激。虽然我一般对软件的互操作性很好奇,但我对 C++ 和 Python 交互特别感兴趣。

非常感谢您的任何见解,即使它只是指向我可以找到更多信息的地方。

4

2 回答 2

3

在 python 的特定情况下,您基本上有三个选项(这通常适用于所有方面):

  1. 在 C++ 中宿主 python:从 C++ 程序的角度来看,python 解释器是一个 C 库。在 python 方面,您可能需要也可能不需要使用 ctypes 之类的东西来公开 C(++) api。

  2. Python 使用 C++ 代码作为 DLL/SO - C++ 代码可能对 python 一无所知,python 肯定必须使用外部函数接口。

  3. 进程间通信——基本上,两个独立的进程运行,它们通过一个套接字进行通信。现在,您可能会使用某种 Web 服务架构来完成此任务。

于 2013-07-06T21:02:19.280 回答
0

取决于你想做什么:

  • 看看 SWIG:http ://www.swig.org/这是一个旨在将 C/C++ 代码与 Python、Tcl、Perl、Ruby 等连接起来的工具。常见的用例是 Python 接口(图形或非图形) ) 将调用 C/C++ 代码。SWIG 将解析 C/C++ 代码以生成接口。

  • Libpython:它是一个允许您嵌入 Python 代码的库。你在这里有一些例子:http: //docs.python.org/3.0/extending/embedding.html

于 2013-07-06T20:56:47.663 回答