コンパイルとは?機械語から翻訳って?

アイキャッチ画像

ソフトウェア開発において、プログラムは人間が理解しやすい言語で書かれたソースコードですが、コンピュータのマイクロプロセッサが実行できる形式ではありません。そのため、ソースコードをコンピュータが理解できる機械語のバイナリコードに変換する必要があります。この変換作業をコンパイルと言います。

一般的に、コンパイルだけではプログラムが動作するわけではなく、コンパイル前に前処理(プリプロセス)が必要であったり、コンパイル済みのプログラムを起動可能な状態にするために他のプログラムと連結(リンク)したりする必要があります。これらの工程を含めた一連の処理をビルド(build)あるいはメイク(make)と呼びます。

プログラマーが書く「ソースコード」はプログラマ以外が見ても何が書いてあるかさっぱり分かりませんが、コンピュータはこの人間が書いたソースコードを読めません。コンピュータを実行させるには2進数の「機械語(バリナリコード)」に変換が必要になります。

コンピュータが読めるコードに「翻訳」するイメージです。

これを「コンパイルする」と言います。もちろん人間がコンパイルすることはほぼ不可能なので、この変換作業は「コンパイラ」というものを使って行うことになります。

なお、コンパイルが必要なプログラミング言語(コンパイラ言語)の例としては以下があります。

  1. C言語
  2. C++言語
  3. Java言語
  4. C#言語
  5. Objective-C言語
  6. Pascal言語
  7. Fortran言語
  8. Ada言語
  9. Swift言語
  10. Rust言語

これらの言語は、ソースコードをコンパイラによって機械語に変換する必要があります。一方で、スクリプト言語などの一部の言語には、コンパイルの必要がないものもあります。

コンパイル不要な言語には、以下のようなものがあります。

  1. Python言語
  2. Ruby言語
  3. JavaScript言語
  4. PHP言語
  5. Perl言語
  6. Shell言語
  7. Lua言語
  8. R言語
  9. Swift Playgrounds(Swift言語を利用したインタラクティブな環境)
  10. Scratch(ブロックベースの教育用言語)

これらの言語は、実行時にインタプリタによって直接解釈されるため、コンパイルの必要がありません。ただし、実行速度がコンパイルが必要な言語に比べて遅い場合があるため、処理の高速化を目的として、JITコンパイルなどの手法が採用されることもあります。

コンパイルが不要な言語は「インタプリタ言語(Interpreted language)」と言います。コンパイルが必要な言語よりも実行速度が遅くなる場合が多くなりますが、インタプリタ言語はコンパイル不要であることで、開発者が簡単かつ迅速に開発することができたり、デバッグも容易になるなどのメリットがあります。

コンパイル、ビルド、デプロイ、リリース概念図
項目説明
コンパイルソースコードを機械語に変換する。
ビルド実行可能ファイルを作成するためのプロセス。
デプロイアプリケーションを実行可能な状態にする。
リリースユーザーがアプリケーションにアクセスできるようにする。

関連URL(外部リンク)