2017-01-05 8 views
1

ここ数ヶ月で、私は "LLVM"という言葉を全部見てきました。私はそれを見てきましたが、 "現代のコンパイラインフラストラクチャ"の記述は実際に何も教えてくれません。私はそれに付随するacコンパイラに関するいくつかの言及以外にはそれほど多くを見つけることができません(それ以外のCコンパイラとはまったく異なるとは思われません)LLVMとは何ですか?それはなぜそんなに人気が高いのですか?

これにはいくつかの違いがありますかLLVMのものと他のコンパイラ、例えば、GCC?それとも、競争よりも新しいことから利益を得ている過度に誇張された代替品ですか?

+1

あなたはAppleについて聞いたことがありますか?あなたは白いイヤホンで不愉快な10歳の人を見たことがありますか?ありがとう、LLVM。 –

+5

おそらくここで答えられます: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 /他のプラットフォームについて心配する必要はないということです。 –

+0

@MichaelStumはちょっとクリアしているようだが、なぜclang自体が突然人気があるのか​​はっきりしていない。 –

答えて

10

主な著者(Chris Lattner)によって書かれた、問題に関するいくつかの学術文献、I recommend the AOSA book chapter on itがあります。

LLVMは、コンパイラの開発および関連するタスクをサポートするために構築されたライブラリの集まりです。各ライブラリは、典型的なコンパイラパイプライン(レキシング、解析、特定のタイプの最適化、特定のアーキテクチャのマシンコード生成など)で特定のコンポーネントをサポートします。それが普及している理由は、そのモジュラー設計により、その機能を非常に容易に適合させ再利用できるということです。これは、既存の言語用のコンパイラを開発して新しいハードウェアアーキテクチャをターゲットにする場合に便利です(ハードウェア固有のコンポーネントを書くだけで、すべてのレキシング、解析、マシンに依存しない最適化などが処理されます)。新しい言語用のコンパイラを開発する(バックエンドのものはすべてあなたのために扱われる)、あるいはコンパイル時に(ソースコードの解析、より大きなアプリケーションへの言語の埋め込みなど)何かを行っているとき。

これをサポートするために、LLVMは基本的に理論的なハードウェアアーキテクチャのアセンブリ言語である非常に洗練された内部表現(LLVM IRといい、創造的に十分です)を採用しています。ほとんどのLLVMライブラリは、IRを受け取り、それを操作し、変更されたIRを出力し、プロジェクトのモジュラリティの目的をサポートします。これは、(歴史的に私が最近チェックしていない)GCCとは対照的です.GCCは情報の共有が難しいため、IRの完全性が低く、コンパイルの段階が非常に緊密に結びついています。

Clangは、LLVMフレームワーク上に構築されたフラッグシップコンパイラです。

+1

clang source(LLVMを見ていない)もGCCソースよりもはるかに理解しやすいので、コンパイラの学習や実験には適しています。おそらく上記のモジュール性に起因すると思われる。 –

関連する問題