tanaka101

コンパイル

別名: Compile, コンパイラ, Compiler, コンパイル言語

コンパイルとは、人間が書いたソースコードを、コンピュータが実行できる形式に翻訳することです。

この翻訳を行うプログラムのことをコンパイラ(Compiler)と呼びます。

なぜコンパイルが必要なのか

コンピュータが直接理解できるのは「機械語」と呼ばれる 0 と 1 の羅列だけです。 しかし、人間が 0 と 1 でプログラムを書くのは現実的ではありません。

そこで、人間が読み書きしやすいプログラミング言語でコードを書き、コンパイラに翻訳してもらいます。

実際にコンパイルすると何が起きるのか

言葉で説明するより、実物を見たほうが早いです。
C言語で「Hello」と表示するだけの簡単なプログラムをコンパイルしてみましょう。

人間が書くソースコード(C言語):

#include <stdio.h>
 
int main() {
    printf("Hello");
    return 0;
}

たった6行の、読めばなんとなく意味がわかるコードです。

コンパイル後(機械語の一部を16進数で表示したもの):

55 48 89 e5 48 8d 05 a8 0e 00 00 48 89 c7 b8 00
00 00 00 e8 e1 fe ff ff b8 00 00 00 00 5d c3 00

人間には意味不明な数字の羅列ですが、コンピュータはこれを読んで命令を実行します。 コンパイラは、人間が書いたコードをこのような形式に翻訳してくれるプログラムです。

コンパイルの流れ

ソースコードが実行されるまでの一般的な流れです。

ソースコードを書くコンパイラが翻訳する実行ファイルが生成されるコンピュータが実行する

コンパイル言語とインタプリタ言語

プログラミング言語は、コードの実行方法によって大きく2つに分かれます。

種類仕組み代表的な言語
コンパイル言語実行前にまとめて翻訳するC, C++, Go, Rust
インタプリタ言語実行しながら1行ずつ翻訳するPython, Ruby, PHP
  • コンパイル言語は、外国語のレシピ本を事前にすべて翻訳してから調理を始めるイメージです。準備に時間がかかりますが、調理自体はスムーズに進みます。
  • インタプリタ言語は、外国語のレシピ本を1行ずつ翻訳して調理するイメージです。すぐに始められますが、調理はスムーズには進まないでしょう。

※ただ、現代の言語処理系は最適化が進んでおり、単純に「コンパイル言語=速い、インタプリタ言語=遅い」とは言い切れません。

まとめ

  • コンパイルはソースコードをコンピュータが理解できる形式に翻訳すること
  • 翻訳を行うプログラムをコンパイラと呼ぶ
  • コンパイル言語は事前に翻訳し、インタプリタ言語は実行時に翻訳する