回答:
LLVMは、JVMやCLRなどの一般的なVMよりも低レベルです。たとえば、ガベージコレクターのフックがありますが、ガベージコレクター自体は提供しません。
同様に、JVMには組み込みのJITコンパイラがあります(実際に古いバージョンを除く)。LLVMにはLLVM IR用のJITコンパイラーがいくつかありますが、開発者が物事をフックし、実際にコードをJITするのは依然として開発者次第です。
JVMは未解決の外部を検出すると、外に出てそれを満たす適切なクラスを見つけ、ファイルシステムおよび.jarファイルで直接.classファイルを検索する方法を認識します1。LLVMのJITコンパイラには、そのようなことをどのように処理するかを決定できるフックがあります。あなたが期待するように、一部の人々は、いくつかのデフォルトのバージョンを書かれている、それはそうすることができます JVMとほぼ同じ順序で物事を行うことができます-しかし、あなたはまた、これらを無視するのは自由ですし、あなたが選択した場合は違ったことを行います。
簡単に言えば、コンパイラ(またはその順序の何か)を開発している場合、それはあなたの生活を楽にする多くのツールを持っています。最適化について多くのことを心配する代わりに、ソースコードからLLVM IRに管理できる最も簡単な変換を行うことができます。その後、LLVMライブラリを使用して、最適化、JITing、リンクなどを管理できます。いくつかの本当に便利な関数なので、すべての詳細を扱う必要はありませんが、それらはまだ関数であり、あなたはそれらを呼び出すためのコードを書いています。これは完成品ではなく、製品を比較的迅速かつ簡単に構築するための便利なツールです。
1技術的には、これらすべてが適切なJVMに組み込まれているわけではありません。通常、JVMの一部として原始クラスローダーと呼ばれるものを指定します。その後、他の処理を行うjava.util.ClassLoaderで指定されたユーザークラスローダーがあります。一部のクラスローダーはデフォルトで含まれています。必要な場合は、独自に定義することでそれらを補完できます。
低レベルの既存または将来の仮想マシン(JVM)は、その実施のコアとして使用することができますので、それが設計されているため。
JavaとPythonの仮想マシンは、標準Cで記述されており、独自のライブラリに大きく依存しているため、非常に移植性が高くなっています。LLVMの目的は、既にLLVMをサポートしているプラットフォームに仮想マシンを簡単に移植できるようにインフラストラクチャを提供することです。
LLVMは、静的およびJITコンパイルのサポートを提供しており、信頼できるオペレーティングシステム空間で実行できるように設計されています。つまり、理論的には、LLVM上で仮想マシンを実行すると作業量が大幅に減り、より高速で効率的なものが生成されるはずです。理論的には。
その場合、LLVMは低レベルであるため、さまざまなOSおよびハードウェアアーキテクチャへの移植が容易になります。
言語実装者が単一の移植しやすい低レベルのプラットフォームに書き込むことができれば、大きな節約があります。最もよく知られているVMは、提供する言語とオペレーティングシステムの中間にあり、独自の中間表現とJITCを実装する必要があります。