やじうまの杜

Windows版「Google Chrome」のコンパイラーが「MSVC」から「Clang」に

今のところバイナリのサイズとパフォーマンスは一長一短、今後の最適化に期待

 “やじうまの杜”では、ニュース・レビューにこだわらない幅広い話題をお伝えします。

「LLVM」プロジェクトの公式ブログ

 オープンソースのコンパイラープラットフォーム「LLVM」プロジェクトの公式ブログによると、「Google Chrome 64」ではWindows版のコンパイルにも「Microsoft Visual C++(MSVC)」ではなく「Clang」が使われているそうです。MacやLinuxではすでに「Clang」が使われているので、すべてのプラットフォームでコンパイラーが統一されたことになります。「Clang」の採用は「Opera 51」でも行われていますが、どのようなメリットがあるのでしょうか。

 同プロジェクトのブログ記事によると、導入の動機としてはすべてのプラットフォームでコンパイラーを「Clang」に統一できることが大きかったようです。「Google Chrome」の開発者が利用するOSはさまざまですが、コンパイラーが一緒であればビルドに関する知見の多くを共有することができます。また、コンパイラー特有の不具合に悩まされることがなくなる点や、1つのコンパイラーの改善がすべてのプラットフォームにいきわたる点、クロスコンパイルが可能な点も利点といえるでしょう。以上は「Clang」がクロスプラットフォームであることの利点になります。

 また、「Clang」自体にも「MSVC」より優れた部分が多いです。たとえば、「Google Chrome」で使われているプログラミング言語「C++」は数年おきに仕様が改訂されていますが、「Clang」の方が新しい仕様への追従が早いので、便利な最新の言語機能を一早く取り入れることができます(すべての環境のコンパイラーが新しい仕様に対応していないと、プロジェクトでの採用は難しいです)。そのほかにも、ビルドで見つかった「Clang」の不具合の修正・反映が迅速な点、継続的インテグレーションを前提とした診断出力が優れている点、「Chromium」開発に特化したプラグインがそろっている点などもメリットなのだそう。

 とはいえ、Windows版「Google Chrome」の開発に「Visual Studio」が利用されなくなるわけではありません。コンパイラーを「MSVC」から「Clang」に切り替えれば、これまで通り「Visual Studio」でも「Google Chrome」をビルドできるでしょう。ただし、「MSVC」との組み合わせで得られたメリットの一部――“Edit and Continue”などの高度なデバッグ機能など――は享受できなくなります。

 ちなみに、「Clang」を利用してローカルで「Google Chrome」をビルドすると、「MSVC」よりも約15%時間がかかるそうです。「Windows Defender」がビルドの邪魔をすることがあるようなので、ホワイトリストへの追加が必要になるかもしれません。

 エンドユーザー的に気になるバイナリサイズは、64bit版で小さくなるものの、32bit版では少し大きくなるとのこと。一長一短と言ったところでしょうか。パフォーマンスは、テスト項目によって多少の優劣が出るものの、「MSVC」版とおおむね変わらないようです。

バイナリサイズの比較

 ただし、「Clang」でビルドされたバイナリは“LTCG”や“PGO”などの最適化が施されていません。性能向上の余地が若干残されているので、今後に期待ですね。