DMD vs. GDC vs. LDC

不同的D编译器有哪些优点/缺点? 性能和标准符合性/ D2支持如何? debugging器支持多好? 错误消息有多好,是IDE集成? 64位支持有多好? 我的想法到目前为止:

DMD

  • 成熟和良好的维护
  • 只有一个平台,64位支持不好
  • 不是FOSS

GDC

  • 支持各种平台
  • 有非常成熟的优化,所以它很快?
  • 过时的运行时间?
  • GCC这么好的debugging器支持?

LDC

  • 支持各种平台
  • LLVM,所以它支持JITing?
  • 有非常成熟的优化,所以它很快?
  • 维护得不是很好?
  • 过时的运行时间?

死/不工作

  • SDC
  • MiniD – 非常非常好,但不是D(虽然从来没有声称过)

我正在考虑瞄准ARM,我认为GDC是select的工具,但我不确定。

DMD是参考实现。 只有后端是专有的,前端是开源的。
代码生成质量并不是那么强大。 虽然x64的支持只有几个月的时间。

GDC和LDC都是基于DMD前端的,因此可能需要一段时间才能合并新版本的前端。
由于他们使用的后端非常成熟,这些编译器的质量主要取决于连接前端和后端的胶水代码。

LDC和GDC仍然在积极发展,但主要由less数几个人发展。
总而言之,他们可以使用一些人力。

  1. DMD的显着缺点是共享库不足:
    • 在Windows上
    • 在Linux上
  2. 我个人对GDC支持D2感到惊讶,但他们说 :
    • D1:1.067
    • D2:2.053
  3. LDC似乎几乎没有维护: “D2只在x86-32 Linux上工作” 。 对我来说,这是一个不争的问题。
  4. 在searchLDC时,我发现了另一个编译器(?!): dil 。 我还没有testing过,但至less现在还在维护中。 我会尽快研究这个主题。 编辑:正如它在评论中指出的那样, dil目前还没有接近完全的状态 – 它只能parsing代码并从源文件生成文档。

截至2012年2月,LDC似乎并不是真正的可用选项(至less在Debian上)。

例如,考虑D书中的第一个程序:

 import std.stdio; void main(string[] args) { writeln("Hello, world!"); } 

这将无法在我的系统上使用LDC进行编译:

 hello.d(24): Error: module stdio cannot read file 'std/stdio.d' 

dlang.org的第一个程序也是如此:

 import std.stdio; void main() { ulong lines = 0; double sumLength = 0; foreach (line; stdin.byLine()) { ++lines; sumLength += line.length; } writeln("Average line length: ", lines ? sumLength / lines : 0); } 

这是因为我的LDC不支持Phobos – 当前的D运行时库 。 看起来有可能构build一个D2版本的LDC,包括Phobos,但这不是它在Debian上运行的方式。

GDC,当然还有DMD,都编译上面就好了。 看起来GDC是相当新的(两个月前DMD发布2.057,现在GDC支持)。

对我来说,GDC是一个明显的select,因为一个简单的apt-get -V install gdc带来了编译器和Phobos运行时没有问题(在Debian不稳定的情况下testing过)。