コンパイラを作成する場合、ターゲット言語に LLVM IR と C を使用する利点と欠点は何ですか? 私は両方が使用されていることを知っており、clang を使用して C をコンパイルした場合、最終的なマシン コードは似ていると思います。
3385 次
5 に答える
10
私はいくつかのコンパイラ バックエンドに LLVM IR を使用し、C をバックエンドとして使用するコンパイラを使用してきました。LLVM IR の利点の 1 つは、型付けされていることです。LLVM ライブラリからエラーを取得せずに、完全に不適切な形式の出力を作成することは困難です。
私の意見では、デバッグのためにソース コードと IR との間の密接な相関関係を維持することも容易です。
さらに、フロント エンドが発する IR を分析および処理するためのすべてのクールな LLVM コマンド ライン ツールを利用できます。
于 2012-04-22T12:24:30.557 に答える
3
LLVMの利点:
- JIT-コードを動的にコンパイルして実行できます。確かに同じことがCでも可能です(たとえば、組み込みを使用する
tcc
)が、それははるかに堅牢でポータブルなオプションではありません。 - 生成されたIRに対して独自の最適化パスを実行できます。
- 無料でのリフレクション-LLVMを使用すると、生成されたコードの検査がはるかに簡単になります。
- LLVMライブラリは、ほとんどのCコンパイラほど大きくはありません(もちろん、数えません
tcc
)。
LLVMの欠点:
- コードは移植性がないため、ターゲットに応じて少し変更する必要があります。LLVMにはやや移植性のあるサブセットがありますが、それでも危険な方法です。
- C ++ライブラリへのランタイムの依存関係は、少し問題になる可能性があります。
于 2012-04-23T11:43:41.727 に答える
3
C を対象とする場合、言語に適切なデバッグ サポートを実装できるとは思えません。
于 2012-04-22T13:19:51.123 に答える
1
明らかにCLANGがない、または実験段階にあるアーキテクチャとOS。
C の方が広く受け入れられていますが、LLVM IR を使用すると、LLVM エンジンをスプーンでフィードできます。IR へのすべてのパスが等しいわけではありません。
于 2012-04-22T09:51:23.970 に答える