我知道许多大型应用程序(例如视频游戏)是使用多种语言创建的。例如,游戏/物理引擎很可能是用 C++ 编写的,而游戏任务、GUI 是用 Python 或 Lua 之类的东西编写的。
我理解为什么要进行这种角色划分;将低级语言用于需要极端优化、调整、效率和速度的任务,同时使用高级语言来加快生产时间、减少讨厌的错误等。
最近,我决定进行一个更大的个人项目,并希望将项目中与上述类似的部分分开。此时此刻,我真的很困惑语言(尤其是编译型和解释型)之间的这种互操作性是如何工作的。
当用 C/C++ 之类的语言编写时,我非常熟悉从 ANSCII 代码测试到加载可执行文件的详细信息。我很好奇用多种不同语言构建的视频游戏之类的东西是如何工作的。这是一个大/广泛的问题,但我特别感兴趣的是:
- 代码级逻辑如何工作? IE。如何从 C++ 程序中调用 Python 代码?特别是因为它们不支持相同的内置类型?
- 程序图像是什么样的?据我所知,视频游戏在单个进程中运行,那么当运行调用 Python 函数的 C/C++ 程序时,运行时图像是什么样的?
- 如果从编译程序调用解释语言的代码,事件发生的顺序是什么?即,如果我在编译后的可执行文件中,并且出于某种原因在循环内调用解释语言,我是否必须在每次迭代时都等待解释器?
实际上,我很难找到有关机器级别发生的情况的信息,因此我们将不胜感激。虽然我对软件的互操作总体上很好奇,但我对 C++ 和 Python 的交互特别感兴趣。
非常感谢您提供任何见解,即使它只是指出我可以在哪里找到更多信息。
最佳答案
在 python 的特定情况下,您基本上有三种选择(这通常适用于所有情况):
Host python in C++:从C++程序的角度来看,python解释器是一个C库。在 Python 方面,您可能需要也可能不需要使用类似 ctypes 的东西来公开 C(++) api。
Python 使用 C++ 代码作为 DLL/SO - C++ 代码可能对 Python 一无所知,Python 肯定必须使用外部函数接口(interface)。
进程间通信 - 基本上,两个独立的进程运行,它们通过套接字进行通信。如今,您可能会使用某种网络服务架构来完成此任务。
关于c++ - 互操作性如何运作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17507004/