LLVMとJava(bytecode))の違いがわかりません。
-edit- 'what are they'とは、LLVMとJavaの違いではなく、LLVMとJava(bytecode)の違いを意味します。
JavaではなくJVMを意味すると仮定します。
LLVMは低レベルレジスタベースの仮想マシンです。基盤となるハードウェアを抽象化し、コンパイラのバックエンド(マシンコード生成)とフロントエンド(解析など)の間に明確な線を引くように設計されています。
JVMは、はるかに高レベルのスタックベースの仮想マシンです。 JVMはガベージコレクションを提供し、オブジェクトや仮想メソッド呼び出しなどの概念を備えています。したがって、JVMは(MicrosoftのCLRのように)言語の相互運用性のためのはるかに高いレベルのインフラストラクチャを提供します。
(Cの上に構築するのと同じように、LLVMでこれらの抽象化を構築することが可能です。)
この質問が間違った方向に進んだのは残念です。より詳細な比較を求めて私はそれに行きました。
JVMバイトコードとLLVMビットコードの最大の違いは、JVM命令はスタック指向ですが、LLVMビットコードはそうではないということです。これは、値をレジスターにロードするのではなく、JVMバイトコードが値をスタックにロードし、そこから値を計算することを意味します。これの利点は、コンパイラーがレジスターを割り振る必要がないことですが、私にはわかりません。
LLVMビットコードはマシンレベルのコードに近いですが、特定のアーキテクチャーに拘束されません。たとえば、LLVMビットコードは任意の数の論理レジスターを利用できると思います。たぶん、LLVMに詳しい人がここで発言できるでしょうか?