コンパイラーとは? - 1

「こんにちは、アミーゴ。私はハンズ・ヌードル教授だ。ギャラクティック・ラッシュ号で科学委員会の会長を務めているものじゃ。おぬしに Java プログラミングを教える活動の監督もしておる。

「こんにちは、ヌードル教授。」

Java がとてもクールなプログラミング言語である理由を説明したいと思う。

「他の言語にはない Java のメリットは、プラットフォームに依存しないという点であるとよく耳にすることになるだろう。それはどういうことで、どう役に立つのか、と不思議に思うのではなかろうか?ちょっと遠回しになるが説明してみよう。」

「コンピューターは数値による単純なコマンドしか実行できない。犬をしつけるとき、我々は 'ヒール' や 'お手' などの命令を使って犬にさせたいことを指示する。」

「コンピューターの場合は、数字がこのような役割を果たすのじゃ。コマンドはそれぞれが特定の数字やコード (マシンコードと呼ばれることもある) で表現される。」

「しかし、数字だけでプログラムを書くのはとても難しいから、人間はプログラミング言語コンパイラーを発明したのじゃ。プログラミング言語だと、人間とコンパイラーの両方が理解できるからだ。コンパイラーとは、プログラミング言語で書かれたプログラムを一連のマシンコードに変換する特殊なプログラムのことじゃ。」

「通常、プログラマーはプログラミング言語でプログラムを書き、それからコンパイラーを実行する。その結果、プログラマーが書いたプログラムコードのファイルはマシンコードが書かれた 1 つのファイル、つまり (コンパイル済みの) 最終プログラムへと変換されるのじゃ。」

  • C++ で書いたプログラム
  • コンパイラー
  • マシンコード

「出来上がったプログラムはコンピューターですぐに実行できるのじゃ。問題なのは、最終プログラムのコードはプロセッサーとオペレーティングシステムに強く依存するということ。これは Windows 用にコンパイルされたプログラムは Android のスマートフォンでは動作しないということなんじゃ。」

「ということは、プログラムを書いて、Android 用にコンパイルしたら、それは Windows では動作しないってことですか?」

「そのとおりじゃ。」

「なるほど。」

「しかしじゃ、Java ではもっと革新的なアプローチが使われておる。」

  • Java で書いたプログラム
  • Java  コンパイラー
  • プラットフォームに依存しない特殊なコード (バイトコード)
  • JVM
  • マシンコード

「Java コンパイラーはすべてのクラスを 1 つのマシンコードのプログラムにはコンパイルせず、代わりに、各クラスをマシンコードではなく、特殊な中間コード (バイトコード) に別々にコンパイルする。そして、バイトコードはプログラムが開始するときにマシンコードにコンパイルされるのじゃ。」

「プログラムは実行されるときに、何によってマシンコードにコンパイルされるんですか?」

「Java virtual machine (JVM) という特殊なプログラムがある。バイトコードのプログラムを実行するときは、まず最初にこの JVM を起動しておく必要があるんじゃ。そして、プログラムが実行される前に、JVM がバイトコードをマシンコードにコンパイルするようになっておる。」

「面白いですね。でも、どうしてそれが必要なんですか?」

「これはとてもパワフルなアプローチで、Java の圧倒的な人気を支える理由の 1 でもある。」

「このアプローチにより、Java で書かれたプログラムは実質的にコンピューター、スマートフォン、ATM、トースターなど、ありとあらゆるデバイスで動作するのじゃ。クレジットカードでも動作するのじゃよ!」

「なんてクールなんだ!」

「このアプローチにはたくさんのメリットがある。だからこそ、Android のプログラムはすべて Java で書かれておるのじゃ。携帯電話業界の急速な成長により Java がプログラミング言語として主に使用されるようになった業界を紹介しよう。

1) エンタープライズ: 銀行、企業、投資資金などでの使用を対象としたサーバー指向の大規模なアプリケーション。

2) 携帯電話: Android を使ったモバイル開発 (スマートフォン、タブレットなど)。

3) ウェブ:PHP がリードしているが、Java も安定して市場のシェアを占めている。

4) ビッグデータ: 何千ものサーバーで構成されたクラスターで行われる分散コンピューティング。

5) スマートデバイス: スマートホーム、電子デバイス、IoT、冷蔵庫などのプログラム。」

「Java は単なる言語ではなく、プログラムで使用できる数百万個にもおよぶ既成モジュールのほか、他のユーザーからサポートを受けたり、自らアドバイスを提供したりできる数千ものオンラインコミュニティやメッセージボードを提供するなど、エコシステム的な存在でもあるのじゃ。」

「どうして Java なのか?という疑問の答えは、Java でプログラムを書けば書くほど明確になっていくものだ。今日はここまでにするか。」

「ありがとうございました、教授。すごく面白くて、もっと勉強したくなりました。」