我想学习D语言,但是有一件重要的事情我还没有理解清楚。目前C++和D之间的互操作性状态如何?我确定不可能链接到C++编译后的二进制文件,因为它甚至无法与C++编译器一起使用。但如果我有一个C++库的源代码和一些D源代码,它们之间是否可以相互通信?(希望以高效的方式)。不同的C++版本(C++98、11、14、17和未来版本)呢?
我是编译器团队的一员,这个夏天一直在为与使用现代C++14编写的C++代码进行交互的D语言进行改进。
C++在D语言中得到了很好的支持,事实上,它可能是所有大型语言中支持最好的语言之一。例如,您可以在C++中抛出任何继承自std::exception
的异常,并在D语言中捕获它。您可以在D语言中编写一个类并从D语言(虚拟方法或非虚拟方法)中使用它,也可以反过来。您可以从C++中子类化D类,也可以从D中子类化C++类。您可以调用实例化的模板函数!
现在,有一些需要注意的地方:
char * const *
(指向可变字符的常量指针),因为D的const是传递性的,所以必须是const char * const *
。至于平台,Windows得到了很好的支持(我们有一些游戏开发人员在使用它)。对于调用模板函数的POSIX支持比较新,但对我来说有效。
这就是语言支持的全部内容。周围的工具(例如Dejan提到的)仍在建设中,并且工业界对它们非常感兴趣,因为D被认为更加舒适,可以为C++开发人员提供轻松的过渡路径。实际上,所有3个D编译器(DMD,GDC,LDC)都使用一个用D编写的公共前端,并向C++公开其后端(分别为DMC,GCC,LLVM)。
简而言之: