13

コンパイラを作成する場合、ターゲット言語に LLVM IR と C を使用する利点と欠点は何ですか? 私は両方が使用されていることを知っており、clang を使用して C をコンパイルした場合、最終的なマシン コードは似ていると思います。

4

5 に答える 5

10

私はいくつかのコンパイラ バックエンドに LLVM IR を使用し、C をバックエンドとして使用するコンパイラを使用してきました。LLVM IR の利点の 1 つは、型付けされていることです。LLVM ライブラリからエラーを取得せずに、完全に不適切な形式の出力を作成することは困難です。

私の意見では、デバッグのためにソース コードと IR との間の密接な相関関係を維持することも容易です。

さらに、フロント エンドが発する IR を分析および処理するためのすべてのクールな LLVM コマンド ライン ツールを利用できます。

于 2012-04-22T12:24:30.557 に答える
3

LLVMの利点:

  1. JIT-コードを動的にコンパイルして実行できます。確かに同じことがCでも可能です(たとえば、組み込みを使用するtcc)が、それははるかに堅牢でポータブルなオプションではありません。
  2. 生成されたIRに対して独自の最適化パスを実行できます。
  3. 無料でのリフレクション-LLVMを使用すると、生成されたコードの検査がはるかに簡単になります。
  4. LLVMライブラリは、ほとんどのCコンパイラほど大きくはありません(もちろん、数えませんtcc)。

LLVMの欠点:

  1. コードは移植性がないため、ターゲットに応じて少し変更する必要があります。LLVMにはやや移植性のあるサブセットがありますが、それでも危険な方法です。
  2. 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 に答える