良輔(51)1414141件のシェア(ちょっぴり話題の記事)この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。前回の記事「Rubyの処理系とGCについて」を書いたときに、LLVMがイマイチ理解できずもやっとしてたので調べました。このエントリーは「LLVMとは」でググった(先日の僕のような)人向けの記事です。間違ったことを書いてあったら教えてください。疑問この記事を書く前の疑問はおおよそ以下の様なものです。LLVMはコンパイラ基盤って言われてるけど、コンパイラ基盤って何?LLVMはコンパイラ基盤であってVMじゃないって言うけど、LLVMに含まれるJITコンパイラはVMと違うの?LLVMでマシンコードを作ったあと、実際の実行はどうするの?色々とググって調べたりしたのですが、LLVMの全体像がつかめるまとまった情報が見つからなかったので、一次情報(llvm.org)のドキュメントを読むことにしました。LLVMプロジェクトは、モジューラと再利用可能なコンパイラとツールチェーン技術の集まりです。その名前にもかかわらず、LLVMは従来のVMとはほとんど関係がありません。LLVMという名前は頭文字をとったものではなく、プロジェクトの名前です。LLVMは、モダンでSSAベース1な任意のプログラミング言語の静的コンパイルと動的コンパイルの両方をサポートできるコンパイル戦略を提供することを目的とした、イリノイ大学の研究プロジェクトから始まりました。projectに成長しました。その多くは、学術研究はもちろん、幅広い分野の商業用やオープンソースプロジェクトによりプロダクションで使われています。Coreライブラリsourceやtargetとは独立したモダンなオプティマイザと、多くの一般的なCPU(一般的ではないものもある)のコード生成をサポートしています。IR)として知られている、よく定義されたコード表現を中心に構成されます。Coreライブラリは、良くドキュメント化されていますので、あなた自身が言語を作成(または既存のコンパイラをもってきて)、オプティマイザやコードジェネレータとしてLLVMを使うことは特に簡単です。ClangLLVMネイティブなC/C++/Objective-Cのコンパイラで、驚くほど高速なコンパイルを提供することを目的としています。projectLLVMとClangによって提供されたライブラリ上で、ネイティブなデバッガを提供します。projectsC++標準ライブラリの標準準拠と高性能な実装を提供します。project5以降の説明は、日本語に直しても意味が分からなくなってきたので割愛します。Coreライブラリ」が一番メインのプロジェクトということがわかります。一般的に「LLVMは〜」というとここを指すようですね。Coreライブラリ」の付随プロジェクトのように見えます。Featuresこの章はCとC++のコンパイラの話のようです。SystemLLVMはシンプルな低レベル言語を使います。LLVMにはCとC++向けのフロントエンドが含まれます。その他の言語のフロントエンドは開発中です。oO(フロントエンド?)LLVMにはすっごいオプティマイザが含まれます。modelをサポートします。collectionをフルサポートします。oO(お、GCがある。generatorというのがある。以降は機能的な話ではないので省略。うーん、いくつか気になるキーワードはありましたが、依然として全体像が見えません。