BT

LLVM 2.8 がリリース

| 作者: Alex Blewitt フォローする 4 人のフォロワー , 翻訳者 吉田 英人 フォローする 0 人のフォロワー 投稿日 2010年10月11日. 推定読書時間: 3 分 |

原文(投稿日:2010/10/07)へのリンク

LLVM チームは昨日,次世代 C/C++ コンパイラ,オプティマイザ,ランタイムを含む仮想マシンインフラストラクチャである LLVM 2.8 をリリースした。

LLVM の実体は C,Objective-C,C++ コンパイルの実行手段を形成するプロジェクトの集合体である。コンパイルそのものを実行するのは Clang で,これまで C と Objective-C がコンパイル可能であった。C++ のサポートは LLVM 2.7 で追加されていたが,今回の LLVM 2.8 から C++ アプリケーションの標準ライブラリ libc++ が加えられて,完全な C++ の仕様を備えるようになった。かっての gdb の置き換えとして,新たな LLDB デバッガも提供されるが,一方でコンパイラの使用するパーザとソースコードツールは変更されない。LLDB は少し前のバージョンから提供されていたが,リリースとしては今回の LLVM 2.8 が最初となる。

GPL 下でリリースされているモノリシックなコンパイラである GCC とは違って,LLVM はよりモジュール化されたツールファミリであり,GPL よりも寛容な BSD ライセンス の恩恵によって商用ツールへの組み込みも可能になっている。その結果,Apple の Xcode のようなアプリケーションでも Clang がサポートされ,gcc を用いる他のアプリケーションに対しての高速化を実現している。さらに AST (Abstract Syntax Tree,抽象構文木) を他のツールからも参照できるため,ソースコードの構造とコンパイルされたコードとの対応に関して,IDEがより詳細な情報を取得できるのだ。

さらにモジュールアーキテクチャによって,ソースコードを走査して潜在的バグを指摘する Clang 静的アナライザや,プログラム内で発生するイベント列を識別可能なシンボリック仮想マシンである Klee などのツールが実現されている。この Klee は特徴のひとつとして,バグを検出した場合に,そのフィックス作業が完了したことを証明するテストケースをプログラム的に生成する機能を備えている。

C言語がすべてではない

最後に,LLVM プロジェクトは C言語とその派生言語のためだけのものではない。フロントエンドパーザの基本にはシンボリックな命令セット – 移植性を持ったアセンブリコード – があって,サポート対象マシンアーキテクチャのいずれにも変換可能である。これによって,どのパーザやトランスレータでも,LLVM ファミリがサポートするすべてのプラットフォームで使用可能な同一のアセンブリコードを生成できる,という利点が得られる。

それだけではない。最適化がソースレベルではなくアセンブリコードのレベルで動作するため,LLVM IR にコンパイルされる言語すべてが実行時最適化の恩恵を自動的に受けられるのだ。LLVM IR を直接翻訳するランタイムも用意されている。インタプリタ言語では最初にこれを利用して,その後で JIT の実行によってアプリケーションの特定部分を最適化する,という手法が選択できる。

LLVM は,JVM と CLR の共通ランタイムを提供する VMKit,その他の言語のランタイムですでに使用されている。同じく今日バージョン 2.8 をリリースした Mono ランタイムでは,実行時最適化のため JIT として LLVM をサポートしている (mon-llvm を指定する)。その他のランタイムとしては,Ruby on LLVMMacRubyUnladen Swallow などがある。また Clam AV でも,効率的なウィルススキャンを実行するため,内部的に LLVM が使用されている。

コードが LLVM IR にコンパイルされる様子を Web 上のデモで確認することができる。さらに詳細な情報は LLVM ブログその他の資料で確認してほしい。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT