AxiZ沖縄ブログ

エンジニア育成学校【AxiZ沖縄】のブログです。

プログラミング言語の分類とJavaの立ち位置

プログラミング言語の分類

プログラミング言語は実に様々な種類があります。
そのため分類の仕方も様々ありますが、
ここではプログラムがどのように処理されるかで分類してみます。
そして、Javaどこに分類されるかを解説します。

コンパイラ式言語

コンピュータは、機械語(0と1)しか認識することはできません。
しかし、プログラミング言語で書かれたソースコードは当然0と1の羅列ではありません。
人間は読むことができますが、コンピュータが読むことはできません。
そこで、コンピュータが実行できる形にするために、
プログラミング言語で書かれたソースコード機械語に翻訳する作業が必要になります。

この翻訳作業のことをコンパイルといいます。
そして、コンパイルするプログラムのことをコンパイラといいます。
コンパイルされてできた機械語のファイルは、バイナリーファイルなどと呼ばれます。

何かしらのソフトウェアをインストールしたときに、
インストールしたフォルダに「bin」というフォルダが含まれていることがあります。
この「bin」というのはbinaryの略で、
つまりコンパイルされた機械語のファイルが格納されたフォルダになります。

コンパイラ式の言語の例としては、C言語があります。

インタプリタ式言語

プログラミング言語の中には、コンパイルを必要としない言語もあります。
どうやって実行するかというと、実行する際に、同時に翻訳の作業をしながら実行します。
話ながらリアルタイムで通訳しているイメージです。
この方式の言語は、インタプリタ式言語と呼ばれます。

代表的なインタプリタ式の言語は、
PHP, Ruby, Python などです。
コンパイルせずに気軽に実行できる言語という意味で、スクリプト言語と呼ばれることもあります。

コンパイラ式のメリットとデメリット

ではコンパイル式とインタプリタ式では、どちらの方が良いでしょうか。
実は、それぞれにメリットとデメリットがあるので、一概にどちらがいいとは言えません。
目的や環境によってベストな言語を使い分けることが必要です。

コンパイラ式のメリットは

  • 実行速度が速い
  • 実行前にエラーが分かる

という点です。

実行速度は、プログラムのつくり方や環境によっても大きく左右されるので、
一概に言えるものではありませんが、
機械語に訳しながら実行するのと、既に訳されたものをそのまま実行するのでは、
そのまま実行するほうが速いというのは想像しやすいでしょう。

また、コンパイル式は、コンパイルする時点で文法のエラーなどに関してはチェックをしてくれます。
そのため、実行前に最低限のエラーはなくすことができます。
インタプリタ式の言語は、実行してみるまで、
文法上にエラーがあるかどうか分かりません。

一方で、コンパイラ式のデメリットは、

  • 作成したプログラムを別の環境に移せない
  • プログラムを試すのに手間がかかる

という点です。

例えば、Windows上PCでコンパイルしたファイルを、
MacのPCにコピーして実行しようとしても動きません。
プラットフォーム(OS)が変わると、プログラムが対応できなくなります。
もし他のプラットフォームで動かすとしたら、ソースコードを移行して、
再度その環境でコンパイルし直す必要があります。

また、コンパイルしないとプログラムを実行できないので、
インタプリタ式と比べると、手間がかかるのがデメリットです。
ただし、最近は開発ツールも豊富なので、
コンパイルなどの作業を意識しなくても手軽に実行できるツールも多く、
デメリットと呼ぶほどでもなくなってきています。

インタプリタ式のメリットとデメリット

インタプリタ式では、メリットとデメリットがコンパイラ式と対照的になっています。

メリットとしては、

  • プログラムの移植が簡単
  • 手軽に試すことができる

という点です。
インタプリタ式は、ソースコード自体がプログラムとなるため、
作成したプログラムをそのままコピーすれば、環境が異なってもそのまま使用することができます。
ただし、その言語のプログラムを動かす動作環境は別途用意する必要はあります。

また、コンパイルが必要ないので、手軽に実行して試すことができるのがメリットです。

デメリットは

  • 速度が遅い
  • 実行するまでエラーが分からない

という点が挙げられます。
ただし、最近は両方ともかなり改善されており、さほど意識する必要はないかと思われます。

速度に関しては、機械語に翻訳しながらの実行なので、コンパイラ式よりも速度は劣ります。
しかし、ハードの性能の進化や言語がバージョンアップなどにより、処理も高速化しているので、
速度がネックになることは最近では少なくなってきています。

エラーに関しても、エディタや開発環境が便利になってきて、
実行前でもある程度文法のエラーは発見できるようになっています。

Javaの立ち位置

では、Javaはどちらに分類されるでしょうか。
実はJavaは両方の性質を持っています。
どういうことかというと、
Javaで書かれたソースコードは、一度コンパイルすることで、中間ファイル(クラスファイル)
と呼ばれるファイルを作成します。
そして、JVM(Java Virtual Machine, Java仮想マシン)と呼ばれるプログラムが、
中間ファイルを機械語に変換しながらプログラムを実行してくれます。

なぜそのような仕組みになったかというと、両方の性質のいいとこどりをしたかったからです。
つまり、事前にコンパイルすることで、実行前にエラーを発見したり、
処理速度を速めつつ、コンパイルしてできたファイルをほかの環境に移動してもそのまま動く仕組みにしたかったわけです。
この仕組みはJavaが先駆けたようですが、現在はこのような仕組みの言語も多数存在します。
C#」や「VB .NET」といった言語も、中間ファイルを作成して「.NET Framework」上で動くという、
同じような仕組みが使われいます。

まとめ