現代のコンパイラは通常、フロントエンド、ミドルエンド、バックエンドの3つの段階で構成されています。フロントエンドはソースコードを解析し、正当性をチェックして中間表現(IR)を作成します。ミドルエンドはこのIRに対して最適化処理を実行します。そしてバックエンドは、最適化されたIRを特定のCPUアーキテクチャ向けのターゲットマシンコードに変換します。

(画像はイメージです)
現代のコンパイラは通常、フロントエンド、ミドルエンド、バックエンドの3つの段階で構成されています。フロントエンドはソースコードを解析し、正当性をチェックして中間表現(IR)を作成します。ミドルエンドはこのIRに対して最適化処理を実行します。そしてバックエンドは、最適化されたIRを特定のCPUアーキテクチャ向けのターゲットマシンコードに変換します。
このモジュール式の3段階設計は、重要な関心の分離を実現します。フロントエンドは言語依存ですが、マシン非依存です。C++やRustといった特定の言語の構文と意味を理解します。その出力である中間表現(IR)は、抽象構文木(AST)や3アドレスコードのような、マシンに依存しない抽象的なデータ構造です。これにより、ソース言語とターゲットマシンが分離されます。
中間処理は、言語やマシンにほとんど依存しません。中間処理はIR(中間表現)を受け取り、デッドコード除去、定数畳み込み、ループ最適化などの一連の最適化処理を適用します。汎用IR上で動作するため、これらの複雑な最適化処理は一度記述すれば、そのIRにコンパイル可能なあらゆる言語に適用できます。
最後に、バックエンドはマシンに依存しますが、言語には依存しません。最適化されたIRを受け取り、命令選択、レジスタ割り当て、命令スケジューリングを実行して、x86-64やARMなどの特定のターゲットアーキテクチャ向けに効率的なマシンコードを生成します。この構造により、M個のフロントエンドとN個のバックエンドを作成するだけで、M個の言語とN個のターゲットをサポートするコンパイラを構築することが可能になります。これは、GCCやLLVMといった最新のコンパイラインフラストラクチャに典型的に表れています。
ボットによるトラフィック(現在1日あたり4万件以上)を排除するため、このコンテンツはコミュニティメンバー限定となっています。
> ログイン < または > 登録 < (100%無料)でこれにアクセスできます。他のすべての制限付きコンテンツとツールも同様です。
3段階コンパイラ構造
(日付が不明または関連性がない場合、例えば「流体力学」などでは、その注目すべき出現時期の概算値が提示されます。)
フルサイズの画像とダウンロードは、登録会員のみが100%無料で利用できます。
> ログイン <