【レポート】
GCCに匹敵するコンパイラ?! LLVM - BSDCan2008
2008/06/03
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だが…
FreeBSDではメインのコンパイラにGCCを採用している。GCCはOSS C/C++コンパイラのメインストリームにあり、複数のアーキテクチャに対応している。今のところGCCをメインコンパイラとして採用するのはリーズナブルな選択肢だ。しかし、*BSDではコンパイラがGPLであることに抵抗を感じる向きもあり、GCCがGPLv3に移行した場合の影響を懸念する声もある。そのため、BSD Licenseや他ライセンスのC/C++コンパイラの模索も常に続けられている。
LLVMというコンパイラがあることは以前から知られており、すでにPorts Collection(devel/llvm)にも追加されている。野心的な目標を掲げていることが同プロジェクトページからよくわかるが、GCCが存在する中でそういったコンパイラの開発が可能なのか半信半疑であったり、そもそもGCC以外の候補をそれほど気にしていなかったという状況だったと言えるだろう。しかし、サイトのドキュメントを読むのと、実際に担当者から話を聞くのとでは、印象がだいぶ違ってくる。発表を聞く開発者はLLVMに大きな関心を持ったようだった。
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は魅力的である。
GCCの代わりとなるか、今後の開発に注目
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への移行も起こりうるということは抑えておくと良いだろう。
関連記事
- 【レポート】性能改善ツールの要「DTrace」がFreeBSD 8にマージ - BSDCan2008[2008/6/3]
- 【レポート】FreeBSD、U-Boot対応で組込開発負荷軽減 - BSDCan2008[2008/6/3]
- 【レポート】問題報告システムをより使いやすいものにするには? - BSDCan2008[2008/6/3]
- 【レポート】急成長! FreeBSD/mips対応アプライアンス - BSDCan2008[2008/6/3]
- 【レポート】Jail + リソース制限機能、FreeBSD 8で登場か - BSDCan2008[2008/6/3]
- 【レポート】FreeBSD 7、1500%ピーク性能改善の裏にあるもの - AsiaBSDCon 2008[2008/4/4]
- 【レポート】GEOMでジャーナリング、UFSの機能を柔軟に拡張 - AsiaBSDCon 2008[2008/4/4]
- 【レポート】f.root-servers.netを支えるFreeBSDとBIND9 - AsiaBSDCon 2008[2008/4/4]
- 【レポート】使いやすさ抜群! FreeBSDベースのデスクトップOS PC-BSD - AsiaBSDCon 2008[2008/4/4]
- FreeBSD 7.0登場 - 高負荷時ピーク性能が1500%改善[2008/2/28]
- FreeBSD 6.3登場 - 2010年1月セキュリティ対応期限[2008/1/20]
- 超高速HTTPアクセラレータ最新版"Varnish 1.1"登場[2007/7/23]
- 【レポート】備えあれば憂いなし - pfSense/pfSyncでネットワーク管理を容易に[2007/5/24]
- 【レポート】PCをNASサーバへ変身させる! かんたん本格派NASソリューション - FreeNAS登場[2007/5/24]
- 【レポート】高速化プログラミングの参照実装としても活用される「Varnish」[2007/5/24]
- 【レポート】FreeBSDにおけるサーバ仮想化の取り組み[2007/5/21]
- 【レポート】足掛け7年のサクセスストーリ - マルチコアシステムで大幅に性能向上達成[2007/5/19]
- 【レポート】Ports Collection 17,000へ - インフラやメカニズムの改善へ着手[2007/5/19]
- 【レポート】インストーラが世代交代 - sysintall(8)からfinstallへ[2007/5/18]
関連サイト
ヘッドライン
- Active Directory誕生10周年記念セミナーが2月27日に開催[12:26 2/10]システム管理
- NEC、サイオスら、自動バックアップバック「TWIN NAS 2TB パック」発表[11:45 2/10]システム管理
- グレープシティ、"Excel機能"を提供する.NETコンポーネントの新版発表[11:22 2/10]プログラミング
- トレンドマイクロ、USBメモリ型ウイルス検索製品「Portable Security」発表[10:42 2/10]セキュリティ
- 【コラム】FileMaker×PHPで作る、簡単・便利なWebアプリ 第49回 結果セットの取扱いに特化したクラス、FileMaker_ResultSet(2)[10:18 2/10]プログラミング
- CSS/HTMLリファレンスマニュアル、最新ブラウザ互換情報[09:00 2/10]JavaScript / CSS / HTML
- 【レビュー】BOOK REVIEW - 現場に振り回されるだけのSE人生がイヤならチカラをつけよう[09:00 2/10]SE力
- 【レポート】暗号2010年問題に向け「いつまでに何をすべきか」 - ベリサインが説明[08:00 2/10]セキュリティ
- ルネサス、RXファミリ第3弾としてモータ制御向け「RX62T」を製品化[07:00 2/10]エレクトロニクス
- Rambus、次世代携帯機器向けメモリ「モバイルXDR」を発表[21:16 2/9]エレクトロニクス






