【问题标题】:DMD vs. GDC vs. LDCDMD 与 GDC 与 LDC
【发布时间】:2011-10-09 16:07:19
【问题描述】:

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

DMD

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

GDC

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

最不发达国家

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

死机/不工作

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

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

【问题讨论】:

标签: compiler-construction d dmd gdc


【解决方案1】:

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

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

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

【讨论】:

  • GDC 和 LDC 如何支持 Druntime 和 Tango、Phobos?好像有问题。
  • LDC 对 Tango 的支持非常好。不知道GDC。 GDC 有一个最新的 phobos2 分支,LDC 的分支已经 2 个月大了。
  • 看起来 64 位支持现在正在运行:auto-tester.puremagic.com/?projectid=14
【解决方案2】:
  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。我还没有测试过它,但至少它目前得到了维护。我会尽快研究更多关于这个主题的内容。 编辑:正如 cmets 中指出的那样,dil 目前还没有接近完整的状态——它只能解析代码并从源代码生成文档。

【讨论】:

  • 不要根据 wiki 判断 LDC。开发在bitbucket.org/lindquist/ldc 和分叉处进行。
  • dil 显然还不能生成二进制文件(它只适用于生成文档 atm)。这是在他们的谷歌代码页上说明的。有点可惜,看起来很酷
  • @Andrew Spott:嗯......甚至没有一些中间表示?
  • @vines:看起来不像:code.google.com/p/dil 说它不能生成二进制文件,目前只能生成帮助文档。
【解决方案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。看起来可以构建 LDC 的 D2 版本,包括 Phobos,但至少在 Debian 上不是这样。

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

对我来说,GDC 是显而易见的选择,因为一个简单的“apt-get -V install gdc”可以毫无问题地引入编译器和 Phobos 运行时(在 Debian 不稳定版上测试)。

【讨论】:

  • 您的问题是由于配置不正确或缺失造成的(etc/ldc2.conf,通常位于/usr/local)。如果文件存在,那么其中应该至少有 1 个"-I{PATH}" 开关,指向属于库 (phobos2) 和运行时的源。 std/stdio.d 例如属于 phobos2。我不是专家,但我设法让 LDC 编译器(此时在 github 上主控)在 OSX Lion 64 位上编译,并且此配置由 CMake 自动完成。注意:链接程序时一些运行时符号有问题,但我会提交一个关于它们的补丁。
  • 我也有同样的问题。如果缺少配置,则在 lmd 的 Debian 包装中缺少。
【解决方案4】:

DMD 用于开发,因为它编译速度更快 对于生产,您可以使用 LDC 或 GDC 所有 D 语言编译器都使用相同的前端 但它们在后端不同

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多