07/10/08 04:49:52
>>268-269
完全に勘違いされているようなので補足
昨今CPUは、マイクロアーキテクチャとよばれる、昔ながらの真のアセンブラらしい部分と
プログラマから見えるCPUのアセンブラの(x86の命令セット)は違うものになっていて
いわばx86命令セットはできの悪い高級言語のような物になっている。
これは、互換の問題の解決とCPU高速化に使えるテクノロジの自由度向上が目的で行われている物で
コンセプトとしては昔のC言語と同じで、どのコンピュータでも使える共通のアセンブラレベルの言語を作ろうというのと変わらない。
一方、.NETやJavaのVMのコンセプトも同様で、もしこれらの言語を使うとするなら、同一コンセプトがハードウェア内とVMに二重になって入っているという事態となる、これは無駄。
んで、スタックマシンからx86命令セットを経由せずに一気にマイクロアーキテクチャに投入できるコードを生成すればと考える。
一般にx86命令セットを経由するよりはるかに効率的なコードを生成できるはずだ。
また以下の理由もある。
理由その1
ハードウェアは売ったらそう簡単には交換できない。
ハードバグが出た場合、マイクロコード(CPU内に仕込まれているメモリいれられたCPU制御プログラム)を使って解決するという手もあるが
問題をVMで解決すれば、その分のチップ面積をもっと別な機能に活用可能。
理由その2
RISCチップ出現以来、オプティマイズの一部をハードウェアからソフトウェアに移す事による高速化が増えている。
そのためコンパイラありきで作られており、CPUだけを単独で設計される事は少ない。