質問は部分的に回答されたようですので、試してみたいと思います:
2 については背景を説明します。1 については後日詳しく説明します。
LLVM IR を C や Java などの高級言語に変換する場合:
LLVM 命令を取り出し、それを同等の C コードに抽象化する必要があります。次に、LLVM に相当するものがない残りの機能 (C++ のクラスや抽象化など) を取得し、LLVM でそれらのパターンを見つけるルーチン (再利用されたブロックなど) を作成し、C を記述する必要があります。基本的なものについては、それはかなり簡単です。しかし、思考の流れを追うだけで、問題の真の難しさにすぐに気が付くでしょう。結局のところ、誰もが簡単な C を書くわけではないのです。さらに困難を増すために、生成された C をコンパイルするときに同じ LLVM IR が得られない可能性があります! (結果として生じるフィードバック ループを考慮してください)
Javaに関しては、LLVM IRから直接行くことはさらに困難な戦いに直面しています.どちらの場合でも、同じコードをLLVM IRにコンパイルすることさえできないという問題があります。むしろ、LLVM IR を JVM バイトコードに変換します。次に、リバース コンパイラを使用して Java を取得できます。
中国人学生のグループは明らかにこれを行うことができた. 彼らは LLVM の人たちが何をしたか、そしてそれが JVM よりも優れていることを完全には理解していません。(実際、LLVM は間違いなく JVM を時代遅れにします;)
これは、LLVM を C と Java の間の仲介として使用して双方向に変換できるという点で便利に思えますが、間違った質問をしているため、実際にはほとんど役に立ちません。ほら、実用的な目的でそれが必要な理由は、共通のコードベースを持ち、パフォーマンスを向上させるためです。
しかし、本当の問題は、現代の言語の共通機能を抽象化し、そこから構築できる中心的な言語を提供する言語が必要だということです。 http://julialang.org/が質問に答えました