DMD与GDC与LDC的比较

时间:2011-07-20 19:00:13

标签: compiler-construction d dmd gdc

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

DMD

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

GDC

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

LDC

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

死亡/无效

  • SDC
  • MiniD - 非常,非常好,但不是D(从未声称是,但是)

我正在考虑针对ARM,我认为GDC是首选工具,但我不确定。

3 个答案:

答案 0 :(得分:23)

DMD是参考实现。只有后端是专有的,前端是开源的 代码生成质量不是那么令人难以置信。 x64支持只有几个月了。

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

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

答案 1 :(得分:8)

  1. DMD的重大缺点是共享库缺陷:
  2. 我个人很惊讶GDC支持D2,但是they say it does
    • D1:1.067
    • D2:2.053

  3. 最近似乎很少保留最不发达国家:"D2 is working on x86-32 Linux only"。对我来说,这是一个显而易见的问题。

  4. 在搜索LDC时,我又找到了一个编译器(?!):dil。我还没有测试过,但至少目前还在维护。我会尽快研究这个话题。 编辑:正如评论中指出的那样,dil目前还没有接近完全状态 - 它只能解析代码并从源代码生成文档。

答案 2 :(得分:3)

截至2012年2月,似乎最不发达国家并非真正可用(至少在Debian上)。

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

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--the current D runtime library。看起来可以构建D2版本的LDC,包括Phobos,但这不是它至少在Debian上发布的方式。

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

对我来说,GDC是显而易见的选择,因为简单的'apt-get -V install gdc'带来了编译器和Phobos运行时没有问题(在Debian unstable上测试)。