互操作性如何工作

时间:2013-07-06 20:49:08

标签: c++ python game-engine language-interoperability

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

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

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

我非常熟悉从ANSCII代码测试到加载可​​执行文件的细节,当用C / C ++编写时。我非常好奇从像许多不同语言构建的视频游戏这样的东西。这是一个大/广泛的问题,但具体我感兴趣的是:

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

我实际上很难找到机器级发生的事情的信息,所以任何帮助都会受到赞赏。虽然我对软件的互操作很感兴趣,但我对C ++和Python的交互特别感兴趣。

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

2 个答案:

答案 0 :(得分:2)

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

  1. C ++中的主机python:从C ++程序的角度来看,python解释器是一个C库。在python方面,你可能需要也可能不需要使用像ctypes这样的东西来暴露C(++)api。

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

  3. 进程间通信 - 基本上,运行两个独立的进程,它们通过套接字进行通信。如今,您可能会使用某种Web服务架构来实现这一目标。

答案 1 :(得分:0)

取决于您想要做什么:

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

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