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