msumimz's diary

RubyにJITコンパイラを実装する個人プロジェクトの情報発信ブログです。

Visual Studio 2013に移行します [追記あり]

今まではVisual Studio 2010でもコンパイルできるように書いていたんですが、少しずつVisual Studio 2013に移行しようと思います。

移行によって、主にC++11の機能で使えるものが増えます。詳細なリストはC++11 の機能 (Modern C++) のサポートにありますが、特に

  • Initializer list
  • Range-based for

が使えるようになります。

移行の理由は、先日LLVMのtrunkのソースコードを眺めていたら、Range-based forを使っているところを見つけてしまったためです。どうやらLLVMプロジェクトでは、今後はC++11の機能を積極的に使っていくそうです。

ビルド環境を制限するのはよくないと思って今まで頑張ってきたのですが、次期LLVMのビルドに最新のコンパイラが必要になる以上、こちら側だけ頑張っても仕方ありません。*1

g++/clangのC++11対応はVisual Stduioよりずっと進んでいますので、他環境での互換性で問題になることはありません。また、Visual Studio 2013でもWindows XPで動くバイナリをビルドすることが可能です。

[追記]
実際に試してみたところ、最新のLLVM 3.4.2はVisual Studio 12までしかサポートしてませんでした。Visual Studio 13はもうリリースから1年近くたつのですが。

せっかくなので、LLVM 3.4からLLVM 3.4.2へのアップデートを試みたところ、#include <cxxabi.h>(gcc specificなヘッダファイル)などをインクルードしていてVisual Studioでビルドできないようです。

よく見ると、LLVM 3.4.2の公式ダウンロードページLLVM Download Pageに、Windows版のバイナリがありません。LLVM 3.4.1まではあるのに…。これって、Windowsでビルドできないことを知りながらリリースしたってことですかね。

うへえ。

*1:どうせこちらの正式リリース前に次期LLVMがリリースされるだろう…という情けない前提です。