2011-07-20 89 views
50

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

DMD

  • 成熟,并保持良好
  • 只有一个平台,64位的支持并不好
  • 不FOSS

GDC

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

LDC

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

死了/不工作

  • SDC
  • MiniD - 非常,非常好的,但不是d(从来没有声称自己是,虽然)

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

+2

DMD是参考实现(尽管漏洞),它进入跨平台 –

+0

VisualD与cv2pdb对DMD http://www.dsource.org/projects/visuald/wiki/Tour/Debugger –

回答

21

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

GDC和最不发达国家是基于DMD前端既如此,直到前端的新版本中被合并,可能需要一些时间。
因为他们使用的后端是非常成熟和良好的这些编译器的质量主要取决于在连接前端和后端的胶水代码上。

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

+0

很好的调试支持怎么办GDC和LDC支持Druntime和Tango,Phobos?看起来有问题。 – Fritz

+0

LDC对Tango有很好的支持。不了解GDC。 GDC拥有最新的phobos2分支,LDC的分叉现在已经2个月大了。 – Trass3r

+3

LDC还活着。 https://bitbucket.org/lindquist/ldc/changesets – Trass3r

7
  1. DMD的显着缺点是共享库缺乏:
  2. 我个人感到惊讶的是GDC支持D2,但they say it does
    • D1:1.067
    • D2:2.053

  3. LDC肯定似乎很少维护:"D2 is working on x86-32 Linux only"。对我而言,这是一个不争的问题。

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

不要根据wiki对LDC进行判断。 开发地点在https://bitbucket.org/lindquist/ldc和fork。 – Trass3r

+0

dil显然还不能生成二进制文件(它只适用于生成文档atm)。这是在他们的谷歌代码页上说明的。一种无赖,它看起来很酷 –

+0

@安德鲁斯波特:嗯...甚至没有一些中间代表? – vines

3

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

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

import std.stdio; 

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

这将失败与最不发达国家编译我的系统上:

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上测试过)。

+5

您的问题是由于配置不正确或缺失('etc/ldc2.conf',通常位于'/ usr/local')。如果文件存在,那么它内部至少应该有一个''-I {PATH}“开关,指向属于库(phobos2)和运行时的源。例如'std/stdio.d'属于phobos2。我不是专家,但我已经设法在OSX Lion 64位上编译LDC编译器(此时为github上的主编译器),并且此配置由CMake自动完成。注意:链接程序时有一些运行时符号存在问题,但我会提交一个关于它们的补丁。 – Dan

+0

我有同样的问题。如果缺少配置,则在lmd的Debian包装中缺少配置。 – poolie

相关问题