LLVM、llvm-gcc、またはClangの経験がある人はいますか?
llvmの背後にある全体的なアイデアは私には非常に興味をそそられるようであり、私はそれがどのように機能するかを見ることに興味があります。ツールの生産準備が整っていない場合は、ツールの試用に多くの時間を費やしたくありません。
ツールの経験がある場合、それらについてどう思いますか?どのような主な制限に遭遇しましたか?最大のメリットは何ですか?
どうもありがとう!
LLVM については、いくら言っても言い尽くせません。私が調べた他のコンパイラ プロジェクトと比較して、非常に簡単に操作できます。私はコンパイラの専門家ではありませんが、LLVM や clang のいくつかの制限に不満を感じた場合は、通常、飛び込んで変更するのは非常に簡単です。
私たち (Nate Begeman、私、および他の数人) は、コンパイラー設計の実際の経験がなくても PPC バックエンドを作成しましたが、専門家でなくてもアプローチできるほど単純に見えました。私たちは PPC アセンブリにかなり精通していましたが、数週間の空き時間で LLVM-gcc が PPC コードを出力するようにできたことは、依然として驚くべきことでした。これまでにコンパイルした Hello World の中で間違いなく最も満足のいくものの 1 つです。
私は何ヶ月もの間、LLVM をオン/オフして遊んでいます。私は、 OCamlプログラミング言語からの LLVM の使用をカバーする2 つのOCaml Journal記事を書きました。OCaml 言語はコンパイラを作成するのに理想的であり、構文解析などのための強力で成熟したツールやライブラリが豊富にあるため、これは特に興味深いことです。
全体として、私の経験は非常にポジティブです。LLVM は缶に書かれていることを実行し、非常に使いやすいです。生成されたコードのパフォーマンスは素晴らしいです。私が書いたプログラムの 1 つは、私がテストしたどのコンパイラ (GCC を含む) よりも高速な実行可能ファイルを生成する単純で小さな Brainf*ck コンパイラでした。
私が LLVM に不満を持っているのは 2 つだけです。まず、例外を発生させる代わりに、何か問題が発生した場合は常に abort() を使用します。これは、LLVM からすべての例外の使用を削除しようと努力している作成者による意図的な設計上の決定でしたが、LLVM を使用するコンパイラをデバッグしようとすると、OCaml からバックトレースを取得できなくなります: プログラムは LLVM からのテキストによる説明で終了します。ソースのどこでエラーが発生したかについての手がかりはありません。第二に、LLVM のコンパイル済みライブラリはとてつもなく大きい (20Mb)。これは C++ によって発生した肥大化によるものだと思いますが、コンパイルが非常に遅くなります。
編集: LLVM に関する私の作業は、高性能で高レベルのガベージ コレクション仮想マシンの作成で最高潮に達しました。ここから無料でダウンロードして、対応するベンチマークをチェックしてください(すごい!)。@Alex: その BF コンパイラをどこかでできるだけ早く入手します。
私は最初に LLVM を試してみましたが、このチュートリアルに取り組んだことで、その可能性に非常に興奮しました。これを使用して、比較的簡単に JIT をアプリに組み込むことができるという考えに、私は興奮しました。
制限、安定性、パフォーマンスなどについて、有用な意見を提供できるほど深くは踏み込んでいません。あらゆる点で優れていることは理解していますが、それは純粋に伝聞にすぎません。
ツールについてお尋ねになりましたが、Eclipse CDT (Windows、Linux、および Mac 用) 用の LLVM プラグインがあることをお伝えしたいと思います。LLVM を IDE にうまく統合し、ユーザーは LLVM について何も知る必要はありません。ビルド ボタンを押すだけで、.bc および実行可能ファイル (およびユーザーには見えない背景の中間ファイル) を生成できます。
最新バージョンは、公式の Eclipse 更新サイト ( http://download.eclipse.org/releases/mars ) から入手できます。
これはプログラミング言語の下にあり、「C/C++ LLVM-Family Compiler Build Support」という名前です。