5

我正在查看 D 的许可,发现前端是开源的,但后端不是;什么是后端?

GNU 为什么要制作 gdc?跟执照有关系吗?

4

2 回答 2

11

有不同的编译器具有不同的目标。前端分析源代码,而后端进行实际编译。由于前端是开源的,它可以用于多个编译器。

DMD是 D 的闭源默认实现。它功能齐全,但可能不是最好的编译器性能。

GDC使用成熟的GNU 编译器集合作为后端。相同的后端广泛用于 C 或 C++ 编译并能够进行高级优化。

LDC以LLVM平台为目标。这允许一些有趣的东西,如高速编译、可移植字节码和 jitting。

由于前端在所有编译器之间共享,一个源文件将在每个编译器上以相同的方式解析。将此与 C 或 C++ 方言进行比较。

于 2013-03-03T18:37:43.680 回答
6

DMD 只是 D 编译器的参考实现,就像 Glassfish 是企业 Java 应用服务器的参考实现一样。DMD 的后端源于 DigitalMars C/C++ 编译器。有道理,因为最初的 D 创建者是 DigitalMars C/C++ 编译器的作者,对吧?Walter 无法合法地完全开源后端,因为它的一部分是在赛门铁克手中制作的......

其次,GNU没有制作 GDC——它是由少数爱好者制作的,希望很快会被合并到 GCC 树中。GDC 就是 GPL,就这么简单。

还提到了 LDC - 它使用 LLVM 作为后端。

真正重要的是 D 前端是开源的。DMD 的后端不是无关紧要的,因为有很多选择。无论如何,GCC 和 LLVM 后端都优于 DMD 后端。

如果你喜欢编译器/解释器设计,我建议你看看 SDC、MCI 和 DIL 项目。我认为您在http://wiki.dlang.org上有更多关于它们的信息。

于 2013-03-04T00:19:46.523 回答