コンパイラとインタプリタの違いは?言語の違いを分かりやすく解説!

こんにちは。大学に通いながらブログを書いている今井@ima_maru)です。

プログラミングにおいての「インタプリタ」「コンパイラ」

これらの違いはプログラミング言語で書かれたソースコードの実行方法の違いです。

そもそもプログラミング言語で書かれたコードは人間にとってわかりやすいように作られていますが、コンピュータにとっては「なんのこっちゃ?と思われるようなものなのです。

なので、一度「コンピュータにわかりやすい」「コンピュータに理解してもらえる」ように機械語(0101などの羅列)へ翻訳してからでないとプログラムを実行することができません。

今回解説するインタプリタ型言語コンパイラ型言語の特徴を簡単に表にまとめるとこんな感じです。

インタプリタ型言語 コードを一行一行機械語へ翻訳し実行していく
コンパイラ型言語 一度すべてのコードを機械語に翻訳してそれを実行する

この記事では、これらの違いを図を使ってわかりやすく解説し、
二つの種類のメリットやデメリットなどを紹介していきます。

  • そもそもどういう意味?何が違うの?
  • それぞれのメリット、デメリットは?
  • 代表例でどんな言語があるの?
プログラミング初心者におすすめのスクール4選

コンパイラ型とインタプリタ型の違い

コンパイラ型言語とインタプリタ型言語の違いは、プログラムの実行方法にあります。

コンパイラ型言語は、プログラミング言語で書かれたコードを「コンパイル」という処理で実行可能な機械語に一括翻訳して、その機械語を実行することでプログラムを機能させます。

一方、インタプリタ型言語は、プログラミング言語で書かれたコードを一行読んでは機械語に翻訳し実行、また一行読んでは翻訳し実行という逐次翻訳の手法を取ります。

そもそも実行可能なプログラムとは、私たちが見ているプログラミング言語で書かれたソースコードではなく、「0」と「1」だけの羅列である機械語(ネイティブコード)でなくてはなりません。

コンピュータの心臓であるCPUはこの機械語命令しか読み込めません。

そこで、どのタイミングで機械語に翻訳して実行するかというのが、この2つの言語を知るためのポイントになってきます。

コンパイラ型言語の仕組み

人間が理解しやすい言葉で書かれたプログラム(ソースコード)を、コンピュータが直接的に実行できるコード(オブジェクトコード)に全て翻訳してからプログラムを実行するプログラミング言語です。

こちらの例はC++という言語を使います。

コンパイラ型言語C++
#include <iostream>
using namespace std;

int factorial(int number)
{
	int result = 1;
	for (int i = 1; i <= number; i++)
		result *= i;
	return result;
}

int main()
{
	cout << "Hello, World!!" << endl;
	cout << "5の階乗=" << factorial(5) << endl;
}

このようなソースコードを一度コンパイラというものに通します。(このことをコンパイルと呼ぶ)

コンパイラとは、このソースコードを機械語に翻訳してくれるツールです。

コンパイルをすると、このようなファイルが生成されます。

このファイルこそ、コンパイラがソースコードから生成した機械語のプログラムなのです。

先ほどのソースコードの原型はなく、「0」「1」の羅列というコンピュータがそのまま実行可能なデータになっています。

(VisualStudioなどの総合開発環境に任せている場合でも、実はこのようなファイルが生成されています。)

このファイルを黒いコンソール画面などで実行すれば結果が返ってきます。

実行結果
Hello, World!!
5の階乗=120

これがコンパイラ型言語のプログラムの実行方法です。

  1. プログラムを作成する
  2. コンパイルする(機械語の実行可能ファイルが生成される)
  3. 実行可能ファイルを実行する

次は、インタプリタ型言語を見ていきましょう。

インタプリタ型言語の仕組み

人間が理解しやすい言葉で書かれたプログラム(ソースコード)を、コンピュータが直接的に実行できるコード(オブジェクトコード)に逐次翻訳しながらプログラムを実行していくプログラミング言語です。

例としてPythonの対話型インタプリタをあげましょう。

↓のように問いに対して1対1で答えが返ってきます。

インタプリタ型言語Python
>>> print ("Hello, World!!")
Hello, World!!
>>> def factorial(num) :
...     result = 1
...     for i in range(num): 
...         result *= i + 1
...     return result
>>> print("5の階乗=" + str(factorial(5)))
5の階乗=120

このようにひとつコードを打って実行。

もうひとつコードを打って実行とできるのがインタプリタ型言語の特徴です。

これがインタプリタ型言語のプログラムの実行方法です。

  1. プログラムを作成する
  2. 実行する(一行一行機械語に翻訳されてその場で実行)

もちろんコンパイラ型言語の例のように一括でプログラムを実行することはできますが、結局内部では一行一行翻訳され実行されています。

このようにコンパイラ型言語とインタプリタ型言語の違いは、「一括で全て機械語に翻訳するか」「一回一回機械語に翻訳して実行していくか」という点です。

この違いが、プログラミングにおいてどのような影響を及ぼすのでしょうか?

コンパイラ型言語のメリットとデメリット

実行速度が速い

コンパイラ型言語は、一度すべてのソースコードを機械語に直しておくため、インタプリタ型言語に比べて実行速度が速いです。

わかりやすい例えでいうと、

  • 日本語に翻訳された本を読むか
  • 英語の本を一行一行日本語に翻訳しながら読むか

