【レポート】
BSDCan2008、およびその直前に開催されたFreeBSD Developer Summitを通じて関係者がもっとも強い関心を持ったのは、もしかするとChris Lattner氏が担当したセッション「BSD licensed C++ compiler - LLVM and Clang: Next Generation Compiler Technology」だったかもしれない。同氏のセッションで初めてLLVM(Low Level Virtual Machine)について知ったという人も少なからずいたようだ。Lattner氏はLLVMのチーフアーキテクトであり、同技術を語るには適切な人物といえる。
LLVMはモダンなテクニックで開発されたコンパイラインフラストラクチャだ。プログラミング言語に依存しないモダンなオプティマイザとコードジェネレータを持ち、複数のプログラミング言語とアーキテクチャをサポートし、GCC互換フロントエンドllvm-gccを持っているという特徴がある。再利用可能なオプティマイザをさまざまなポイントで実行して最適化を行う。静的ビルドも動的ビルドもその組み合わせも可能だ。さらに特記すべきはllvm-gccフロントエンドを除いて、GPLではなくBSD Licenseで開発されているという点だ。
|
|
LLVM optimizer features used by llvm-gcc - BSDCan2008 Chris Lattner氏の発表資料より抜粋 |
Other LLVM features used by llvm-gcc - BSDCan2008 Chris Lattner氏の発表資料より抜粋 |
|
|
LLVM Link Time Optimization - BSDCan2008 Chris Lattner氏の発表資料より抜粋 |
OpenGL to LLVM: At runtime - BSDCan2008 Chris Lattner氏の発表資料より抜粋 |
既存のOSS C/C++/Objective Cコンパイラは古いコード生成技術に基づいており、JITやクロスファイルオプティマイザといったモダン技術を採用していないため、ほかのアプリケーションで再利用しにくく、さらにリリースごとに遅くなっているという状況にある。LLVMはモダンなテクニックを活用することでこうした状況を改善することに目的がおかれている。従来どおり静的にコンパイルすることもできるし、JITで動作させることにも対応している。
FreeBSDではメインのコンパイラにGCCを採用している。GCCはOSS C/C++コンパイラのメインストリームにあり、複数のアーキテクチャに対応している。今のところGCCをメインコンパイラとして採用するのはリーズナブルな選択肢だ。しかし、*BSDではコンパイラがGPLであることに抵抗を感じる向きもあり、GCCがGPLv3に移行した場合の影響を懸念する声もある。そのため、BSD Licenseや他ライセンスのC/C++コンパイラの模索も常に続けられている。
LLVMというコンパイラがあることは以前から知られており、すでにPorts Collection(devel/llvm)にも追加されている。野心的な目標を掲げていることが同プロジェクトページからよくわかるが、GCCが存在する中でそういったコンパイラの開発が可能なのか半信半疑であったり、そもそもGCC以外の候補をそれほど気にしていなかったという状況だったと言えるだろう。しかし、サイトのドキュメントを読むのと、実際に担当者から話を聞くのとでは、印象がだいぶ違ってくる。発表を聞く開発者はLLVMに大きな関心を持ったようだった。
LLVMが魅力的なのは、BSD Licenseである以外にも、GCC 4.2のリプレースを目指したllvm-gccフロントエンドを用意しているところにある。簡単に言ってしまえば、gccをllvm-gccに変更するだけで入れ替えができる。しかも入れ替えるだけで最適化時間が30%ほど短縮されるほか、生成されるコードが5%から10%ほど優れたものになるという。
|
|
Carbon.h Parsing / Analysis Time - BSDCan2008 Chris Lattner氏の発表資料より抜粋 |
ProgreSQL Front-end Times - BSDCan2008 Chris Lattner氏の発表資料より抜粋 |
LLVMがGCC 4.2のリプレースを目的としたフロントエンドllvm-gccを持っているからといって、完璧にすべての互換性を実現しているわけではない。それにFreeBSDがLLVMへの移行に取り組んだとしても、その対応はすぐに終わるというものではないだろう。しかし、BSD Licenseであり、コンパイル性能も生成されるコードの質も良いということになれば、開発者が興味を惹かれないわけがない。
しかも、カーネルのみならず、Ports CollectionのビルドにLLVMを採用すればビルド時間を短縮できる可能性がある。OpenOffice.orgやKDE、Gnomeなど大規模アプリケーションが増える中、ビルド時間が短いうえに上質なコードを生成するコンパイラの存在は魅力的だ。ports committerにとってもLLVMは魅力的である。
LLVMではGCC 4.2互換のフロントエンドではなく、独自のC/C++/Objective CフロントエンドとしてClangを持っている。GCCフロントエンドは遅いうえにメモリを大量に消費し、さらに最近のIDEが要求する機能に対応しきれないため、それらを解決したフロントエンドが必要という発想によるものだ。Clangはコンパイル時間がGCCよりも高速なうえにモダンなIDEや商用コードチェッカにも対応している。
さらにLLVMは、C/C++/Objective C以外の言語への発展も可能だ。多くのプログラミング言語ですでに実装された最適化技術が採用できるということになれば、LLVMの発展性の高さは魅力的なものだ。もちろんその間、GCCの開発も停滞しているわけではない。GNU binutilsの一部として新しいELFリンカ機能が登場するなど改善も続けられている。
ともあれ、LLVMは魅力的なコンパイルインフラとしての認識を広めつつあるようだ。直近でFreeBSDがLLVMを採用するとは思えないが、長期的に見た場合、LLVMへの移行も起こりうるということは抑えておくと良いだろう。
| 花粉の運び屋“マルハナバチ”の国勢調査 [18:11 5/24] |
| 「Arid5a」は自己免疫疾患を引き起こすカギ分子の可能性大 - 阪大 [17:39 5/24] |
| 岡山大、中枢神経の「ランビエ絞輪」形成機構の解明に1歩前進 [17:35 5/24] |
| 細胞間接着を担うタンパク質「クローディン」に関する発見 - 阪大など [17:32 5/24] |
| パナソニック、LEDに匹敵する照明用高効率白色有機EL素子を開発 [17:29 5/24] |
|
[マンガート]ビームスとマンガの異例のコラボ 成功の秘密は? [09:00 5/26] ホビー |
|
e.g.って?【知っているとちょっとカッコいい英語のコネタ】 [09:00 5/26] ライフ |
|
(出会って間もなく)「アクセサリーとか高い服とか、全然興味ないよ」【女性の恋愛心理】 [09:00 5/26] 恋愛・結婚 |
|
(初対面で)「礼儀正しいよね」【男性の恋愛心理】 [08:00 5/26] 恋愛・結婚 |
|
【連載】読む鉄道、観る鉄道 第33回 『探偵はBARにいる』 - JR北海道721系の車内で、大泉洋のアドリブが炸裂! [08:00 5/26] 旅行 |