最近流行のコンパイラ、Clangを試してみました。

Clangとは

Clangとは、gcc,iccのような、コンパイラの一種です。プログラミング言語C、C++、Objective-C、Objective-C++用。

Clangの最終目標は、GNU gccの置き換えらしい。

静的解析能力やリファクタリング機能などももつため、IDEとの結合も目標らしい。

以下は、setreduceという、Googleのエンジニアが開発しているリファクタリングツールのデモ動画。

Clangを利用すると、コンパイラ時間がgccに比べて短くなるらしい。今回の目的は、それを確かめるためです。Clangのパフォーマンスがgccよりも良かったら乗り換えてみる。

Cygwinへのインストール

setup.exeに用意されているようです。自分はapt-cygで取得。

$ apt-cyg install clang
$ apt-get install llvm
$ clang -v
clang version 3.1 (branches/release_31)
Target: i386-pc-cygwin
Thread model: posix

取得できたものは、3.1。現在の最新は、3.3なので、少し古い。

ベンチマーク

C言語でかかれたプロジェクトをベンチマークとしてコンパイルしてみます。Clangのコンパイラオプションはgccと互換性があるので、makefileのCCオプションを変えるだけで行ける。

tree project

curl -LO https://mama.indstate.edu/users/ice/tree/src/tree-1.6.0.tgz
  • gcc 7.8s
  • clang 9.5s

なんと、gccの勝利。あれ(・・?

screen project

git clone git://git.sv.gnu.org/screen.git
  • gcc 1:34
  • clang 1:02

おお、30秒も速かった!Clangの圧倒的勝利。

Warningメッセージもカラー付きでわかりやすく表示してくれる。

process.c:6272:35: warning: operator '?:' has lower precedence than '+'; '+' will be evaluated first [-Wparentheses]
strncpy(p, buf, 1 + (l < len) ? l : len);
                ~~~~~~~~~~~~~ ^

eclipseからClangでコンパイルする(4.3ではバグってた)

LLVM Tool Chain for Eclipse CDTプラグインをインストールする。

プロジェクトを右クリックして C/C++ビルド > ツールチェーン・エディタ を選択。

互換ツールチェーンのみ表示のチェックを外すと、ツールチェーンにLLVM Clang(cygwin)が選択できるので、選択。

ただし、Eclipse最新版4.3で試したところ、2度めに設定画面を開くとNullPointerExceptionが発生する。つまり、まだバグっているから使わないほうがいいということ。

最後に、ウィンドウ -> 設定 -> LLVM を選択。Library path libstdc++ がある場所のパスを通す。自分の環境では、C:\cygwin\lib\gcc\i686-pc-cygwin\4.5.3

これで、EclipseからClangでコンパイルできた。