为啥 2019 年我们仍然不能使用 ctypes 从 Python 调用 C++?
Posted
技术标签:
【中文标题】为啥 2019 年我们仍然不能使用 ctypes 从 Python 调用 C++?【英文标题】:Why can't we still use ctypes to call C++ from Python in 2019?为什么 2019 年我们仍然不能使用 ctypes 从 Python 调用 C++? 【发布时间】:2019-10-29 21:31:49 【问题描述】:它仍然困扰着我。毕竟,C 也没有完全标准化的 ABI,但它适用于 ctypes。为什么 C++ 不能达到同样的效果?
我发现这个blog post 声称这个问题更多的是政治而不是技术,但它是 12 年前写的。这种说法今天仍然准确吗?
【问题讨论】:
这种说法今天仍然准确吗? 差不多。它需要 C++ 标准委员会来标准化 C++ ABI。要做到这一点需要政治,而不是技术诀窍。虽然这实际上可能会实现,但我不建议你屏住呼吸。 pypi.org/project/pybind11 【参考方案1】:其实可以! (只是不使用 ctypes) https://cppyy.readthedocs.io/en/latest/
但是,为了实现这一点,它实际上嵌入了一个 C++ 解释器,并没有太多的性能优势。
C++ 没有官方 ABI 的一个原因是编译器非常注重性能,因此需要跨越函数和类边界进行优化。使用不同的设置,您可能会获得不同的界面,即使它具有相同的 ABI。一个很好的例子是返回值优化 (RVO),它改变函数签名以避免复制大型结构。
另一个原因是 C++ 是超元,大多数现代功能都依赖于生成代码并重新编译它的模板。因此,您只需要使用 C++ 编写代码的一部分。
【讨论】:
以上是关于为啥 2019 年我们仍然不能使用 ctypes 从 Python 调用 C++?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ctypes 将 numpy ndarrays 传递给 c++ 函数?