Article Outline
Clang / LLVM について
ClangとLLVMについて学習したため、そのまとめとしてここに整理する。
コンパイラのフロントエンドとバックエンドについて
- コンパイラはフロントエンドとバックエンドに分割し設計されているケースがあり、それぞれ役割がある
- フロントエンド
- ソースコードを解析し、中間表現・中間言語と呼ばれるデータに変換する
- バックエンド
- フロントエンドによって生成された中間表現から、環境に合わせた機械語やバイトコードを生成する
- その他、最適化なども行う
- フロントエンド
Clang
- C / C++ / Objective-C / Objective-C++向けのコンパイラフロントエンド
- バックエンドとしてLLVMを使用
- GCCの置き換えを目標としており、マルチスレッドに対応したコンパイルなどGCCにはない機能を搭載している
LLVM
- LLVM向けのコンパイラフロントエンドによって生成された中間言語から、環境に合わせた機械語を生成する
- 静的コンパイラとしても、JITコンパイラとしても使うことができる