インタプリタ、コンパイラ、VMについて質問があります
インタプリタとコンパイラの違いはわかりましたが、VIRTUAL MACHINESと前の2つの違いは何ですか?インタプリタとコンパイラに対するVMの長所と短所は何ですか?
どうもありがとう
仮想マシンは、コンパイラやインタプリタに完全に代わるものではありません。実装されているVMの数であるJITコンパイラについて考えていると思います。
仮想マシン自体は、その名前が示すとおりです。実際には存在しないマシン(プロセッサ)です。たとえば、ほとんどのプロセッサには、メモリ割り当てを処理する固有の方法や、タイプの知識がありません。 Java VMただし、特定のクラスのインスタンスを割り当てるnew
命令があります。VMは、これが、VMの基本的な操作単位である独自のオペコードに値する言語で十分に重要な概念であると判断しました。
独自の命令セットを作成する利点は、一般に、長いコンパイル/最適化時間と遅いインタープリターの間のギャップを埋めることです。たとえば、Javaクラスをコンパイルする場合、レジスタ割り当てやインライン化、またはその従来のコンパイラの処理を行う必要はありません。JITは後でそれを行いますが、十分な回数実行し、プログラムの実行全体に分散するコードの一部。JVMの命令セットはJavaに十分近いため、最初のコンパイルは高速で、シンプルで高速です。 Javaソースコードとは異なり、VM用に読み取ります。
インタプリタとJITコンパイラのトレードオフは、通常、実行時のパフォーマンスと開発時間の関係です。 JITの開発にはかなり時間がかかりますが、インタプリタの実行にはかなり時間がかかります。ただし、スクリプトや中小規模のWebサイトなど、多くの場合、プログラムはJITを使用する利点を実際に確認するのに十分な時間実行されません。
VMwareのようなソフトウェアについても言及する必要があります。これも仮想マシンですが、実際のハードウェアでも使用される命令セットを使用しています。これは、物理的に存在しないマシンのふりをするという点で、言語VMと同じ基本概念ですが、実際には異なり、非常に複雑です。
分かりやすい英語
Compilerは、ある言語を別の言語に変換します。たとえば、C#をILに、Javaをバイトコードに、C++をバイナリマシンコードに。コンパイル段階では実行されません。
Interpreterは、ソースファイルから一度に1行を解釈(実行)します。 PHP、Perl、その他のスクリプト言語など
仮想マシンはいくつかのことを参照できますが、私が知っている2つは次のとおりです。
長所と短所はありません。 3つすべてが、ほとんど比較できない異なる仕事をしています。
言語とプラットフォームは特定の順序ではなく、文字通り何百もの他のサンプルがあります