フェンリル

Developer's Blog

Xcode 4 でデフォルトになった LLVM って何?

Xcode build bar

こんにちは。開発担当の金内です。

Xcode 4 は UI もすっかり変わりましたが、ビルドの要であるコンパイラもデフォルトが変更されています。その新しいコンパイラのキーワードが「LLVM」です。いまいち聞き慣れない方もいると思うので、今回はその LLVM について簡単にご紹介します。


ざっくりとした結論から言ってしまえば、Xcode における LLVM は従来のデフォルトコンパイラである GCC を置き換えるものです。LLVM には次のような特徴があります。

  • ・コンパイルが速い
  • ・コンパイルされたコードが速い
  • ・エラーメッセージがわかりやすい
  • ・他のツールと連携しやすい

いいことばかりですね。

しかし、コンパイラは要となる重要なコンポーネントなので、互換性などへの配慮から、Apple は GCC からの移行を少しずつ段階的に進めています。

実際、Xcode 4.0 でのデフォルトは完全に LLVM ではなく、”LLVM GCC” という、互換性に配慮したものになっています。LLVM GCC については後ほど説明します。

■ LLVM.org

そもそも LLVM は、Xcode とはまったく別に LLVM.org で進んでいるコンパイラ関連技術の開発プロジェクトです(LLVM は Low Level Virtual Machine の略)。オープンソースである LLVM の開発には Apple も強力にコミットしています。LLVM.org のサイトデザインを見ると Apple と深い関係があるとはちょっと思えない雰囲気ですが、LLVM のロゴであるドラゴンの絵は Apple 製とのことです。

LLVM Dragon Logo

LLVM.org にあるいろいろなプロジェクトの中で、Xcode のコンパイラとして深く関係しているのは、最適化やコード生成機能を持つ “LLVM Core” と、LLVM Core に対する C/C++/Objective-C 用のフロントエンドである “Clang” です。

上記の特徴のうち、主に Clang が高速なコンパイルや親切なエラーメッセージを実現し、LLVM Core が速いコードの生成を担っています。

Clang は従来の GCC とはまったく別のパーサなので、GCC ではコンパイルできるソースコードが Clang ではエラーになる、というようなケースも(その逆も)ありえます。

■ Xcode 4.0 のデフォルト “LLVM GCC”

Xcode 4.0 には Clang も搭載されていますが、デフォルトの “LLVM GCC” 設定では Clang ではなく llvm-gcc という別のフロントエンドが使われます。

llvm-gcc も LLVM.org で開発されているものの1つです。このフロントエンドを使うと、パーサは GCC のものを使いつつ、最適化やオブジェクトコード生成を LLVM Core で担当します。

llvm-gcc はパーサが GCC なので、LLVM Core の高度な最適化などの恩恵は受けられつつ、「これまで GCC でコンパイルできていたソースコードがコンパイルエラーになる!」というようなケースがほぼなくなるわけです。

■ Xcode 4.0 で Clang を使う方法

プロジェクトのビルド設定の Compiler Version に「LLVM Compiler 2.0」を指定すれば Clang をフロントエンドとして高速コンパイルや親切なエラーメッセージの恩恵を受けられます。

Xcode 4 compiler setting

ためしに Sleipnir Mobile for iOS のソースコードのコンパイル時間をそれぞれの設定で比較してみました(数値は GCC を 100 としたときの相対値)。だいぶ差が出ますね。

Xcode 4 GCC LLVM build time

■ Apple LLVM

Xcode に搭載されている LLVM は「Apple LLVM」と呼ばれていて、Apple によるカスタマイズなどを含んだものになっています。Xcode での「LLVM Compiler 2.0」のようなバージョン番号も、LLVM.org でのリリースバージョンとは必ずしも一致しません。

■ まとめ

今回は LLVM のコンパイラとしての側面を簡単に紹介しました。速いコードを速く生成してくれる LLVM は一度試してみる価値はあります。LLVM は単なるコンパイラとして以外にもいろいろとうれしいこと(他のツールとの連携など)があるのですが、それについてはまたの機会に紹介したいと思います。

なお、現在の LLVM は成熟し安定していますが、古いバージョンには不具合が含まれていたりもするので、ぜひ最新版の Xcode 4 でご利用ください。

■ お知らせ

いまフェンリルでは Web デザイナーを絶賛大募集中です。詳しくは こちらの記事をご覧ください。「Xcode 大好きだけど Web デザインはちょっと…」というアナタも Web デザイナーなお友達に教えてあげてください。もちろん、Xcode 大好きなスマートフォンエンジニアも募集してます!!

Facebook コメント

コメント

Mac OS X LionでRails開発環境構築 | やぶろぐ – ooyabuh.org -2012年02月29日 21:08

[...] – KUROIGAMEN(黒い画面) Xcode 4 でデフォルトになった LLVM って何? Xcode 4.3 + MacPorts 2.0.3 | 株式会社 ジェイテックジャパン Xcode の GCC [...]

iOS5より古いバージョンのプロジェクトファイルをARCに対応させる | PLUS2012年07月31日 9:21

[...] ているようです。 ・コンパイルが速い ・コンパイルされたコードが速い ・エラーメッセージがわかりやすい ・他のツールと連携しやすい 参考:Xcode 4 でデフォルトになった LLVM って何? [...]

Snow LeopardからMoutain Lionにアップグレードしたら、rvmでRuby1.9.2を導入できない? « TBヘッドライン2012年07月31日 9:40

[...] した。 LLVMのコンパイラについては、こちらの記事が参考になりそうです。 http://blog.fenrir-inc.com/jp/2011/07/llvm.html このコンパイラの制限で、rvmのRubyインストール時にコンパイルが通るバー [...]

「LLVM 3.3」リリース | ソフトアンテナブログ2013年06月18日 21:55

[...] LLVMって何だっけ?という場合「Xcode 4 でデフォルトになった LLVM って何?」がわかりやすかったです。 [...]

CとC++の勉強方法について2014年02月13日 18:03

[…] Xcode 4 でデフォルトになった LLVM って何? […]

iOS5より古いバージョンのプロジェクトファイルをARCに対応させる | イリテク株式会社2014年08月26日 7:40

[…] ているようです。 ・コンパイルが速い ・コンパイルされたコードが速い ・エラーメッセージがわかりやすい ・他のツールと連携しやすい 参考:Xcode 4 でデフォルトになった LLVM って何? […]

名前(必須)

メールアドレス(必須)

URL

スタイル用のタグが使えます

このコメント欄でのご質問、ご要望には、開発チームから回答できない場合があります。ご質問、ご要望は「User Community」内のフォーラムまでお寄せください。