この違いです。明らかに前者のほうが効率的です。

いちいちコンパイルが面倒

プログラムを実行するために一回一回コンパイルが必要なため、プログラムを途中で確認することが面倒という点があげられます。

いきなりエラーが何か所にも出て大混乱!なんてこともあります。

こまめなチェックが必要になってくるのが少し気になることはあります。

コンパイラ型言語の特徴

実行速度が速いというのがおおきなメリットなので、
大規模で計算量の多いシステムを構成するのに適している」といえます。

インタプリタ型言語のメリットとデメリット

プログラムをただちに実行できる

インタプリタ型言語は、ソースコード(人間が理解しやすいプログラム)を一行一行すぐに実行できるため、コンパイラ型言語に比べプログラムの確認・修正が行いやすいです。

実行速度が遅い

コンパイラ型言語と違い、プログラムを実行するために一回一回機械語に翻訳するため、その時間分実行速度が遅くなります。

その結果、コンパイラ型言語より実行速度が劣るという点があげられます。

ゴリゴリに実行速度を出したいプログラムならインタプリタ型言語は避けるべきでしょう。

インタプリタ型言語の特徴

プログラムの修正が簡単だが、すこし実行速度が劣るので、
小規模のシステムや比較的単純なプログラムを書くのに適している」といえます。

結局どっちがいいか?

コンパイラ型言語とインタプリタ型言語はどっちがいいかと聞かれたら私はこう答えます。

「状況によって変わる」

これがベストアンサーだと思います。

その理由は、コンパイラ型言語のほうが活躍する分野もあれば、インタプリタ型言語のほうが活躍する分野もあるからです。

例えば、高速なアルゴリズムを組んで処理をできるだけ速くしたいのならば、コンパイラ型言語のほうが高速でいいと思いますし、小規模プロジェクトで開発スピードが命ならばインタプリタ型言語のほうが生産性も高くていいと思います。

そんなこんなで、適する場面は変わってくるわけで、あなたがどの言語を学ぼうか迷っているならば、まず自分が何をやりたいかを見つけることが大切です。

その業界で多く使われている言語はそれなりの理由があります。そしたらコンパイラかインタプリタかなんて言うほど関係ありません。

人気のインタプリタ型言語

JavaScript

JavaScriptは、HTML、CSSとともにWebサイト開発に欠かせないプログラミング言語です。

【JavaScript】特徴と学習難易度を紹介!【入門】

\ JavaScriptで自分だけのWebサイトを作ろう!!/

最短2か月で効率的にJavaScriptを学習する!

Python

Pythonは、人工知能(AI)の分野に強いプログラミング言語です。

【Python】特徴と学習難易度を知ろう!【入門】

\ PythonでAI(人工知能)をマスターしよう!!/

今が熱い!PythonでAIの波に乗る!

Ruby

Rubyは、日本人(まつもとゆきひろ氏)が開発したWeb系に強いプログラミング言語です。

\ Rubyを使ったWebサイト開発をしよう!!/

未経験からRuby on Railsをマスター!

PHP

PHPは、Web系のサーバーサイドによく用いられ、Webサイト開発に欠かせないプログラミング言語です。

【PHP】特徴と学習難易度を紹介!【入門】

\ PHPでオリジナルのWebサービスを作ろう!!/

未経験からWeb制作をマスター!

人気のコンパイラ型言語

Java

(Javaは処理系が少し特殊ではあるが、一応コンパイラ型言語に分類される。)

Javaは、業務システムやAndoroidアプリなど様々な分野で活躍するプログラミング言語です。

【Java】特徴と学習難易度を知ろう!【入門】

\ Javaを使ってWebサービスを開発!!/

Javaを勉強したいと考えている方におすすめ!

C#

C#は、Microsoftが開発しているWindowsアプリケーションに強いプログラミング言語です。

【C#】特徴と学習難易度を紹介!【入門】

\ C#でUnity開発をマスターしよう!!/

3DゲームやVRも開発をできるようになる!

C(言語)

C言語は、とても速い実行速度を持ち、組み込みソフトウェアに多く用いられています。

【C言語】特徴と学習難易度を知ろう!【入門】

C++

C++は、とても汎用性が高く、実行速度も速いプログラミング言語です。

C++を学ぶ意味やメリットは?今学ぶ価値はあるのか?

2019年のプログラミング言語ランキング

2019年のプログラミング言語の人気度データを紹介しています。

プログラミング言語を将来性からランキングで紹介!【2019年最新版】

最後に

インタプリタ型言語とコンパイラ型言語についてみてきましたが、どうでしょうか。

学習難易度はコンパイラ型言語のほうが高いと思います。私はC言語(コンパイラ型言語)から学びましたが、コンパイルの際にエラーがいっぱいでて困ることが多々ありました。それゆえに、多くのことを学べたんですけどね。

はじめにコンパイラ型言語を学ぶのも全然いいと思います。つまづいたときは、学習難易度が比較的低いインタプリタ型言語に切り替えるのも手だと思います。

記事を書いて思ったのですが、いまはインタプリタ型やコンパイラ型などと言って区別しなくてもいい時代だと私は思っています。知っていて損はないですが、いろいろな開発環境があり気にしなくてもいいレベルにまでなってきました。

プログラミングを学ぶメリット5選!!独学で学ぶことは可能?

最後まで読んでいただきありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です