DMD、GDC和LDC比较

58

不同的D编译器的优缺点是什么?性能和标准兼容性/D2支持如何?调试器的支持有多好?错误消息有多好,IDE集成情况如何?64位支持情况如何?我的想法:

DMD

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

GDC

  • 支持各种平台
  • 具有非常成熟的优化,因此速度快?
  • 过时的运行时?
  • GCC因此有好的调试器支持?

LDC

  • 支持各种平台
  • LLVM,因此支持JIT?
  • 具有非常成熟的优化,因此速度快?
  • 未经很好地维护?
  • 过时的运行时?

已死亡/不工作

  • dang
  • sdc
  • MiniD - 非常好,但不是D(尽管从未宣称为D)

我考虑瞄准ARM,我认为GDC是首选的工具,但我不确定。


2
DMD是参考实现(尽管存在缺陷),并且可以跨平台。 - ratchet freak
VisualD结合cv2pdb对DMD的调试支持非常优秀。详细内容请参考http://www.dsource.org/projects/visuald/wiki/Tour/Debugger。 - Michal Minich
3个回答

25

DMD是参考实现,后端和前端都是开源的。 代码生成质量并不是非常突出。

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

LDC和GDC仍在积极开发中,但只有几个人在主要开发。
总体而言,他们需要一些人力资源。


GDC和LDC如何支持Druntime、Tango和Phobos?貌似存在一些问题。 - Fritz
LDC对Tango的支持非常好。不确定GDC的情况。 GDC有一个最新的phobos2分支,而LDC的分支现在已经两个月了。 - Trass3r
看起来64位支持现在已经可以使用了:https://auto-tester.puremagic.com/?projectid=14 - Atif

9
  1. DMD 的一个显著缺点是共享库的不足:
  2. 我个人很惊讶 GDC 支持 D2,但是他们说它支持
    • D1:1.067
    • D2:2.053

  3. LDC 明显缺乏维护:“D2 仅适用于 x86-32 Linux”。对我来说,这是一个无法继续的问题。

  4. 在寻找 LDC 的过程中,我发现了另一个编译器(?):dil。我还没有测试过它,但至少它目前正在维护。我将尽快在这个话题上进行更多研究。编辑:正如评论中指出的那样,dil目前并不完整——它只能解析代码并从源文件生成文档。

2
不要根据维基百科来评判LDC。开发工作在https://bitbucket.org/lindquist/ldc和forks进行。 - Trass3r
dil 目前似乎无法生成二进制文件(它只能用于生成文档)。这在它们的 Google Code 页面上有说明。有点遗憾,因为它看起来相当酷。 - Andrew Spott
@Andrew Spott:嗯...甚至没有一些中间表示吗? - vines
1
@vines:看起来不像:http://code.google.com/p/dil/说它不能生成二进制文件,目前只能生成帮助文档。 - Andrew Spott

3
截至2012年2月,看起来LDC不是一个可用的选项(至少在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。看起来可以构建一个包含Phobos的D2版LDC,但至少在Debian上它不是默认提供的方式。
GDC和当然DMD都可以成功编译上述代码。看起来GDC非常更新(DMD两个月前发布了2.057版本,现在GDC已经支持)。
对我来说,GDC是显而易见的选择,因为简单的"apt-get -V install gdc"就可以带来编译器和Phobos运行时,没有问题(在Debian unstable上测试过)。

5
你的问题是由于配置不正确或缺失(etc/ldc2.conf,通常位于/usr/local)。如果该文件存在,则其中应该至少有1个"-I{PATH}"开关,指向库(phobos2)和运行时所属的源代码路径。例如,std/stdio.d属于phobos2。虽然我不是专家,但我已成功地将LDC编译器(maser on github at this time)编译为OSX Lion 64位,并且这个配置是由CMake自动完成的。注意:在链接程序时可能会出现一些运行时符号的问题,但我将提交一个有关它们的补丁。 - Dan
我有同样的问题。如果缺少配置,则在lmd的Debian打包中缺少配置。 - poolie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接