LLVMがJavaや.Netのような典型的な仮想マシンなのか、それとも通常のC++ランタイムのような単なるランタイム環境なのか疑問に思います。
1 に答える
それはそれらのどちらでもありません。
LLVMは、以前は「低レベルの仮想マシン」の略でしたが、Javaまたは.NETの意味での完全な仮想マシンを意味することはなく、「LLVM」はその後略語ではなくなりました。
LLVMの中心的な部分はLLVMIRです。
IRは内部表現の略で、フロントエンドとバックエンドの間で使用されるプログラム表現を指すコンパイラで使用される用語です。IRを使用すると、言語の解析の詳細をコード生成の詳細から切り離すことができます。従来のコンパイラ設計では、理想的にはフロントエンドとバックエンドのコンポーネントを自由に混在させることができるため、N個のフロントエンドとM個のバックエンドでNxMコンパイラを作成できます。
LLVMのIRは、従来の内部表現とは異なります。抽象構文木に基づくのではなく、LLVM IRは一種のアセンブリ言語、つまりJavaや.NETに似たバイトコードです。そこで「仮想マシン」が登場しました。ただし、LLVM IRは、.NETやJVMのように、配列境界チェックなどの高レベルのセマンティクスを強制しません。また、LLVM IRはJITコンパイルできますが、通常、従来のコンパイラのバックエンドがIRに対して行うのと同じように、ネイティブコードに静的にコンパイルされます。
LLVMは、コアコンパイラインフラストラクチャの周りの多くのコンポーネントの包括的なプロジェクトに名前を付けるように成長しました。もともとLLVMはIRとそれを操作するためのツール(最適化、codegen)でしたが、LLVM IRを対象とするフロントエンド、アセンブリの解析と生成のためのマシンコードフレームワーク、汎用オブジェクトファイル処理、デバッガーなど、さらに多くのものを網羅するようになりました。 、リンカー..。
興味がある場合は、LLVMとLLVMを使用するプロジェクトで何が起こっているかをカバーするLLVM会議が毎年開催され、プレゼンテーションを記録して投稿します:http: //llvm.org/devmtg/。今年は来週開催されます。