AMD プロセッサと Intel プロセッサは、同じ命令セットとマシン アーキテクチャを使用します (マシン コードの実行の観点から)。
C および C++ コンパイラは、対象の OS に適したヘッダーを使用してマシン コードにコンパイルします。コンパイルされると、それらはコンパイルされた言語と何らかの形で関連付けられなくなり、単なるバイナリ実行可能ファイルになります。(どの言語からコンパイルされたかを示すアーティファクトがありますが、それはここでは重要ではありません)
したがって、コンパイルされると、それらはマシン (X86、Intel および AMD の命令セットとアーキテクチャ) および OS に関連付けられます。
これが、互換性のある x86 マシンおよび互換性のある OS (一部のソフトウェアでは win95 から winvista) で実行できる理由です。
ただし、Intel プロセッサで実行されている場合でも、OSX マシンでは実行できません。バイナリは、追加のエミュレーション ソフトウェア (パラレルや Windows を備えた VM など) を実行しない限り、互換性がありません。
さらに、ARM プロセッサ、MIPS、または PowerPC でそれらを実行する場合は、X86 のバイナリ マシン コードを実行しているマシンに解釈する完全なマシン命令セット エミュレータを実行する必要があります。
それを .NET と比較してください。
.NET 仮想マシンは、オブジェクト、メモリ割り当て、ガベージ コレクション、およびその他の高レベルの構造を理解するプロセッサなど、世界中にはるかに優れたプロセッサがあるかのように製造されています。これは非常に複雑なマシンであり、現在 (良好なパフォーマンスで) シリコンに直接構築することはできませんが、既存のプロセッサで実行できるエミュレータを作成することはできます。
突然、.NET を実行したい任意のプロセッサ用に 1 つのマシン固有のエミュレータを作成でき、その上で任意の .NET プログラムを実行できます。OS や基盤となる CPU アーキテクチャについて心配する必要はありません。.NET VM があれば、ソフトウェアは実行されます。
しかし、もう少し先に進みましょう。この共通言語ができたら、他の書き言葉をそれに変換するコンパイラを作成してみませんか?
これで、C、C#、C++、Java、javascript、Basic、python、lua、または記述されたコードを変換してこの仮想マシンで実行できるその他の言語コンパイラを使用できるようになりました。
マシンと言語の関連付けを 2 度分離しました。2 段階の分離をマッピングするコンパイラと VM が存在する限り、それほど多くの作業を行うことなく、誰でも任意のコードを作成し、任意のマシンで実行できます。 .
なぜこれが良いことなのかまだ疑問に思っている場合は、初期の DOS マシンと、世界に対する Microsoft の本当の貢献は何であったかを考えてみてください。
Autocad は、印刷できるプリンタごとにドライバを作成する必要がありました。ロータス 1-2-3 も同様です。実際、ソフトウェアで印刷するには、独自のドライバーを作成する必要がありました。10 台のプリンターと 10 個のプログラムがある場合、本質的に同じコードの 100 個の異なる部分を別々に独立して作成する必要がありました。
Windows 3.1 が (GEM や他の多くの抽象化レイヤーと共に) 達成しようとしたことは、プリンターの製造元がプリンター用に 1 つのドライバーを作成し、プログラマーが Windows プリンター クラス用に 1 つのドライバーを作成するようにすることでした。
10 個のプログラムと 10 個のプリンターがあれば、20 個のコードを書くだけで済みます。Microsoft 側のコードは誰にとっても同じだったので、MS の例は、実行する作業がほとんどないことを意味します。
現在、プログラムは、サポートすることを選択した 10 台のプリンターだけに制限されているのではなく、製造元が Windows 用のドライバーを提供しているすべてのプリンターに制限されていました。
アプリケーション開発でも同様の問題が発生しています。MAC を使用していないため、使用できない非常に優れたアプリケーションがあります。大量の重複があります (世界クラスのワード プロセッサが実際に何台必要か?)。
Java はこれを修正することを意図していましたが、多くの制限があり、そのうちのいくつかは実際には解決されていません。
.NET の方が近いですが、Windows 以外のプラットフォーム向けにワールドクラスの VM を開発している人は誰もいません (mono は非常に近いですが、まだ十分ではありません)。
だから...だから、VMが必要なのです。私とは異なる OS とマシンの組み合わせを選んだという理由だけで、少数の聴衆に限定したくないからです。
-アダム