目前哪些语言对于 C/C++ 的互操作性很好?

这里的互操作性有两方面:

  1. C/C++ 的库可以在该语言中很方便地调用
  2. 用该语言写一个库,C/C++ 也可以很方便地调用

这里的“方便”,主要考虑封装/调用时需要做的手动处理和手写的代码较少。

只知道几个用过的, 其他的不太熟:

  1. 调用 C/C++:
  • SWIG (不太熟, 但是看着能支持很多语言)

  • FFI

    Common Lisp 有 cffi, 其中 cffi/c2ffi 可以从一个头文件自动生成绑定代码, 基本上也算是全自动了 (一个之前用的例子: cl-webview)

    其他语言或多或少都有 FFI 支持?

  • Python, Ruby (ruby.h) 貌似都有往 C/C++ 中注入一段绑定代码来调用 C/C++ 库, 能返回 PyObject

  • Julia 有 CxxWrap.jl, Common Lisp 也有类似的库 cl-cxx, 原理应该类似上面, 但是差不多是自动生成绑定代码

  1. C/C++ 调用:
  • Common Lisp: ECL → lib

    貌似 CLASP 支持 LLVM 作为后端, 其宣传点是可以无缝 wrap C++ 的库, 但是 m 系列的 macbook 没编译起来所以不太了解.

其实如果不考虑太多性能, 感觉邪道一点的用 ZMQ 写一个 req 和 rep 也能算是无缝调用, 甚至还能做到计算资源分配 (bushi)

1 个赞

是 SWIG 么?

https://swig.org/

是的 :sweat_drops: (改了

1 个赞

zig肯定是满足要求的,就是用的人不多,还不成熟

3 个赞

Lua也方便,毕竟游戏很多都是Lua+C++

3 个赞

fortran应该也挺方便的,只需要链接一下就好了(大概)

1 个赞