コンパイル(Compile)とは、人が読み書きするために書かれたプログラムを、コンピューターが実行できる形へ翻訳する作業のことです。この作業を担う道具がコンパイラで、コンパイルはその作業のほうを指します。
現実世界に例えると、コンパイルは原稿を印刷所へ回して本に仕上げる工程のようなものです。原稿のままでは読者に届きません。誤字があれば刷る前に差し戻され、直してから改めて回すことになります。
実行までの流れ
| 段階 | すること | できるもの |
|---|---|---|
| コンパイル | 翻訳して機械語にする | 部品となるファイル |
| リンク | 部品や部品集をつなぐ | 実行できるファイル |
| 実行 | できたものを動かす | 動いている状態 |
なぜ翻訳が要るのか
両者の言葉が違うためです。人が書くプログラムは英単語の並びで読めますが、コンピューターが直接理解できるのは数値の並びだけです。この隔たりを埋めるのが翻訳の役目で、書きやすさと動かしやすさを両立させています。
誤りはここで見つかる
実務上、これが大きな意味を持ちます。綴りの誤り、型の食い違い、書式の崩れといった問題は、翻訳の段階で弾かれ、動かす前に気づけます。実行してみて初めて分かる方式に比べ、不具合を早い段階で潰せるのが強みです。
インタプリタ方式との違い
翻訳しない進め方もあります。その場で一行ずつ解釈しながら動かす方式で、書いてすぐ試せる代わりに動作は遅くなりがちです。PythonやJavaScriptがこちらにあたります。試行錯誤のしやすさを取るか、速さを取るかの違いです。
中間の形にする方式もある
両者の中間もあります。いったん共通の中間形式へ翻訳し、動かす側の環境でさらに機械語へ変換するやり方です。JavaやC#がこの形で、環境ごとに作り直さなくても同じものを配れる利点があります。
環境ごとに作り分ける
ここは誤解されやすい点です。できあがったファイルは、翻訳したときの環境に合わせた形になっており、別のOSや別のCPUではそのまま動きません。Windows用とmac用が別々に配布されているのは、このためです。
時間がかかることもある
規模が大きくなると無視できません。大きなソフトでは、翻訳だけで数分から数時間かかることがあります。そのため、変更のあった部分だけを翻訳し直す仕組みや、複数の機械で分担する仕組みが用意されています。
ビルドとの関係
近い言葉があります。コンパイルは翻訳の工程そのものを指し、ビルドは翻訳から結合、配布できる形にまとめるところまでを含む広い言葉です。日常会話では区別せず使われることも多いのですが、厳密には範囲が違います。開発の現場で「ビルドが通らない」と言うときは、翻訳の段階で止まっている場合がほとんどです。

コメント