2017-03-05 62 views
0

我有一个C++应用程序,我必须提供一些面向网络的功能,如OAuth2,并使用一些常用服务的REST API。以下是我的想法:将Python嵌入到C++应用程序中是否明智?

  • 我正在研究的过程(产品的一个功能)主要是网络有界的。因此,性能下降并不明显。

  • 在Python中实现简单的API调用相关脚本比C++更简单,并且从长远来看更易于维护。

  • 在C++中有可用于REST,OAuth2的库,但Python很容易工作,并且可以使用libpython与C++接口。 https://docs.python.org/2/extending/embedding.html

  • 该项目在C++和Qt5中已经有了很大的代码库。

这里有一些问题,我很担心:

  • 它是一个很好的建议去实现一个混合语言的方法,即使所有的功能在C++中是可用的,只是为了避免复杂? (请不要将这个问题标记为征求意见,我寻求合理的论点)。

  • 与Python中的C++相比,是否存在主要的性能下降或者我对任务进行网络绑定的假设,这使得CPU时间无关紧要。

  • 在使用libpython在不同平台上构建整个代码库时是否存在严重问题?

  • 该项目基本上是进程绑定,因此无法移植到Python。此外,它的巨大和移植将比在C++中执行复杂的事情花费更多。它只是需要在线交互的软件的特定部分。

+2

为什么不从C++完全切换到Python,如果它更容易使用Python并且它具有代码中使用的所有库?如果你认为Python很慢:你确定你的程序在CPU使用率方面必须很快,还是I/O限制?如果后者是真的,那么你可以很好地使用Python。 – ForceBru

+0

已编辑。最后我添加了一点。 –

回答

2

混合语言是许多项目和产品,如游戏引擎,3D建模工具,甚至MS办公室很好的验证想法。

如果您对性能下降不敏感,并且您可以从低维护成本中受益,那么这将是一个好主意。

但是您需要考虑的一些事情是部署和调试工作,无论它是否会受到混合的影响;混合建筑师也可能会遇到一些问题,以找到合适的候选人来维护他们是否拥有它离开公司。您也可以首先使用Python作为网络模块启动项目,如果您拥有里程碑,则会遇到里程碑,并且一旦您获得足够的时间后再切换到C++,或者找到性能损失。

一旦我在一家游戏公司工作过,服务器和客户端都是混合语言项目。 C++中的服务器框架,而游戏逻辑,在Lua中与AI作战;客户端通过使用UnrealEngine3,C++中的图形和框架,但Game Logic使用虚幻脚本。他们都很棒。