中間言語(ちゅうかんげんご)
最終更新:2026/4/19
中間言語は、コンパイラやインタプリタの処理過程において、ソースコードと機械語との間に生成される、ハードウェアに依存しない抽象的なプログラム表現である。
別名・同義語 中間表現IR
ポイント
異なるプログラミング言語間の翻訳や、最適化処理を容易にする役割を担う。特定のハードウェアに依存しない。
中間言語とは
中間言語(Intermediate Representation, IR)は、プログラミング言語のコンパイラやインタプリタにおいて、ソースコード(高水準言語)とターゲットコード(機械語)の間に生成される、抽象的な表現形式です。ソースコードを直接機械語に変換するのではなく、まず中間言語に変換し、その後中間言語から機械語に変換することで、コンパイラの構造を簡素化し、移植性を高めることができます。
中間言語の役割
中間言語の主な役割は以下の通りです。
- コンパイラの構造化: ソースコードの解析、意味解析、コード生成といったコンパイラの各段階を分離し、モジュール化を促進します。
- 移植性の向上: 中間言語を共通の形式で保持することで、異なるプラットフォームへの対応が容易になります。異なるターゲットアーキテクチャに対して、中間言語から機械語への変換部分のみを変更すれば済みます。
- 最適化の容易化: 中間言語上で様々な最適化処理(定数畳み込み、共通部分式の除去、デッドコードの削除など)を適用することで、生成される機械語の性能を向上させることができます。
- 多言語対応: 複数の高水準言語を共通の中間言語に変換することで、異なる言語間の相互運用性を高めることができます。
代表的な中間言語
代表的な中間言語としては、以下のようなものがあります。
- LLVM IR: LLVMプロジェクトで使用される中間言語。幅広いアーキテクチャに対応し、高度な最適化機能を提供します。
- Java bytecode: Java Virtual Machine (JVM) で実行される中間言語。プラットフォームに依存しない実行環境を実現します。
- CIL (Common Intermediate Language): .NET Frameworkで使用される中間言語。共通言語ランタイム (CLR) で実行されます。
- Three-address code: コンパイラ理論でよく用いられる、基本的な中間表現形式の一つ。
中間言語の設計
中間言語の設計は、コンパイラの性能や移植性に大きく影響します。中間言語は、高水準言語の表現力を十分に保持しつつ、機械語への変換を容易にする必要があります。また、最適化処理を効率的に行うための情報も保持することが重要です。
近年の動向
近年では、機械学習を用いたコンパイラ最適化や、GPUなどの特殊なハードウェア向けのコード生成において、中間言語の役割がますます重要になっています。