39

今週の新しいXcode3.2.1に含まれているreadmeには、次のように書かれています。

  • 静的コード分析は、[ビルド]メニューの[ビルドと分析]オプションまたはカスタムビルド設定を介して、XcodeIDEに完全に統合されています。
  • GCC 4.2は、10.6SDKのデフォルトのシステムコンパイラです。
  • オプションのLLVMコンパイラーは、2つの異なるフロントエンドを使用して含まれています。Clangコンパイラーは、コンパイル時間を大幅に改善する最先端のパーサーです。最大限の互換性を実現するために、GCCLLVMコンパイラーはGCC4.2パーサーを備えたLLVMバックエンドを利用します。
  • 新しいオプションのClang-LLVM1.0コンパイラーは、はるかに高速なClangフロントエンドパーサーをLLVMバックエンドコンパイラーと組み合わせて使用​​し、高速コンパイルと高速実行可能コードを実現します。GCC 4.2は依然としてシステムのデフォルトですが、多くのプロジェクトはこのコンパイラの組み合わせから恩恵を受けます。Clang-LLVM 1.0コンパイラは、C ++コードを検出すると、LLVM-GCC4.2の使用にフォールバックします。

当社には、デスクトップおよびiPhone向けの純粋なC、Objective-C、およびObjective-C++の既存のプロジェクトがあります。誰かがLLVM、GCC、CLANG、CLANG-LLVM、WordFooなどの違いを大まかに要約できますか?al。そして、それらが何であるか、そしていつ、そして何のために使用すべきかを説明しますか?より詳細な説明へのリンクがあるといいのですが、私は本当に高レベルの概要を探しています。

4

1 に答える 1

53

一言で言えば:

コンパイラは基本的に2つの部分に分かれています。1つは、プログラミング言語のパーサーとセマンティック分析を含むフロントエンドです。フロントエンドは、コードのある種の中間表現を生成します。次に、フロントエンドが生成したものを取得して最適化し、最終的にアセンブリコードを生成するバックエンドがあります。

  • GCC:よく知られているコンパイラで、さまざまな言語のフロントエンドと多くのプロセッサアーキテクチャのバックエンドの両方が含まれています
  • LLVM:さまざまなアーキテクチャ(およびその他の低レベルのもの)用のバックエンドのセット
  • clang:C、Objective-C、およびC++の新しいフロントエンド。LLVMバックエンドを使用します。コンパイラから読みやすいエラーと警告が表示され、コンパイル時間が短縮されます。また、非互換性やバグが発生する可能性があります。clangは非常に若いプロジェクトです。
  • LLVM-GCC:LLVMのバックエンドを備えたGCCのフロントエンド。LLVMのバックエンドはGCCよりも高速です。

clangの(Objective-)C ++サポートは完全にはほど遠いため、C++ソースファイルに遭遇するとllvm-gccを呼び出します。また、Xcodeに統合された静的アナライザーも含まれています。LLVMのバックエンドはGCCよりも優れたコードを生成すると言う人もいますが、マイレージは異なる場合があります。LLVMは、リンク時の最適化もサポートしています(Xcodeのプロジェクト設定で有効にできます)。それらはより速いコードを生成するかもしれません。

Appleは、GPLv3ライセンスコードに対するポリシーがあるため、将来的にGCCをclangに置き換えたいと考えています(GCC 4.2は、GPLv2でライセンスされている最後のバージョンです)。

于 2009-10-11T17:41:53.937 に答える