プログラミングを勉強し始めて最初にぶち当たるのがインタプリタとコンパイラの違いです。実際に私も言語によってコンパイラ言語とインタプリタ言語に分類されることを知ったのですが、それぞれの意味が全く理解できなかった経験があります。
そのため、その時私はいろいろ調べて知識を得ましたが、同じような境遇の方にもぜひお伝えしたいと思いました。ソースコードをコンピューターが理解できる機械語に変換して実行するためには、インタープリタとコンパイラの二通りの方法があります。これらはソースコードから機械語を作る方法やタイミングに違いがありますが、丁寧に解説していきます。
本記事にオススメの方は以下となっています。
- コンパイラ言語とインタプリタ言語とは何かがわからない方
- プログラミングを始めたばかりの入門者の方
- コンパイラ言語とインタプリタ言語のメリット・デメリットを知りたい方
- コンパイラ言語とインタプリタ言語の代表的な言語を知りたい方
プログラミング言語はコンピューターが理解できない言語
エンジニアじゃない方は、プログラミング言語を機械が理解する言語だと思っている方が多いと思います。しかし実際は、プログラミング言語は人間が機械語を作成するための前段階の言葉です。
コンピューターはもともと「0」と「1」のデジタルで書かれたものが機械語となっており、機械語は通常人間には理解ができません。そこで、人間が分りやすい命令をプログラミング言語で記述して、それを機械語に変換する事によって最終的に機械がその命令を受け取って実行してくれます。
ここで登場するのが、インタプリタとコンパイラの2つのツールとなりますが、それぞれご説明していきます。
インタプリタとは?
インタプリタとは、プログラミング言語で書かれたソースコードを読み込むと実行しながら、ソースコードを機械語に変換してコンピューターが処理する言語です。インタプリタの特徴としては、実行しながらソースコードを機械語に変換している点で、通訳と同じように話しながら訳した言葉を伝えているイメージになります。
インタプリタは実行するときに変換を行うため、プログラムを修正して実行することを気軽に試すことができます。もし思った通りに動かなかった場合、修正を行ってまた実行をするという作業を繰り返すことができるため、少しずつプログラムを改良することができます。
しかし、処理するために変換しながら実行するという事はそれだけ時間がかかってしまいます。また実行するコンピューター自体に機械語に変換する仕組みを用意しておく必要もあります。
そのため他の人に配布しようと考えた場合、ソースコードだけでなくインタープリタも導入してもらう必要があります。ソースコードを配布する際には、ソースコードを見られたくないといった場合にはインタプリタ言語は向きません。
つまりインタプリタを一言で表すと「実行時に機械語に変換する言語」です。
コンパイラとは?
コンパイラとは、プログラミング言語で書かれたソースコードを事前に機械語に一括変換しておきます。そのため実行時には、すでに機械語に変換されたプログラムをコンピューターが処理することになりますが、ここが一番の特徴です。書籍などで文章を翻訳するようにまとめて事前に変換しておくことで、両者はその都度、翻訳されるのを待っている必要はありません。
コンパイラ言語は、プログラムを実行するために変換する必要がないため、実行時にはインタプリタよりも高速に処理することができます。インタプリタと違って、コンパイラには実行時に変換する仕組みも必要ないため、他の人に配布する場合も機械語のプログラムだけを渡せばいいことから大元のソースコードを見られる事はありません。
またプログラムの実行に使うOSなどに合わせて機械語のソースコードを生成する必要があるため、利用者の環境に合わせていくつも変換しておく必要があります。もしコンパイルされたプログラムの形式が利用者の環境と合っていない場合は、そのプログラムを実行することができないため手間はかかってしまいます。
インタプリタ言語とコンパイラ言語の違い
インタプリタとコンパイラについてご理解いただいたと思いますが、2つの違いを整理してしていきます。
コンパイラ言語は、プログラミングされたコードをコンパイルと呼ばれる処理を行った後で、機械語に一括翻訳を行い機械語を実行します(一括翻訳型)。実行ファイルは、拡張子がexeとなっており、まさにこちらが機械語のプログラムになります。
一方でインタプリタ言語は、プログラミングされたコードを1行を読み込んでは機械語に翻訳して実行し、次の1行を読んではまた翻訳し実行していくといった同時処理が行われます(逐次翻訳型)。
インタプリタ言語のメリット・デメリット
インタプリタ言語のメリット・デメリットを箇条書きでまとめると以下になります。
- コンパイル不要でプログラムを即実行可能
- プログラムの修正(デバッグ)が簡単
- 実行速度がコンパイルより遅い
インタプリタのメリット①:コンパイル不要でプログラムを即実行可能
インタプリタ言語は、逐次機械語へと翻訳していることからコンパイルが不要のため、プログラムをすぐに実行できるのが特徴です。
インタプリタのメリット②:プログラムの修正(デバッグ)が簡単
プログラミングのコードに問題があった場合に修正が容易というメリットがあります。コンパイラ言語とは違って一括で翻訳するわけではないので、修正が発生した時は簡単ですね。
インタプリタのデメリット①:実行速度がコンパイルより遅い
インタプリタの特徴でもある逐次翻訳型のため、それだけ処理の負荷がかかってしまいます。あなたも同時進行で作業をした場合、効率が悪くなってしまうのと同じように実行速度が遅くなるのはデメリットです。
コンパイラ言語のメリット・デメリット
コンパイラ言語のメリット・デメリットを箇条書きでまとめると以下になります。
- プログラム処理速度が速い
- プログラム実行に手間・時間がかかる
- プログラムの修正(デバッグ)が容易ではない
コンパイラのメリット①:プログラム処理速度が速い
インタプリタは逐次翻訳型なので処理速度が遅いと伝えましたが、コンパイラはソースコードを機械語へと一括で翻訳する一括翻訳型のため、処理速度が速いです。
コンパイラのメリット②:プログラム実行に手間・時間がかかる
一括翻訳のため、プログラミングをした後にコンパイルをする手間が発生します。コンパイルは一瞬でできるものではなく、処理するのに時間がかかるため待たなければいけません。
コンパイラのデメリット①:デバッグが簡単にできない
コンパイラ言語は一括で翻訳して機械語に変化したのち、実行をしてエラーが発生するかを確認する必要があります。そのためもしバグが発生した場合は、デバックをしたら再度コンパイル作業が発生するため気軽に修正ができません。
インタプリタとコンパイラの代表言語
インタプリタとコンパイラの2種類があるのはわかりましたが、実際にその2種類に分類されるプログラミング言語が何なのかがわからないと思いますので説明していきます。
インタプリタの言語例
- PHP:サーバーサイドで動的なWebページを作成
- JavaScript:ブラウザ上でWebページをリッチに動きをつける
- Python:人工知能や自動化が得意
- Ruby:日本で開発されたオブジェクト指向スクリプト言語
コンパイラの言語例
- JAVA:世界中の基幹システムやAndroidアプリに使用
- C#:ゲーム開発やVR/AR、アプリ開発に使用
- GO:Googleが開発した処理速度が速い
- COBOL:金融機関のシステムに使用
コンパイルとビルドとは?
コンパイラの機械語に変換する作業をコンパイルといいます。実際にはコンパイルしただけでは実行ファイルは生成できません。そのためライブラリーとのリンクと言う紐付け作業を行う必要があるのですが、そのコンパイルやリンクなどの一連の作業のことをビルドといいます。
1つの画面でソースコードの生成からコンパイルリンクまで行えるソフトウェアをIDEといい、コンパイルよりも「ビルド・リビルト」という言葉が多く使われます。
IDEとはソフトウェアの開発に便利な機能が備わったIDE(Integrated Development Environment)ですが、テキストエディタに加えてコンパイラや、デバッグを効率的に行うツールであるデバッガーなどをまとめたソフトウェアです。「ソースコードの入力・コンパイル・テスト」などを1つのアプリケーションだけで実現できることからとても便利です。有名なIDEは、Eclipse、VisualStudio、Xcodeなどがあります。
最近のプログラミング言語の特徴
インタプリタとコンパイラの違いを説明しましたが、実は最近ではインタプリタとコンパイラを明確に分けられない状況になってきています。直接機械語に変換するのではなく、バイトコードと呼ばれる中間言語に変換して、仮想マシンでこの中間言語を実行する言語が増えてきています。
中間言語を利用することによって、様々なOSや環境で同じプログラムを実行できるようになるだけでなく、インタプリタよりも高速な処理を実現できるのがメリットであり特徴です。ちなみにインタプリタ言語として有名なRubyはYARVと呼ばれているバイトコードインタプリタを用いています。Rubyはソースコードを一旦全て解釈し、バイトコードに変換した上で実行しています。
また、言語のソースコードを変換して他のプログラミング言語のソースコードを生成する「トランスパイラー」と呼ばれるプログラミング言語も登場してきています。今後さらにもっとエンジニアにとって有益なツールが出てくるかもしれませんね。
インタプリタとコンパイラとは?のまとめ
非エンジニアの方にはインタプリタとコンパイラの違いがわからなかったと思いますが、理解いただけましたでしょうか。プログラミング言語は機械が理解できるものではなく、人間が理解できる言語です。そのためソースコードを機械語に変換することで、機械が命令を理解して処理してくれるようになります。
インタプリタとコンパイラは、逐次翻訳型と一括翻訳型に分けられ、それぞれメリット・デメリットがあります。
言語によってどちらかに分類されますが、自分に合うかどうかの相性もあるためどちらもトライして決めることをオススメします。ちなみに私はインタプリタ言語の方が記述が簡単なため、PHPやJavascript、Pythonなどを利用しています。
コメント