誰かが LLVM を使用して特定の言語を静的にコンパイルしたいとします。最初に C に変換し、直接 IR 変換を処理する代わりに CLang を使用する場合の最大の違い (長所と短所) は何でしょうか。
私が推測する明白な答えは、ソース言語を認識しているフロントエンドを使用することで、生成された C で CLang が適切に動作することを期待するよりも、最適化された IR 表現を考え出す方が簡単だということでしょう。
ここで何か不足していますか?
汎用Cバックエンドを使用する利点:
そして、欠点は次のとおりです。
gcc
などに依存します。Clangがないと、ベアLLVMを単独で使用でき、依存関係を自己完結型に保つことができます。ほとんどの場合、最適化は問題ではありません。Clangは、意図的に、非常に最適ではないLLVMIRを生成しています。LLVMは、フロントエンドではなく、すべての最適化を処理する必要があります。もちろん、いくつかの高レベルの最適化を行うことができない限り、それらはバックエンドの選択に依存しません。