プログラミング言語には、インタプリタ言語とコンパイラ言語(コンパイル型言語)が存在します。
今回はその二つの違いについて解説していこうと思います。
言葉の意味
英語を勉強していれば、どちらの単語も見た事や聞いたことがあるかもしれません。
ただ、私は全くと言っていい程に英単語を覚えていなかったので、プログラミングを勉強する上でこの二つの単語が出てきた時は、正直全然意味がわかりませんでした。
まず、インタプリタ(interpreter) の方には、「解釈者、説明者、通訳」といった意味があります。
次に、コンパイルの(compile) 方には、「蓄積する、集める」といった意味があります。
それでは、この二つの言語について順を追って見ていきましょう。
大前提、プログラミング言語とは
そもそも、ここが分からないとインタプリタ言語とかコンパイル言語についても分からないので、まずはここについて見ていきましょう。
プログラミング言語とは、ざっくり言うとプログラム(コンピューターへの指示)を記述するための言語です。
皆さんがご存知の通り、コンピューターはとても便利で頭が良いですが、コンピューターが理解できる機械語は、数字の0と1の値だけで構成されています。でも、2進数だけで表示された物を見ても、正直意味が分からないですよね。
なので、人間はテキスト形式でコンピューターに指示を出すことができる、プログラミング言語を開発しました。
このプログラミング言語を使って指示を出すと、コンピューターが機械語に翻訳して、指示を実行してくれるのです。
インタプリタ言語
まず、インタプリタ言語とは先ほども説明しましたが、プログラミング言語の種類です。
「インタプリタ」というプログラムを処理する方法に対応した言語のことを「インタプリタ言語」と言います。この「インタプリタ」という処理方法は、プログラムを実行する際に1行ずつ機械語に翻訳して、実行していく方式です。
特徴としては、1行ずつ翻訳しながら実行ができるので、プログラムが完成していなくても実行することができ、エラーの特定や修正(デバッグ) がしやすいです。
なるほど、インタプリタ(interpreter)という英語の「通訳」という意味にピッタリな仕様ですね。また、「解釈者」という意味も、1行1行解釈していく点がぴったりです。
このインタプリタ言語の例としては、HTML・CSS・JavaScript・Python・Rubyなどの言語が挙げられます。
コンパイラ言語
次に、コンパイラ言語とは、「コンパイル」というプログラムを処理する方法に対応した言語のことです。
ちなみに、コンパイル言語とコンパイラ言語と「ル」と「ラ」の違いで色々言い方がありますが、どちらが合ってるのかは正直あまりわかりません。一応、色々なサイトを確認した感じでは「コンパイラ言語」の方が多かったように感じました。
ちなみに、英語では「Compiled Language」となっており、Wikipediaなんかでは 「コンパイル型言語」 と定義されてたりします。(Wikipedia : コンパイル型言語)
この言語は「コンパイラ」という、ソースコードを1行1行ではなく一括で機械語に翻訳して、実行していく方式で書かれた言語になります。
特徴としては、一気に読んで翻訳するので 実行速度がインタプリタ言語よりも早く、またCPUなどにかかる負荷も小さい ことなどが挙げられます。
英語のコンパイル(compile)にある、「蓄積する、集める」といった意味が何となくわかりますね。
ちなみにですが、そもそもcompileという単語には調べると分かるのですが「機械語に翻訳する」と言った意味もちゃんと出てきます。
コンパイラ言語の主な例としては、C言語・C++・Java・Swiftなどがあります。
2つの種類の違い
1行1行読んで実行していくインタプリタと、全部読んでから実行するコンパイラ、実際にその違いについて詳しく見ていきましょう。
例えば、人間がコンピューターにカレーを作る指示書を書いたとします。
1.野菜と肉を切る
2.切った野菜と肉を鍋で煮る
3.ルーを入れる
これをインタプリタ言語で書いても、コンパイラ言語で書いてもカレーは出来上がりますが、その指示書の中で書き間違いをしてしまったりしたらどうするでしょうか。
例えば手順2の段階で、「切った野菜と ”魚” を鍋で煮る」と間違った指示をしていたとしましょう。
インタプリタ言語の場合、1行1行で実行をしてくれるので、ミスがあった時点で気付いてストップをしてくれます。
しかし、コンパイラ言語では全部読んでから実行をするスタイルなので、1の指示はミス無く実行できるはずですが、2でミスをしているので、もう最初から1の実行にすら手をつけない状態でエラーが発生します。そのため、どこでミスをしたのかが分からない状態で、エラーが起こってしまい、デバッグがしづらいのです。
ここだけ見ると、コンパイラ言語はあまりメリットがない印象を受けます。しかし、思い出してください。コンパイラ言語のメリットとしては、その早さがあります。
人間も、料理をするときにレシピの手順を一つずつ読んで、その都度知らない技法や道具を調べたりして、一つずつ実行するよりも、レシピの手順に一回目を通して知らないことを調べて、それから手順通りに実行していく方が早く料理を作れますよね。
コンパイラ言語とインタプリタ言語、それぞれに良さがあるので、作りたいものに応じてその言語は使い分けをされていきます。
そのため、人間は自分が携わりたい開発の場に応じて、言語を学んでいくのです。