Microsoft Officeなどの多くの一般的なプログラムがC、C ++、アセンブリなどの言語で記述されていても、同じインストーラーが適切なOSを搭載した任意のコンピューターで機能する可能性はありますか?インストーラーが実際にコンピューター上でソースコードをコンパイルしているからですか?AMDとIntelが基本的に同じ命令セットを共有しているからですか?
Cは移植性があると聞きましたが、JavaはCよりもどのような意味で移植性がありますか?では、仮想マシンのポイントは何ですか?
Microsoft Officeなどの多くの一般的なプログラムがC、C ++、アセンブリなどの言語で記述されていても、同じインストーラーが適切なOSを搭載した任意のコンピューターで機能する可能性はありますか?インストーラーが実際にコンピューター上でソースコードをコンパイルしているからですか?AMDとIntelが基本的に同じ命令セットを共有しているからですか?
Cは移植性があると聞きましたが、JavaはCよりもどのような意味で移植性がありますか?では、仮想マシンのポイントは何ですか?
Cの歴史とその設計方法と理由に関する本を読むと、Cは同じプログラムを異なるオペレーティングシステムとハードウェアで実行できるように設計されていることがわかります。
原則として、Cは非常に移植性の高い言語です。移植性の問題の原因は実際には2つだけです。
動作が未定義であるか、実装間で実際に異なる方法で「実装定義」の領域に深く入っているが、それらが作成されたOS/コンパイラ/月の満ち欠けの組み合わせで動作する無効なプログラム。
Cには非常に軽い標準ライブラリがあるため、ほとんどすべての有用なプログラムは、ユーザー、OS、および外部と通信するための追加のインターフェイス(言語標準で定義されていない)に依存します。
余談ですが、2番目の点に関しては、POSIX(基本的にCを拡張し、不足しているもののほとんどを提供する標準)を採用しているWindowsを除く、関連するすべての実世界のシステムでそれを乗り越える寸前でした。上記のポイント#2)。しかし、その後、AndroidとiOSが登場し、物事を再び断片化しました...