1. 序章

このチュートリアルでは、コンパイルされたプログラミング言語とインタプリタされたプログラミング言語の違いを紹介します。

2. なぜコンパイラとインタプリタが必要なのですか?

コンピューターは、バイナリコードのみを理解して実行できます。 プログラマーは、C、Python、Javaなどの高級プログラミング言語を使用します。 これらの言語は、人間の言語や数学表記に似ているため、操作が簡単です。 ただし、コンピューターは高級言語で記述されたコードを実行できません。 最初にそれをバイナリコードに変換する必要があります。 そのために、コンパイラインタープリターを使用します。

私たちが通常コンパイルするプログラムの言語は、コンパイル言語と呼ばれます。 同様に、私たちが通常解釈するものは、解釈された言語と呼ばれます。

3. コンパイラ

コンパイラはプログラム全体を入力として受け取り、それを実行可能なバイナリコードにいくつかのステップで変換します。

バイナリコードは、コンパイルしたマシンでのみ実行できます。 これは、バイナリコードがハードウェアに依存し、移植性がないためです。

コンパイル手順は1回だけ必要です。 その後、バイナリコードを何度でも実行できます。

コンパイラはプログラム全体を処理するため、いくつかのエラーをキャッチし、それらを修正するように警告することができます。 これらは構文と型のエラーです。 それらが存在する場合、コンパイルは失敗します。

C は、コンパイル型言語の例です。

4. 通訳者

通訳者は、手元のプログラムを命令ごとに読んで実行します。 読み取られた後、各命令はマシンのバイナリコードに変換されて実行されます。

コンパイラとは異なり、インタプリタはバイナリ実行可能ファイルを生成しません。 プログラムを実行するたびに、インタープリターを呼び出します。 次に、プログラムを一度に1命令ずつ読み取り、実行します。

そのため、プログラムを実行するときは常にコンピュータのRAMに存在する必要があります。 インタープリターとは対照的に、コンパイラーはコンパイル時にのみ必要です。

一方、コンパイラとは異なり、インタプリタは実行時にすべてのエラーをキャッチします。

Pythonは解釈された言語の例です。

5. コンパイルと解釈の例

名前のない言語のコードを想像してみてください。

a := 1;
b := 2;
c := a + b;
print(c);

コンパイラはそれをバイナリコードに変換します。これは後で実行できます。

これらのバイナリ命令はすべて、手元のコンピュータのコマンドです。適切なCPUレジスタを1に設定するように命令します。 その後、レジスタの内容を書き込むためにRAM内の空きアドレスを選択します。 これが、コンパイラが a:=1;をバイナリコードに変換する方法です。 他のバイナリ命令は、残りのコードをマシンのバイナリ言語に翻訳したものです。

バイナリコードを実行すると、RAMに読み込まれ、CPUが実行します。

一方、インタプリタは最初に命令 a:=1;を読み取ります。 それをコンピュータのRAMにロードし、バイナリコードに変換して、CPUに実行させます。 次に、インタプリタは命令 b:=2;で同じことを行います。 2番目の命令の後、3番目に移動し、最後に最後の命令に移動します。

したがって、コンパイラを使用すると、変換と実行が分離されていることがわかります。 しかし、私たちのプログラムを解釈すると、それらは絡み合っています。 そのため、通常、コンパイルされたプログラムを実行するよりも解釈が遅くなります。

6. 違い

コンパイラとインタプリタの違いを要約してみましょう。

通常、プログラミング言語はコンパイルまたはインタプリタのいずれかと見なされることに注意してください。 それでも、Python 用のコンパイラーを作成するのと同じように、C用のインタープリターを作成できます。

さらに、一部の言語では両方の概念が混在しています。 たとえばでは、最初にJavaプログラムをJava仮想マシンのコードであるバイトコードにコンパイルします。 その後、バイトコードを解釈します。

7. 結論

この記事では、コンパイル後または解釈中にプログラムを実行する方法について説明しました。 また、これら2つの実行方法の違いについても話しました。