DMD vs. GDC vs. LDC



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

DMD

  • 成熟且维护良好
  • 只有一个平台,64位支持不好
  • 不自由/开源软件
环球数码创意>
  • 支持多种平台
  • 有非常成熟的优化,所以它很快?
  • 运行时过期?
  • 对GCC这么好的调试器支持吗?

LDC

  • 支持多种平台
  • LLVM,所以它支持jit ?
  • 有非常成熟的优化,所以它很快?
  • 没有很好地维护?
  • 运行时过期?

死/不工作

  • 见鬼
  • MiniD -非常非常好,但不是D(虽然从未声称是)

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

DMD是参考实现,后端和前端都是开源的。代码生成的质量没有那么高。

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

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

  1. DMD最大的缺点是缺少共享库:
      Windows上的
    • 在Linux上的


  2. 我个人很惊讶GDC支持D2,但他们说它是:
    • D1: 1.067
    • D2: 2.053

  3. LDC显然几乎没有被维护:"D2只在x86-32 Linux上工作"。对我来说,这是一个引人注目的问题。

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

截至2012年2月,看起来LDC并不是一个真正可用的选项(至少在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运行库。看起来可以构建一个D2版本的LDC,包括Phobos,但至少在Debian上不是这样的。

GDC,当然还有DMD,都可以很好地编译上述内容。看起来GDC是最新的(DMD在两个月前发布了2.057,GDC现在支持它)。

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

相关内容

  • 没有找到相关文章

最新更新