コンパイラ、インタプリタ、クロスコンパイラについて
インタプリタについて質問があります。
色々と調べたところ、perl、php、rubyなど、ソースをインタプリタで実行する言語の利点は以下なのだと思います。
ソフトを作っている環境と実行環境の間でcpuやos等が異なる場合は、
ソースは互いに異なる機械語に翻訳されるので、翻訳は実行環境で行わなければならない。
その際、コンパイラの場合はわざわざ手動で翻訳を実行しなければならないが、
インタプリタの場合は勝手に実行時に翻訳してくれるので楽。
1.それで質問なのですが、
コンパイラは環境に対応した機械語を出すらしいですが、
何故そんな事ができるのでしょうか。
コンパイラが、自身が置かれた環境を分析して、それに対応した機械語を出すのでしょうか?
それとも、そもそも環境毎に対応したコンパイラを使うという事でしょうか?
2.また、世の中にはクロスコンパイラというものがあると聞きました。
クロスコンパイラがあれば、ソフトを作っている環境でそのままコンパイルできるので、
インタプリタはいらないのではないでしょうか?
クロスコンパイラの短所や長所などを教えてほしいです。
3.翻訳後の話として、機械語はcpuやosによって違うという話ですよね。
つまり、機械語にコンパイル済みのソフトを配布する際は環境毎に対応したソフトを
それぞれ配布しなければならないのですよね。
しかし、ネット上でダウンロードできるフリーのソフトなんかは、
特定のOS向け、あるいはOS別に違うファイルを配布、というのはよく見かけますが、
cpuやその他の環境毎に配布物を分けているのは見たことがありません。
機械語は、本当にos以外にも依存するものなのでしょうか?
お礼
おお、こんなのが欲しかったです。 ありがとうございます。