はじめに
プログラミング言語には、C言語・Java・Python など、さまざまな種類があります。
しかし、これらの言語は大きく分けると、
「コンパイラ言語」と「インタープリタ言語」の2つに分類できます。
本記事では、
プログラムがどのように動いているのかを確認しながら、
それぞれの言語の違いについて説明していこうと思います。
結論
- プログラミング言語は大きく2つに分かれる
- コンパイラ言語
- インタープリタ言語
- 両者の違いの本質は「機械語に翻訳するタイミング」にある
- その違いが、速度や開発スタイルの差につながる
そもそもプログラムはどのようにして動くのか
エンジニアは、C言語、Java、Python等のプログラミング言語を駆使してコードを書きます。
しかし、実はコンピューターはプログラミング言語で書かれている内容を理解できません。
コンピューターが理解できるのは、0と1で書かれた機械語だけです。
つまり、
- エンジニアが書いたソースコード
- コンピューターが実行できる機械語
この間には、必ず翻訳の工程が存在します。
この「翻訳をどのタイミングで、どう行うか」が
コンパイラ言語と、インタープリタ言語の違いになります。
コンパイラ言語
コンパイラ言語では、
プログラム全体をまとめて機械語に翻訳します。
ソースコード作成から、実際にプログラムが実行されるまでの流れを図にしました。
1. コンパイル(翻訳)
まず、ソースコードをオブジェクトコード(機械語)に変換する工程が実施されます。
→ これを「コンパイル(翻訳)」と言います。
2. リンク
ソースコードをオブジェクトコード(機械語)にして、
コンピューターが解読できる状態になりましたが、この時点ではまだ実行できません。
なぜなら、ファイルごとに分かれたオブジェクトコードがまだ1つにまとまっていない状態だからです。
そのため、バラバラになっているオブジェクトコード(機械語)を1つにまとめ、実行可能なファイルを作成する必要があります。
→ これを「リンク」と言います。
→ そしてコンパイル(翻訳)~リンクまでの工程を「ビルド」と言います。
インタープリタ言語
インタープリタ言語では、
インタープリタがソースコードを1行ずつ翻訳し、それをコンピューターに指示して実行させます。
インタープリタのイメージは、外国人の話をリアルタイムで翻訳してくれる「通訳者」になります。
ソースコード作成から、実際にプログラムが実行されるまでの流れを図にしました。
インタープリタ言語は、
まとめて翻訳する必要も、事前に実行ファイルを作る必要もありません。
プログラムを書いたら、そのまま実行することができます。
それぞれのメリット・デメリット
ここまでの内容を読んでいただいた方は、
「余計な手間がかからないインタープリタ言語の方が優れているんだな」
と思うかもしれませんが、
コンパイラ言語・インタープリタ言語に絶対的な優劣というものはなく、
それぞれにメリット・デメリットがあります。
コンパイラ言語のメリット・デメリット
メリット
- 実行時の処理が速い
- CPU負荷が低い
- 大規模・高性能なシステムに向いている
デメリット
- 修正のたびに再コンパイルが必要
- プラットフォーム依存あり
- コンパイルされたオブジェクトコード(機械語)は特定の OS やハードウェアに依存する
- それぞれの環境に対応するには、その環境用にコンパイルする必要がある
インタープリタ言語のメリット・デメリット
メリット
- すぐに実行できる
- プラットフォーム依存なし
- 様々な環境で実行可能
- 試行錯誤しながら開発しやすい
デメリット
- 実行時に翻訳するため処理が遅め
- 実行環境(インタープリタ)が必要
まとめ
プログラムは必ず機械語に翻訳されてから実行されます。
コンパイラ言語とインタープリタ言語の違いは、
その翻訳をいつ、どのように行うかにあります。
実行速度や開発効率といった特徴を理解したうえで、
用途に応じて言語を使い分けることが重要です。

