emulate

よくエミューレータとかシミュレータとかいうのですが、昔からこの差がよくわかりませんでした。これはつまりemulateとsimulateの違いは何か、ということなんですが…

emulate:try to do as well as or better than.
simulate:pretend to be; pretend to have or feel

こうしてみると、emulateはオリジナルと同等もしくはより良く動作するようなものをいうようです。コンピュータの世界でいうとバイナリがそのまま動作しないといけないということになるでしょうか。

simulateは振る舞いが似ていればよいようです。コンピュータの世界でいうとバイナリがそのまま動作しなくても、見たところ同じように動作していれば良いといったところでしょうか。


ところで、ちょっと思いついたので書いておきますが、最近のJavaVMの説明は結構難しいです。基本はJavaVMは各OS上に「Javaオブジェクトコードを実行する仮想マシン」として実装されています。それで、Javaオブジェクトコードをインタープリタ実行するので、JavaVMはインタープリタだと解説されることが多いのです。ところが、JITとかHotSpot技術が発達してきて、一部のJavaオブジェクトコードはネイティブコードへ変換して実行できるようになってきたあたりから複雑になってきています。この影響か、たまにJavaのオブジェクトコードを中間コードだと説明している書籍もみかけます。しかし、JavaオブジェクトコードはJavaVMのマシンコードなので、そういった説明は誤解を生んでしまうと思うのです。CPUを基準にして考えると中間コードといってもいいんですけどね。

できるだけ単純に話をするためには、JavaオブジェクトコードとJavaVMの関係の部分と、JavaVM実装に関するJITとかHotSpot技術の部分は分けて話をした方が良さそうです。そうしないと誤解されてしまいます。

ということで、って何もまとめないままでいけませんが、なんでこんなことを思いついたかというと、JavaVMはエミュレータかシミュレータかとふと思ったんですけれど、Javaオブジェクトコードを実行する仮想マシンだからエミュレータですね。それだけです。

emulate」への1件のフィードバック

コメントは停止中です。

同じカテゴリの記事: etc