c++ - 互操作性如何运作

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

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

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

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

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

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

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

非常感谢您提供任何见解,即使它只是指出我可以在哪里找到更多信息。

最佳答案

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

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

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

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

关于c++ - 互操作性如何运作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17507004/

相关文章:

c++ - 为什么我应该使用内联代码?

c++ - 为什么它只能读取第一行?

python - Python 分布式应用程序中的持久架构

c++ - 典型的 2D 游戏引擎

c++ - 游戏事件管理器中的迭代器在注销后失效

java - 为游戏引擎制作 API 或脚本语言?

c++ - 将 boost::optional 左值作为对函数的引用传递

c++ - 将光标位置存储在类对象中(ncurses c++)

python - 有没有办法在 Bokeh 中自动设置颜色?

python - O(N) 中的最长递增子序列代码?