5

D のライセンスを調べたところ、フロントエンドはオープン ソースですが、バックエンドはそうではありません。バックエンドは何ですか?

なぜ GNU は gdc を作ったのですか? ライセンスに関係していますか?

4

2 に答える 2

11

さまざまな目標を持つさまざまなコンパイラがあります。フロントエンドはソース コードを分析し、バックエンドは実際のコンパイルを行います。フロントエンドがオープンソースであるため、複数のコンパイラで使用できます。

DMDは、D のクローズド ソースのデフォルト実装です。完全な機能を備えていますが、パフォーマンスに関しては最高のコンパイラではない可能性があります。

GDCは成熟したGNU コンパイラ コレクションをバックエンドとして使用します。同じバックエンドが C または C++ コンパイルで広く使用されており、高度な最適化が可能です。

LDCはLLVMプラットフォームを対象としています。これにより、高速コンパイル、移植可能なバイトコード、ジッティングなどの興味深いことが可能になります。

フロントエンドはすべてのコンパイラで共有されるため、1 つのソース ファイルはすべてのコンパイラで同じ方法で解析されます。これを C または C++ の方言と比較してください。

于 2013-03-03T18:37:43.680 に答える
6

DMD は、D コンパイラの参照実装にすぎません。たとえば、Glassfish がエンタープライズ Java アプリケーション サーバーの参照実装であるのと同じです。DMD のバックエンドは、DigitalMars C/C++ コンパイラにルーツがあります。元の D の作成者が DigitalMars C/C++ コンパイラの作成者であることは理にかなっていますよね? Walter は、バックエンドの一部が Symantec の管理下にある間に作成されたため、合法的に完全にバックエンドをオープンソース化することはできませんでした...

第 2 に、GNUは GDC を作成しませんでした。GDC は少数の熱狂者によって作成されたものであり、まもなく GCC ツリーにマージされることを願っています。GDC は GPL であり、単純です。

LDC も言及されました。バックエンドとして LLVM を使用します。

本当に重要なのは、D フロントエンドがオープンソースであることです。非常に多くの代替手段があるため、DMD のバックエンドがそうでないという事実は無関係です。いずれにせよ、GCC と LLVM バックエンドの両方が DMD バックエンドよりも優れています。

コンパイラ/インタープリタの設計に興味がある場合は、SDC、MCI、および DIL プロジェクトを検討することをお勧めします。http://wiki.dlang.orgでそれらについての詳細情報があると思います。

于 2013-03-04T00:19:46.523 に答える