デジタル・コンピュータは、人間が話す言語を理解しない。 マシン・コードは、各命令が2進数またはビット(すなわち1と0)の文字列として表現された、単純なコンピュータ命令のシーケンスで構成されています。 異なるコンピュータは、通常、異なる機械語を「話す」または「理解する」。 例えば、あるコンピュータはADD演算を10011111と表現し、別のコンピュータは同じ演算を000110と表現することがある。 さらに、プログラムが実行されると、オペレーティング システム(Windows、Linux、OS X など)がホスト環境として機能し、プログラムにサービスを提供します。 残念ながら、プログラムがこれらのサービスにアクセスする方法も、オペレーティングシステムごとに異なっています。 機械語とオペレーティングシステムの要件が異なるため、機械語で書かれたプログラムは、プログラムがどのように問題を解決するかよりも、プログラムを実行するシステムに重点を置いています。 さらに、何らかの翻訳サービス(通常は仮想マシンの形で)を提供しなければ、異なるコンピュータ間でマシン・コードを移動させることは不可能であることも意味している。 その解決策として、問題をより重視し、プログラムを実行するシステム(ハードウェアとオペレーティング システム)をあまり重視しない、より高度なプログラミング言語を開発した(図 2 参照)。 しかし、コンピュータは通常、高級言語で書かれたプログラムを実行しないので、高級言語で書かれたプログラムを機械語に翻訳する何らかの方法が必要である。 コンパイラは、CやC++などの高級プログラミング言語で書かれた他のプログラムを、機械語やマシン語に翻訳するプログラムである。JavaやC#などの他の言語は、別のルートをとる。 JavaやC#のような他の言語は、別の方法でプログラムをコンパイルし、仮想マシンコードと呼ばれる中間表現(高級言語と機械語の中間の表現)を作成する。 仮想マシンコードは、インタープリターや仮想マシン(VM、ハードウェアCPUをシミュレートするプログラム)と呼ばれる別のプログラムの入力となる。

C++ ソース コード ファイルを読み、C++ コードをマシン コードに翻訳し、マシン コードを実行ファイルに書き出すコンパイラを示す図。
コンパイル言語で書かれたプログラムをマシン コードに翻訳または変換することです。 コンパイラは、.cppで終わるファイルからC++のソースコードを読み込み、実行可能なマシンコードファイルを生成する。 Windowsでは、C++コンパイラが生成する実行ファイルは.exeで終わるが、他のOSでは異なる命名規則に従っている。
 コンパイラが Java ソース コード ファイルを読み、Java コードを仮想マシン コードに翻訳して、新しいファイルに保存する様子を示しています。 仮想マシンは別のプログラムで、新しいファイルから仮想マシンコードを読み、それを解釈して仮想マシンコードで指定された操作を実行します。
仮想マシンコードを生成する言語で書かれたプログラムをコンパイルして実行することです。 Java や C# などの言語は、まず仮想マシン コード、つまり仮想コンピュータ(実際には存在しないコンピュータ)用のマシン コードにコンパイルされます。 ソースコードがコンパイルされると、仮想マシン(VM)と呼ばれるプログラムが、実際のコンピュータの動作をシミュレートしてコードを実行する。
 画像は、インタプリタによって読み込まれ処理されているJavascriptソースコードファイルを示しています。
純粋なインタプリタ言語で書かれたプログラムの実行。 Javascript や Perl のような言語は、まったくコンパイルされません。 インタープリタと呼ばれるプログラムは、ソースコード・ファイルを1つずつ読み、他の言語に翻訳することなく、読み取った各文を実行または解釈します。 ジャバスクリプトのインタープリターは、ほとんどのウェブブラウザに組み込まれており、オペレーティングシステムがこれを実行する。 他の解釈言語では、オペレーティング システムはアプリケーション プログラムとしてインタープリターを実行します。

高レベル プログラミング言語で書かれたプログラムを実行する各アプローチには、利点と欠点があります。 完全にコンパイルされた言語 (例: C および C++) で書かれたプログラムは、部分的にコンパイルされた言語 (例: Java および C#) で書かれたプログラムよりも速く実行され、完全に解釈された言語 (例: Javascript および Perl) で書かれたプログラムよりもはるかに速く実行されます。 例えば、C++のプログラムがコンパイルされると、実行時間は1.0になる。 コンパイルしてからインタプリタする言語で書かれた同等のプログラムは、一般に時間3〜10で実行される。 純粋なインタプリタ言語として実行される同じプログラムは、約100の時間で実行される。 JavaやC#のVMの現代的な実装では、仮想コードの一部を処理しながら機械語にコンパイルするジャストインタイム(JIT)インタプリタが使用されています。 JIT処理系は、純粋なコンパイル言語系に比べて実行時間を約1.5倍に短縮する。 プログラミング言語Pythonは少し異なり、Pythonプログラムの主要部分はインタプリタ化されているが、比較的小さいため、全体の実行時間に与える影響は小さい。 プログラムがほとんどの時間を費やす Python ライブラリのほとんどは C で書かれているため、Python プログラムは同等の C プログラムとほぼ同じ速度で動作します。

一方で、純粋なコンパイラーによって生成された実行可能プログラムは、異種プラットフォーム間で転送することはできませんが(たとえば、Windows プログラムを Apple コンピューターで実行できません)、インタプリタ言語で書かれたプログラムは異なるコンピューター間でより簡単に移動することが可能です。 この移植性は、プラットフォーム(ハードウェアとオペレーティングシステムの組み合わせ)ごとにVMやインタープリターを提供することで実現されています。 インタープリタやVMは純粋にコンパイルされた言語で書かれたプログラムなので、移植性はないが、処理するプログラムは移植性がある

コメントを残す

メールアドレスが公開されることはありません。