【ちゅうかんひょうげん】
中間表現(IR) とは?
💡 ソースとマシンコードの「通訳メモ」。これがあるから一つのコードが何でも動かせる。
📌 このページのポイント
- ソースコードとネイティブコードの中間に位置する抽象的な表現
- 最適化パスをIRレベルで行うことで、言語ごとに最適化を書き直す必要がなくなる
- 同じIRから複数のCPUアーキテクチャ向けにコードを生成できる(LLVMが代表例)
- JVMバイトコードもIRの一種で、異なるOSで同じバイトコードが動く仕組みを支える
中間表現って、コンパイルの途中で何か別のコードが生まれるってこと?
なんでわざわざ中間を挟むの?
LLVMって聞いたことあるけど、これもIRと関係あるの?
JVMバイトコードもIRの仲間なの?
IRを見ることって実際にあるの?
あるよ。たとえばClangなら `clang -emit-llvm -S` でLLVM IRをテキストで出力できるし、コンパイラを自作するときにはIRの設計が最大の課題になるんだ。WebAssemblyも一種のIRとして扱われることがあって、IRの概念はとても幅広いよ。
まとめ:ざっくりこれだけ覚えればOK!
「中間表現(IR)」って出てきたら「コンパイラがソースとマシンコードの間に作る抽象的な中間コード」と思えればだいたいOK!
📖 おまけ:英語の意味
「Intermediate Representation」 = 中間表現
💬 コンパイラ理論で古くから使われてきた概念で、「中間(Intermediate)」はソースとターゲットの中間にある、「表現(Representation)」はコードを別の形で表したもの、という意味だよ。