1. ホーム
  2. c++

[解決済み] OS XにおけるLLVMとclangの比較

2022-05-11 19:36:37

質問

OS Xのllvm、clang、gccについて質問です。

llvm-gcc 4.2、llvm 2.0、および clang の違いは何ですか?それらがすべて llvm 上で構築されることは知っていますが、どのように違うのでしょうか?

より速いコンパイルの他に、gccに対するllvmの利点は何ですか?

どのように解決するのですか?

LLVM はもともと "低レベル仮想マシン" の略でしたが、従来の仮想マシンとは異なるものに成長したため、現在は単にそれ自身の略称になっています。LLVM は、コンパイラやジャストインタイムコンパイラの構築を支援するために使用される、標準化された中間表現と同様に、ライブラリやツールのセットである。LLVMは、それ自体では中間表現以外のものをコンパイルすることができず、そのためには言語固有のフロントエンドが必要です。LLVMというのは、低レベルのライブラリとツールのことを指すのだろう。一部の人はClangやllvm-gccをLLVMと間違って呼ぶことがあり、それが混乱を招くこともあります。

llvm-gcc は GCC の修正版で、GCC 自身の代わりに LLVM をバックエンドとして使用します。これは、GCC をフォークすることなく同じことをするために GCC の新しいプラグインシステムを使用する DragonEgg のために、現在、非推奨となっています。

Clang はまったく新しい C/C++/Objective-C コンパイラで、独自のフロントエンドと、バックエンドとして LLVM を使用します。その利点は、より良いエラーメッセージ、より速いコンパイル時間、そして他のツールがコンパイルプロセスにフックするためのより簡単な方法です (たとえば LLDB デバッガ Clang 静的アナライザー ). また、適度にモジュール化されているので、C、C++、または Objective-C のコードを解析する必要がある他のソフトウェアのライブラリとして使用することができます。

これらのアプローチ (通常の GCC、GCC + LLVM、および Clang) のそれぞれには利点と欠点があります。私が見た最後の数セットのベンチマークでは、ほとんどのテストケースで GCC がわずかに速いコードを生成し (ただし、いくつかのテストケースでは LLVM がわずかに優勢でした)、LLVM と Clang は著しく優れたコンパイル時間を示しました。GCCとGCC/LLVMの組み合わせは、より多くのコードがGCCのCのフレーバーでテストされ動作するという利点があります。GCCだけが持つコンパイラ特有の拡張がいくつかあり、標準が実装を変えることを認めていてもコードがある特定の実装に依存しているところがいくつかあります。もしあなたが大量のレガシーCコードを入手した場合、それがClangで動作するよりもGCCで動作する可能性の方がずっと高いのです、しかしこれは時間とともに改善されています。