为什么2019年我们还不能用ctypes从Python调用C++呢?

Why can't we still use ctypes to call C++ from Python in 2019?

它仍然困扰着我。毕竟,C 也没有完全标准化的 ABI,但它可以与 ctypes 一起使用。为什么 C++ 不能实现同样的功能?

我发现这个 blog post 声称这个问题比技术问题更政治化,但它是 12 年前写的。这种说法在今天仍然准确吗?

事实上,你可以! (只是不使用 ctypes) https://cppyy.readthedocs.io/en/latest/

但是,为了实现这一点,它实际上嵌入了一个 C++ 解释器,但性能优势不大。

C++ 没有官方 ABI 的一个原因是编译器非常注重性能,因此需要跨越函数和 class 边界进行优化。使用不同的设置,您可能会获得不同的接口,即使它具有相同的 ABI。一个很好的例子是 return-value-optimization (RVO),它改变函数签名以避免复制大型结构。

另一个原因是 C++ 是超元的,大多数现代功能都依赖于生成代码并重新编译的模板。因此,您只会使用 C++ 适合编写代码的部分子集。