その他

Javaマスターへの道: ステップ2 – 低級言語と高級言語 コンパイラ(方式)とインタプリタ(方式)について

その他
この記事は約4分で読めます。

はじめに

株式会社インプルの奈良です。

前回は、①Javaの3つのエディション、②JDKについてまとめました。

今回は、①低級言語と高級言語、②コンパイラとインタプリタについて解説します。

この記事は、Javaについて0から学んでいくため、プログラミング初学者の方の参考になれば幸いです。

低級言語と高級言語について

低級言語高級言語はプログラミング言語の2つの大きなカテゴリです。これらの用語は、プログラミング言語が人間の読みやすさと理解しやすさ、またはコンピュータが解釈しやすい形式にどれだけ近いかという点で区別します。

低級言語とは

低級言語は、コンピュータのハードウェアに近い言語です。これには、機械語とアセンブリ言語の2つのタイプがあります。

  1. 機械語:これはコンピュータが直接解釈できるバイナリ(0と1のみからなる)コードです。これは非常に難解で人間が理解するのは困難ですが、CPUはこれを直接実行することができます。
  2. アセンブリ言語:これは機械語の少し上のレベルの言語で、シンボリックな命令コードを使用します。アセンブリ言語は特定のCPUアーキテクチャに依存しますが、プログラマはこれを使って直接ハードウェアを制御することができます。
高級言語とは

高級言語人間が理解しやすい形式で書かれ、一般的には特定のプログラミングパラダイム(手続き型、オブジェクト指向、関数型など)に基づいています。Java、Python、C++、JavaScriptなどはすべて高級言語の例です。

高級言語の利点は、開発者がコードを簡単に読み、書き、理解できることです。さらに、これらの言語はプラットフォーム非依存であり、同じコードを異なるタイプのコンピュータ上で実行することができます(ただし、それぞれのマシンで適切なコンパイラまたはインタプリタが必要です)。しかし、これらは低級言語ほど効率的ではないかもしれません。

低級言語と高級言語の間には明確な境界はありませんが、言語は一般的にこのスペクトル上に位置づけられます。C言語はしばしば中間的な位置づけられ、それは比較的低レベルのハードウェアアクセスを可能にする一方で、高レベルの抽象化も提供します。

コンパイラとインタプリタについて

上述した通り、高級言語は人間寄りの言語になりますので、我々エンジニアにとっては理解しやすいのですが、そのままではコンピューターが理解できません。

そこで、高級言語で書かれたプログラムをコンピューターが理解できる低級言語に変換する作業が必要になります。

この作業をコンパイルと言います。コンパイルには、そのために作られたソフトウェアを使用しますが、そのソフトウェアをコンパイラと言います

また、プログラムの実行方法には、コンパイルを行わないやり方もあります。それは、インプリンタと呼ばれるソフトウェアを使い実行する方法です。インプリンタは実行の際にソースコードを逐次解釈し、処理を行います。

コンパイラ(方式)とは

コンパイラ(方式)とは、プログラミング言語で書かれたソースコード全体を一度に機械語(バイナリコード)に変換します。この変換されたコードは、その後、実行ファイルとして直接実行されます。

この方式の主な利点は、一度コンパイルされたコードが高速に実行できることです。なぜなら、機械語はコンピュータが直接理解できる形式だからです。

しかしながら、コンパイラ方式にはデメリットもあります。ソースコードを変更するたびに、新しい実行ファイルを生成するためにコンパイルを再実行する必要があります。

さらに、生成された実行ファイルは特定のハードウェアやオペレーティングシステムに依存することが多いです。CやC++のような言語は、コンパイラ方式を使用します。

インタプリタ(方式)とは

インタプリタ(方式)とは、ソースコードを1行ずつ読み込み、すぐに実行します。これにより、ソースコードを編集してすぐに結果を見ることが可能になります。さらに、一部のインタプリタはプラットフォーム非依存であり、同じソースコードをさまざまな環境で実行することが可能です。

しかし、インタプリタ方式の主な欠点は実行速度です。なぜなら、インタプリタはプログラムを実行するたびにソースコードを解析し直す必要があるからです。PythonやRubyのような言語は、インタプリタ方式を使用します。

Javaはコンパイラ方式とインタプリタ方式の組み合わせ

Javaは、これら二つのアプローチをユニークな方法で組み合わせた言語です。

Javaのソースコードは最初にJavaコンパイラによりバイトコードにコンパイルされ、そのバイトコードはJava仮想マシン(JVM)上でインタプリタとして実行されます。

これにより、Javaは「一度書けば、どこでも実行できる」(Write Once, Run Anywhere)という特性を持つことができます。

奈良
奈良

ソースコードをコンパイルすると、バイトコード(中間コード)が作成されることもポイントなので覚えておきましょう!

さいごに

今回は、①低級言語と高級言語、②コンパイラとインタプリタについて解説しました。

次回は、①文法上(慣習上)のルール、②mainメソッド、③コメントについて解説します。