【こんぱいら】

コンパイラ とは?

最終更新:
💡 コードを、実行に使う別の形へ翻訳する道具

ソースコードを解析し、機械語やバイトコードなど別の形式へ変換するプログラム。出力の形式や実行までの手順は処理系によって違う。コンパイルが成功しても、すべてのバグがなくなるわけではない。

📌 このページのポイント
コンパイラ:翻訳先は、ひとつじゃないソースコード人が書いたプログラムコンパイラが解析・変換GCCの例:.oリンク → 実行ファイルjavacの例:.classJVMで実行する成功しても、結果が正しいかはテストしよう
代表的な出力と実行までの手順の例。GCCは指定によって途中の工程で止めることも、リンクまで行うこともできます。
ひよこ ひよこ
ソースコードを、何に変えるの?
ペンギン先生 ペンギン先生
機械語へ変換するものも、中間の形式へ変換するものもあるよ。たとえばGCCでCのコードからオブジェクトファイルを作る場合や、Javaのjavacで.classファイルを作る場合がある。全部のコンパイラが同じ形式を出すわけではないんだ。
ひよこ ひよこ
コンパイルすれば、すぐ実行できる?
ペンギン先生 ペンギン先生
追加の工程が必要な場合があるよ。Cなら、オブジェクトファイルやライブラリをリンクして実行ファイルを作る。GCCは指定によって前処理・コンパイル・アセンブル・リンクまでを進めたり、途中で止めたりできるんだ。
ひよこ ひよこ
Javaの.classも、実行ファイル?
ペンギン先生 ペンギン先生
Java仮想マシン(JVM)で扱うクラスファイルだよ。javacはJavaのソースをその形式へ変換する。CPUがそのファイルをそのまま実行するのではなく、対応する実行環境を使うんだ。実行環境のバージョンや使う機能なども確認する必要があるよ。
ひよこ ひよこ
インタプリタとは、正反対なの?
ペンギン先生 ペンギン先生
コンパイラは変換する役、インタプリタは命令を解釈して実行する役、と分けて考えよう。1つの処理系で両方を使うこともある。CPythonもPythonのソースをバイトコードへコンパイルし、それを実行する。言語名だけで、必ず1行ずつ実行する、必ず速いと決めないことが大切だね。
ひよこ ひよこ
コンパイル成功なら、バグはない?
ペンギン先生 ペンギン先生
文法や型などの問題を検出できる場合はあるけれど、成功は正しい結果の保証ではないよ。計算式の間違いや想定外の入力などは、テストや実行で確かめる。コンパイラはコードの変換と検査を助ける道具で、仕様に合うかの確認まで代わりにしてくれるわけではないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「コンパイラ」って出てきたら「コードを、実行に使う別の形式へ翻訳するプログラム」と思えばだいたいOK!
📖 おまけ:英語の意味
「Compiler」 = コンパイルを行うプログラム
💬 コードを解析して別の形式へ変換する処理をコンパイルと呼ぶよ。何に変換するかはコンパイラによって違う。

参考資料

← 用語集にもどる