哪些高级语言很容易与C/C++接口?

Łuk*_*Lew 11 c c++ programming-languages

我有OCaml的经验.您必须为每个要用于转换类型的函数编写存根,甚至是C int < - > OCaml int.连接很痛苦.我甚至不想要映射C++对象.

其他流行语言怎么样?总是痛苦吗?

编辑:

请避免重复.并分别表示状态C和C++接口功能.

编辑2:

请具体说明."X可以调用C"并不会提供太多信息.

Sah*_*has 15

Python有一个非常好的C API.它可以使用用于Python C API的boost :: python C++绑定非常方便地集成到C++中.


Vin*_*vic 8

主流语言及其C接口有不同程度的乐趣.很高兴,您可以在大多数情况下使用SWIG.


Pau*_*gar 7

几乎所有的脚本语言(Perl,Python,Lua,PHP,Ruby,Tcl)都嵌入到C和C++中.

一份关于API相对优点的好的调查报告:

H. Muhammad and R. Ierusalimschy. C APIs in extension
and extensible languages. Journal of Universal Computer
Science, 13(6):839–853, 2007.
Run Code Online (Sandbox Code Playgroud)

另见这个非常相似的问题(特别是我的回答 ;)).


Nor*_*sey 5

20多年来,这个问题一直很重要.解决它的现有技术是定义接口定义语言或IDL.然后,您有一个工具可以自动生成您手动编写的函数.常用的另一个术语是外部功能接口或FFI.

不幸的是,他们中的大多数都不是很好.从个人经验来看:

  • tolua和SWIG不值得用于Lua和C; 手动编写绑定函数更容易.特别是tolua的IDL几乎是一个C头文件,所以你最终会保留每个声明的两个版本.

  • tolua ++可能值得用于​​绑定Lua和C++ - 手工模拟C++对象的麻烦价值是相当大的.

  • SWIG涵盖了很多语言,但我总是觉得很难使用.

从阅读其他人的经验:

  • 格拉斯哥Haskell编译似乎有最好的外国功能界面,如果我没有记错,在IDL是令人欣慰的简单:你只需要给哈斯克尔输入您要导入的C函数.

  • 新泽西的标准ML似乎也有一个非常好的外部功能界面; BABEL-01上有一篇关于它的论文.

对于您希望与C进行互操作的任何给定语言,您应该询问外部函数接口询问是否存在IDL和相关工具.