LLVMの低レベルはどのようになっていますか?


12

LLVM(低レベル仮想マシン)はどのように低レベルですか?(執筆時点では、略語 "LLVM"のこの拡張は、そのWebサイトではなく、ウィキペディアで見つかりました。)

(コンパイラインフラストラクチャ)向けに設計されたもので「低レベル」と呼ばれていますか、または他のツールよりも「低レベル」で動作するためですか?

これの(一種の)「図」として、LLVMはJVMCLRよりも低レベルですか、それとも「低レベル」の用途のみに設計されていますか?

回答:


16

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で指定されたユーザークラスローダーがあります。一部のクラスローダーはデフォルトで含まれています。必要な場合は、独自に定義することでそれらを補完できます。


12

低レベルの既存または将来の仮想マシン(JVM)は、その実施のコアとして使用することができますので、それが設計されているため。

JavaとPythonの仮想マシンは、標準Cで記述されており、独自のライブラリに大きく依存しているため、非常に移植性が高くなっています。LLVMの目的は、既にLLVMをサポートしているプラ​​ットフォームに仮想マシンを簡単に移植できるようにインフラストラクチャを提供することです。

LLVMは、静的およびJITコンパイルのサポートを提供しており、信頼できるオペレーティングシステム空間で実行できるように設計されています。つまり、理論的には、LLVM上で仮想マシンを実行すると作業量が大幅に減り、より高速で効率的なものが生成されるはずです。理論的には。

その場合、LLVMは低レベルであるため、さまざまなOSおよびハードウェアアーキテクチャへの移植が容易になります。

言語実装者が単一の移植しやすい低レベルのプラットフォームに書き込むことができれば、大きな節約があります。最もよく知られているVMは、提供する言語とオペレーティングシステムの中間にあり、独自の中間表現とJITCを実装する必要があります。


5

LLVM名の「低レベル」部分は、使用される仮想命令セットのレベルを指します。LLVMが使用する中間言語(IR)は、アーキテクチャに依存せず一般的ですが、マシンコードのレベルに近いものです。

一方、JVMとCLRのバイトコードは、より高い抽象化層にある命令を持つという点でかなり高いレベルです。どちらもオブジェクト指向のスタックベースのアセンブリ言語です。たとえば、JVMにはinvokevirtualという命令があります。これは、Java言語の特定のオブジェクトモデルについて知る必要がある命令です。


3

確かに、言​​語固有のVMやJVMやCLRなどの統合VMよりも低いレベルです。その設計は、GCC(GIMPLE)および同様のコンパイラの低レベル中間表現に近いです。デフォルトのGCはなく、特定の高レベルタイプシステムは適用されず、アライメントは想定されません(明示的に指定する必要があります)、整数および浮動小数点データタイプは明示的(プラットフォーム依存)であり、すべての最低レベル-まともなポインター演算が利用可能です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.