まだセキが止まらない・・
あまりにもコンピュータやプログラムの知識がないことが思い知らされ、
ブログのタイトル通り、少し憂鬱な気分に陥ってしまいました。
まぁ、知らないことは仕方がありませんので、
ひたすら勉強するのみです。
で、
どうせなら、私が勉強した内容を、ここで展開しようかなと思いました。
人に教えることで、自分の中に知識としてしっかりと残すことができるのです。
本日の内容は『コンパイルについて』です。
コンパイルというのは、人間の書いたプログラムコードを、
コンピュータの分かるようなマシン語というコードに置換することです。
コンパイルする装置を、コンパイラといいます。
使用する言語によって、コンパイルの方法も異なっております。
今回は、「C」と「java」に絞って、両者の違いについて述べたいと思います。
・C
C言語は「コンパイラ言語」と呼ばれており、
プログラムコードをマシン語に、一括してコンパイルします。
・java
javaは「インタプリタ言語」と呼ばれております。
インタプリタというものは、プログラムを一括ではなく
1行ずつ解釈しながら実行するというものです。
javaは、コンパイラによって「中間言語」という独自の言語に一旦置換し、
「中間言語」をインタプリタによって実行するという処理を行っております。
javaはなんて面倒くさいことをしているんだと思いますよね。
その辺りは後で話すとしまして、先に両者の違いについて掘り下げます。
コンパイラ言語は、一括してソースを変換します。
例えば、プログラムソースの最後の最後にエラーが合った場合、
『ダメですよー』なんて言われて、コンパイルは失敗します。
ただ、処理速度はインタプリタ言語に比べると早いです。
といいますのも、
インタプリタ言語というものは1行ずつソースを実行する訳ですが、
実行にあたって、ソースの1行1行を解釈する処理が入ります。
これにより、コンパイラ言語より処理速度は遅くなります。
現時点では処理速度の面でコンパイラ言語の方が有利ですね。
インタプリタのメリットはないのでしょうか。
実は、コンパイラ言語に関して、コンパイルされたソースは、
コンパイルされたハードウェアやOS(windows, linuxなど)でしか実行されないのです。
(今更ですが、、「ラ」と「ル」に気をつけて読み進めてくださいね。)
それに比べまして、インタプリタ言語は、
各OSに対応するインタプリタさえあれば、同じように実行することができます。
このように、異なるハードウェアやOSに対してもあまり処理が必要ないことを
『移植性が高い/互換性が高い』と表現します。
つまり、インタプリタ言語は、移植性/互換性が高いのです。
ここまでで、コンパイラとインタプリタについて述べましたが、
そろそろjavaに戻りましょう。
javaは、プログラムソース→中間言語をコンパイラ、
中間言語→実行をインタプリタで行うものでしたね。
中間言語はjava独自のものです。
つまり、javaの中間言語を実行させるインタプリタというものが必要で、
javaには各OSに対応したインタプリタがあるということです。
・・これ、ネットでダウンロードできるんですよ。
「java VM」または「JVM」というものですが、今回は省略します。
実は、この辺りに関しても勉強中ではあります。もしかしたら今後解説するかも?
話を戻しまして・・、
実行速度&移植性と、javaは両者をいいとこどりしたものだと分かります。
ただ、最近のコンピュータは高性能ですので、
プログラムの規模にもよりますが、絶望的な程の速度の差はないかと思われます。
プログラムの規模やその目的によるというのが結論で、
コンパイラ・インタプリタのどちらが良いかというのはよく分かりませんでした。
中には、javaのように併用しているものもあります。
こんな感じですかね。
今回はコンパイルについて、2つの方法をご紹介しました。
(併用も含めれば3つ?まぁ、大別して2つということにします。)
知っておいて損はないかと思います。それではまた。