web-dev-qa-db-ja.com

バイトコードを実行しないインタープリターまたは仮想マシン

Dart言語の開発者は、Dart言語で記述されたステートメントを実行する仮想マシンがあると言います。インタプリタと言語を実行する仮想マシンの違いは何ですか?

これまで、Java仮想マシン、共通言語ランタイム、Dalvikなど、私が知っていた仮想マシンはすべて、以前にプログラミング言語からコンパイルされたバイトコードを実行します。

プログラミング言語を直接実行する仮想マシンはどのように機能しますか?

バイトコードをマシンコードに変換する代わりに、通常の仮想マシンと同じように機能し、言語をマシンコードに変換します。これは、コードを機械語にコンパイルし始め、命令が実行されるたびにインタプリタが機械語に変換する間、このコードを実行し続けるJITコンパイラを備えているという点で、インタプリタとは異なる場合があります。

2
m3th0dman

そして、バイトコードはどのように作成されたと思いますか?おそらく何かが言語で書かれたステートメントを読み、それをバイトコードに変換しました。たとえば、JavaとC#コンパイラの両方がこれを行います。

Dart VMは、このステップをスキップしてステートメントを直接読み取ります。実際には、インタープリター言語がこれを行うことは非常に一般的です。たとえば、JavaScriptとPHPはどちらもこれは、パフォーマンスを改善し、ランタイムプロセスにバイトコード生成ステップを追加する必要が生じる前に行われました。

8
Euphoric

初期のホームコンピューターとそのより強力な子孫の1K(タイプミスではない)Basicは、ソースコードから直接解釈することで機能しました。ビル・ゲイツは前かがみではありませんでした!

1
ddyer