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 大好きなスマートフォンエンジニアも募集してます!!

Copyright © 2019 Fenrir Inc. All rights reserved.