主な著者(Chris Lattner)によって書かれた、問題に関するいくつかの学術文献、I recommend the AOSA book chapter on itがあります。
LLVMは、コンパイラの開発および関連するタスクをサポートするために構築されたライブラリの集まりです。各ライブラリは、典型的なコンパイラパイプライン(レキシング、解析、特定のタイプの最適化、特定のアーキテクチャのマシンコード生成など)で特定のコンポーネントをサポートします。それが普及している理由は、そのモジュラー設計により、その機能を非常に容易に適合させ再利用できるということです。これは、既存の言語用のコンパイラを開発して新しいハードウェアアーキテクチャをターゲットにする場合に便利です(ハードウェア固有のコンポーネントを書くだけで、すべてのレキシング、解析、マシンに依存しない最適化などが処理されます)。新しい言語用のコンパイラを開発する(バックエンドのものはすべてあなたのために扱われる)、あるいはコンパイル時に(ソースコードの解析、より大きなアプリケーションへの言語の埋め込みなど)何かを行っているとき。
これをサポートするために、LLVMは基本的に理論的なハードウェアアーキテクチャのアセンブリ言語である非常に洗練された内部表現(LLVM IRといい、創造的に十分です)を採用しています。ほとんどのLLVMライブラリは、IRを受け取り、それを操作し、変更されたIRを出力し、プロジェクトのモジュラリティの目的をサポートします。これは、(歴史的に私が最近チェックしていない)GCCとは対照的です.GCCは情報の共有が難しいため、IRの完全性が低く、コンパイルの段階が非常に緊密に結びついています。
Clangは、LLVMフレームワーク上に構築されたフラッグシップコンパイラです。
あなたはAppleについて聞いたことがありますか?あなたは白いイヤホンで不愉快な10歳の人を見たことがありますか?ありがとう、LLVM。 –
おそらくここで答えられます:http://stackoverflow.com/questions/2354725/what-exactly-is-llvm - 実際には、多くの人々がLLVMについて語ると、実際にはCとC++コンパイラの 'clang 'これはAppleに大きな影響を与えました(そして、非常に有用なコンパイラのエラーメッセージのおかげで)。簡略化された 'clang'はC/C++をLLVMの中間表現にコンパイルし、LLVMはそれからマシンコードをコンパイルします。利点は、もしあなたが新しいプログラミング言語を持っているなら、1つのコンパイラ(言語 - > LLVM)だけを書いて、LLVMがそうするのでx86/x64/arm /他のプラットフォームについて心配する必要はないということです。 –
@MichaelStumはちょっとクリアしているようだが、なぜclang自体が突然人気があるのかはっきりしていない。 –