通訳

2013-02-03 7 views
18

は、私は今、私は通訳やコンパイラの違いを知っているが、の仮想マシン前の2から程度異なっているものをインタプリタ、コンパイラとVM通訳

について質問がありますか?インタプリタとコンパイラよりもVMの長所と短所は何ですか?

どうもありがとう

答えて

23

の何百もの仮想マシンが正確にコンパイラやインタプリタに代わるものではありません、文字通りあります。私はJITコンパイラを考えていると思います.JITコンパイラは実装されているVMの数です。

仮想マシン自体は、実際には存在しないマシン(プロセッサ)です。たとえば、ほとんどのプロセッサには、メモリ割り当てや型に関する知識はありません。 Java VMでも、特定のクラスのインスタンスを割り当てるnew命令があります。 VMの設計者は、これがVMの基本的な操作単位である独自のオペコードに値する十分な概念であると判断しました。

独自の命令セットを作成する利点は、一般に、長いコンパイル/最適化時間と低速インタープリタの間のギャップを埋めることです。たとえば、Javaクラスをコンパイルするときには、レジスタの割り当てやインライン化、または従来のコンパイラのものを使用する必要はありません。 JITは後でそれを行いますが、あなたが十分な時間稼働し、プログラムの実行中に広がるコードの部分についてのみです。 JVMの命令セットは、Javaに近いので、初期コンパイルが迅速であり、Javaソースコードとは異なり、VMの読み込みが簡単で素早く実行できます。

インタープリタ対JITコンパイラの場合、トレードオフは一般的に実行時パフォーマンスと開発時間の関係にあります。JITの開発にはかなり時間がかかりますが、通訳の実行中はかなり遅くなります。しかし、多くの場合、スクリプティングや中小規模のウェブサイトのように、プログラムはJITを使用する利点を実際に見るのに十分長くは実行されません。

VMwareのようなソフトウェアについても言及する必要があります。これも仮想マシンですが、実際のハードウェアでも使用される命令セットを使用します。これは言語VMと同じ基本概念ですが、物理的に存在しないマシンにふりを掛けていますが、実際にはそれは非常に複雑で複雑です。仮想マシンの対

+0

トップノッチメイト、ちょうど私が必要としたもの – DodoSerebro

+2

"実際には存在しない"というのは、まさに正しい表現ではありません。実際には、特定のVMの同じバイトコード言語を使用できる製造されたマシンプロセッサが存在しない可能性があります。このようなマシンプロセッサを製造することはできません。 – amirouche

14

平易な英語

コンパイラ別に一つの言語を変換します。例えば、C#をILに、Javaをバイトコードに、C++をバイナリのマシンコードに変換します。コンパイル段階では何​​も実行されません。

インタープリタは、ソースファイルから1行ずつ解釈(実行)します。このようHyper-Vとして

  • ハイパーバイザ関連の仮想マシン、Xen:PHP、Perlや他のスクリプト言語

    仮想マシンは、いくつかのものを指すことが可能なように、2つは私がの承知しています。これらを使用すると、1つのハードウェア上で複数のOSを実行できます。

  • Java Virtual Machine,Common Language Runtimeなどのソフトウェア実行時間。このソフトウェアによって、プラットフォームに依存しない中間言語(ILコード、バイトコード)を実行し、機械固有の命令(just-in-time compilation)を実行することができます。通常、このようなVMは、リソース管理、メモリクリーンアップ、スレッド、セキュリティなどの他のサテライトタスクを担当します。

賛否両論はありません。 3人とも、比較が難しい別の仕事をしています。

言語やプラットフォームを順不同に来る、他のサンプル

+0

おかげでたくさんの対、完全に:) – DodoSerebro

+0

コンパイラ&通訳&VMは、任意の言語のために書くことができ、任意の言語ができる形式に変換することができ、それを理解し降下VMによって実行される。任意の言語をコンパイルすることができ、もちろんあらゆる言語を解釈することができます。それは興味深いことではありません。 – amirouche

6

実機が

  • 実際のマシンは、そのマシンコード、ハードウェアによって実行される
  • 仮想マシンが「マシンコード」インタプリタにより実行されるものであるものです。

通訳は、コンパイラ

Answer is here