OK、最初に、私はここでどんな種類の炎上戦争もそれのようなものを望んでいません。私のより大きな質問はより理論的であり、いくつかの例が含まれます。
ですから、私が書いたように、通訳言語がどのように少しでも効率的であるのか理解できません。そして、その現代以来、私は例としてJavaを取り上げます。
JITコンパイラがなかった時代に戻りましょう。Javaには、基本的にハードウェアである仮想マシンがあります。仮想マシンから少なくとも一部のジョブを削除するためにバイトコードにコンパイルされるよりも、コードを記述します。それで問題ありません。しかし、RISC命令セットでさえハードウェアでどれほど複雑になる可能性があるかを考えると、ソフトウェアでエミュレートされたハードウェアでそれを行う方法を考えることすらできません。
私は仮想マシンを作成した経験がないので、それが最も効率的なレベルでどのように行われるかはわかりませんが、適切なアクションを実行するよりも、一致と一致についてすべての命令をテストするよりも効率的なことは考えられません。あなたが知っている、のようなもの:if(instruction=="something") { (do it) } else if(instruction=="something_diffrent"){ (do it) }など...
しかし、これはひどく遅くなければなりません。それでも、JavaがJITコンパイラの前に遅いという記事があったとしても、それほど遅くはないと言われています。ただし、エミュレートするには、1バイトコード命令を実行するために実際のHWの多くのクロックサイクルが必要です。
それでも、プラットフォーム全体でさえJavaに基づいています。たとえば、Android。そして、Androidの最初のバージョンにはJITコンパイラがありませんでした。それらは解釈されました。しかし、Androidをひどく遅くするべきではありませんか?それでもそうではありません。AndroidライブラリからAPI関数を呼び出すと、それらはマシンコードで記述されているため、効率的であるため、非常に役立ちます。
ただし、画像を表示するためだけにAPIを使用して、独自のゲームエンジンを最初から作成することを想像してみてください。多くの配列コピー操作を実行する必要があります。多くの計算は、エミュレートすると非常に遅くなります。
そして今、私が約束したいくつかの例。私は主にMCUを使用しているので、AtmelAVRMCU用のJVMを見つけました。Thayは、8MHZMCUが1秒あたり20KのJavaオプトコードを実行できると述べています。しかし、AVRは1または2サイクルでほとんどの命令を実行できるので、平均して6000000命令としましょう。これにより、JITコンパイラを使用しないJVMは、マシンコードの処理速度が300倍遅くなります。では、なぜJITコンパイラなしでJavaがそれほど人気になるのでしょうか。これはパフォーマンスの低下がひどいのではないですか?理解できません。ありがとう。