我喜欢尝试许多不同的编程语言,但我真的无法在实际项目中使用其中的许多语言,因为我需要的所有重要库都是用C ++编写的。
通常我必须编写一个非常耗时的C接口,所以我想知道是否存在可以无缝调用任何C ++代码的编程语言?
答案 0 :(得分:5)
C ++中的许多函数都是在头文件中定义的,并且希望使用它们编译到每个应用程序中。它偶尔会发生在C语言中,但对于C ++来说,它更为常见,特别是因为模板化类的类成员不能提前为每个可能的模板实例化提供:无限多。
如果与C ++的兼容性需要一个完整的C ++解析器和编译器,那么你并没有真正得到不同的语言,那么你已经拥有了带扩展的C ++。即使其中一个扩展是使代码的一部分看起来不像C ++,它增加了大量的复杂性,但收效甚微。
如果您不需要与C ++完全无缝兼容,那么某些语言的兼容性有限。有D Interfacing to C++,描述了什么有效,什么无效,为什么没有。
答案 1 :(得分:3)
有一种实验性的语言可以这样做,但是只有一个开发者(我自己),并且它处于如此早期的开发阶段,现在它没用。< / p>
Here's a simple sample program:
Main() {
cpp("iostream").std.cout << "Hello, World!";
}
FTR,编译此示例需要ADL,OR,模板实例化,ABI合规性,解析有问题的C ++标头以及许多有趣的东西。
答案 2 :(得分:2)
没有语言可以无缝地与C ++互操作。 C接口是个好主意。重要的是不要从模块中导出所有/多个功能,因为它会像您注意到的那样耗费时间。专注于解决一个问题并将解决此问题的功能导出到C。
另一方面,如果你真的需要将许多函数甚至类暴露给其他语言,你可以使用SWIG。阅读其文档,您将注意到在创建包装代码时需要处理多少问题。这是因为任何两种语言不同,你无法改变它。该问题的解决方案是使用两种语言的最大公共接口 - C.
答案 3 :(得分:-1)
满足您要求的唯一解决方案是V8 / Javascript from Google。
我所知道的是用C ++编写的脚本语言的唯一实现,以及API本身也是通过C ++公开的。
缺点是,这不是一个简单的项目,在任何平台上都不是完全可用的,它是根据Google的需求开发的,并且没有指南或标准,例如C ++正在被每个发布的ISO文档版本化时间是一个新的里程碑,每个里程碑都定义了标准,V8更像是一个正在进行的项目,有一些大的空洞,特别是在不变性,标准化和并发性方面。
例如,没有任何东西可以阻止谷歌将整个API从一个版本更改为另一个版本,除非你指望一个非常大的团队,否则我怀疑你能跟上它。