LLVM 3.5リリース
参照:http://lists.cs.uiuc.edu/pipermail/llvm-announce/2014-September/000055.html
い ま さ ら 感。2014.9.4くらいにリリースされてた。
LLVMプロジェクトの各ホームページを見るといくつか更新があるようだ。libc++とlibc++abiにも更新が!
前回(3月かよ)はミスや勘違いいろいろあったし、そもそもライブラリのリンクを十分に理解してなかったようなのでもう一度やり直す。
参照:http://lists.cs.uiuc.edu/pipermail/llvm-announce/2014-September/000055.html
い ま さ ら 感。2014.9.4くらいにリリースされてた。
LLVMプロジェクトの各ホームページを見るといくつか更新があるようだ。libc++とlibc++abiにも更新が!
前回(3月かよ)はミスや勘違いいろいろあったし、そもそもライブラリのリンクを十分に理解してなかったようなのでもう一度やり直す。
スカラーまたは範囲に対して、同様の操作をそれぞれ定義したいと思った。 もちろんオーバーロードによって同様の関数名として定義したい。 範囲に対する操作を定義するときは、C++標準に倣うとIteratorを使うことが多いので、次のようなコードだ。
template<typename Tin, typename Tio>
void add(Tin first, Tin last, Tio io)
{
if(first != last)
{
*io += *first;
while(++first != last)
*++io += *first;
}
}
template<typename Tio, typename T>
void add(Tio first, Tio last, T v) // error: redefine
{
if(first != last)
{
do
{
*first += v;
}
while(++first != last);
}
}
関数のシグネチャが同一なので再定義になっておりコンパイルできぬ。 では3つめの引数の型で呼出を切り替えるようなSFINAEにしてみよう。 これが、思ったよりは簡単でなかったという話。
ヘッダファイル<type_traits>をインクルードすると、標準ライブラリによって型特性を調べることができるようになる。std::is_sameとかstd::is_constructibleとか。 大体のものはそれだけで事足りるが、今回はある型がSwappableかどうか確認したくなったので実装してみようと思った。
参考:http://faithandbrave.hateblo.jp/entry/20130501/1367396895
Webを眺めていると、C++14がすでに標準の世界であるかのようにも見えてしまう。 しかし現在の標準はやはりC++11だし、多くの人はまだC++03を書いている。気がする。
C++03に比べれば、C++11では快適にコーディングできる。断然楽だ。C++14は、もっと楽そうだ。
C++で普段からinlineな関数ばかり書いていると、戻り値型の型指定がとてもしんどい。 typedef構文なしでは生きていけないC++03は、もはや使うことも難しい(個人の感想です)。
C++14ではラムダ式のように、一般関数にも戻り値型推論の機能が備わるとのことで待ち遠しい。 茶を飲みながら待つにはまだ少々長い時間がかかりそうなので、C++11の枠内でなんとかならないか考えてみた。
libc++abi is known to work on the following platforms, using clang.WindowsやLinuxはお帰りくださいとな… libc++rtとかもあるし、これにこだわる必要ないよ。
- Darwin
cd ~/Projects svn co http://llvm.org/svn/llvm-project/libcxxabi/trunk libcxxabi
"TRIPLE=-apple-"は林檎の国のおまじない。
cd libcxxabi/lib TRIPLE=-apple- ./buildit
cd ~/Projects svn co http://llvm.org/svn/llvm-project/libcxx/trunk libcxx
そうだね、CMakeだね。 ここでは前回構築したClangを使ってみる。 なお、libc++abiでは前回構築したClangを使ってビルドすることができない。
mkdir libcxx/build cd libcxx/build CC=~/Projects/llvm/build/bin/clang CXX=~/Projects/llvm/build/bin/clang++ \ LD_LIBRARY_PATH=~/Projects/libcxxabi/lib:$LD_LIBRARY_PATH \ cmake -G "Unix Makefiles" -D LIBCXX_CXX_ABI=libcxxabi \ -D LIBCXX_LIBCXXABI_INCLUDE_PATHS="$HOME/Projects/libcxxabi/include" .. make -j5
次はもう一度llvm/clangをビルドしよう。
レイアウトとテンプレートを決める。好きにすればいい。 個人的には緑が好きなので、白基調緑アクセントな感じで。 眼が疲れないのがいいよ。
参照:http://clang.llvm.org/get_started.html#build
cd ~/Projects svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
cd llvm/tools svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
cd clang/tools svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk extra
cd ../../../projects svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
参照:http://llvm.org/docs/CMake.html
cd .. mkdir build cd build
cmake .. make -j5 #コア数+1がよいって噂
次はlibc++をインストールしよう