web-dev-qa-db-ja.com

DMD対GDC対LDC

さまざまなDコンパイラの長所と短所は何ですか?パフォーマンスと標準コンプライアンス/ D2サポートはどうですか?デバッガーはどの程度サポートされていますか?エラーメッセージとIDE統合はどの程度優れていますか?64ビットサポートはどの程度優れていますか?これまでの私の考え:

[〜#〜] dmd [〜#〜]

  • 成熟していてよく維持されている
  • 1つのプラットフォームのみ、64ビットのサポートは良くない
  • FOSSではない

[〜#〜] gdc [〜#〜]

  • さまざまなプラットフォームをサポート
  • 非常に成熟した最適化があるので、高速ですか?
  • ランタイムが古くなっていますか?
  • GCCは良いデバッガをサポートしていますか?

[〜#〜] ldc [〜#〜]

  • さまざまなプラットフォームをサポート
  • LLVM、JITingをサポートしていますか?
  • 非常に成熟した最適化があるので、高速ですか?
  • あまりよく維持されていませんか?
  • ランタイムが古くなっていますか?

dead/not working

  • ダン
  • sdc
  • MiniD-非常に、非常にいいが、Dではない

ARM=をターゲットにすることを考えています。GDCが最適なツールだと思いますが、よくわかりません。

56
Fritz

DMDはリファレンス実装です。プロプライエタリなのはバックエンドだけで、フロントエンドはオープンソースです。
コード生成品質はそれほど圧倒的ではありません。 x64のサポートはまだ数か月前のものです。

GDCとLDCはどちらもDMDフロントエンドに基づいているため、新しいバージョンのフロントエンドがマージされるまでに時間がかかる場合があります。
使用するバックエンドは非常に成熟していて優れているため、これらのコンパイラの品質は主にフロントエンドとバックエンドを接続するグルーコードに依存します。

LDCとGDCは現在も活発に開発されていますが、主に数人で開発されています。
全体として、彼らはある程度の労働力を使うことができました。

23
Trass3r
  1. DMDの重大な欠点は、共有ライブラリの不足です:
  2. 私はGDCがD2をサポートしていることに個人的に驚きましたが、 そうすると言っています
    • D1:1.067
    • D2:2.053

  3. LDCはほとんどメンテナンスされていないようです: "D2はx86-32 Linuxのみで動作しています" 。私にとって、それはショウトッパーの問題です。

  4. LDCを検索しているときに、もう1つのコンパイラー(?!)を見つけました: dil 。私はまだそれをテストしていませんが、少なくとも現在は維持されています。このトピックについては、できるだけ早く調査します。 EDIT:コメントで指摘されたように、dilは、現時点ではやや完全な状態に近いわけではありません。コードを解析し、ソースからドキュメントを生成します。
8
vines

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--現在のDランタイムライブラリ をサポートしていないためです。 Phobosを含むLDCのD2バージョンをビルドすることは可能であるように見えますが、それは少なくともDebianでの出荷方法ではありません。

GDC、そしてもちろんDMDは、どちらも上記をうまくコンパイルします。 GDCはかなり最新のようです(DMDは2か月前に2.057をリリースし、GDCは現在サポートしています)。

私にとって、単純な 'apt-get -V install gdc 'は、コンパイラとPhobosランタイムの両方を問題なくもたらしました(Debian不安定版でテスト済み)。

3
Justin