不同的D编译器的优缺点是什么?性能和标准遵从性/D2支持如何?调试器的支持有多好?错误消息和IDE集成有多好?64位支持有多好?我的想法到目前为止:
DMD
- 成熟且维护良好
- 只有一个平台,64位支持不好
- 不自由/开源软件
- 支持多种平台
- 有非常成熟的优化,所以它很快?
- 运行时过期?
- 对GCC这么好的调试器支持吗?
LDC
- 支持多种平台
- LLVM,所以它支持jit ?
- 有非常成熟的优化,所以它很快?
- 没有很好地维护?
- 运行时过期?
死/不工作
- 见鬼
- 署
- MiniD -非常非常好,但不是D(虽然从未声称是)
我正在考虑瞄准ARM,我认为GDC是选择的工具,但我不确定。
DMD是参考实现,后端和前端都是开源的。代码生成的质量没有那么高。
GDC和LDC都基于DMD前端,所以可能需要一段时间才能合并新版本的前端。
由于它们使用的后端非常成熟和良好,这些编译器的质量主要取决于连接前端和后端的粘合代码。
LDC和GDC仍在积极发展,但主要是由少数人开发的。
总之,他们可以使用一些人力。
- DMD最大的缺点是缺少共享库:
- Windows上的在Linux上的
我个人很惊讶GDC支持D2,但他们说它是: - D1: 1.067
- D2: 2.053
- LDC显然几乎没有被维护:"D2只在x86-32 Linux上工作"。对我来说,这是一个引人注目的问题。
- 在搜索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不稳定上测试)。