clang++のboost対応状況 part.4
そろそろコードフリーズらしいから,clang++でBoost本のサンプルがどれだけコンパイルか出来るかのテストを約3週間ぶりにやってみた.
例によって,g++ 4.4.3との比較(行頭に-がclang++でコンパイル失敗)
BoostBook2nd/1-String/format1 BoostBook2nd/1-String/format2 BoostBook2nd/1-String/format3 BoostBook2nd/1-String/format4 BoostBook2nd/1-String/lexcast1 BoostBook2nd/1-String/lexcast2 BoostBook2nd/1-String/regex1 BoostBook2nd/1-String/regex2 BoostBook2nd/1-String/regex3 BoostBook2nd/1-String/regex4 +BoostBook2nd/1-String/regex5 BoostBook2nd/1-String/string_algo1 BoostBook2nd/1-String/string_algo2 BoostBook2nd/1-String/string_algo3 BoostBook2nd/1-String/string_algo4 BoostBook2nd/1-String/string_algo5 BoostBook2nd/1-String/tokenizer1 BoostBook2nd/1-String/tokenizer2 BoostBook2nd/1-String/tokenizer3 -BoostBook2nd/1-String/xpressive1 -BoostBook2nd/1-String/xpressive2 -BoostBook2nd/1-String/xpressive3 -BoostBook2nd/1-String/xpressive4 -BoostBook2nd/1-String/xpressive6 -BoostBook2nd/1-String/xpressive7 -BoostBook2nd/1-String/xpressive8 -BoostBook2nd/1-String/xpressive9 -BoostBook2nd/10-Misc/graph1 BoostBook2nd/10-Misc/param BoostBook2nd/10-Misc/po BoostBook2nd/10-Misc/signals1 BoostBook2nd/10-Misc/signals2 BoostBook2nd/10-Misc/ublas1 -BoostBook2nd/10-Misc/wave BoostBook2nd/2-SmartP/shared_ptr1 BoostBook2nd/2-SmartP/weak_ptr1 BoostBook2nd/3-System/filesystem1 BoostBook2nd/3-System/fsls BoostBook2nd/3-System/fsmv BoostBook2nd/3-System/gregorian1 BoostBook2nd/3-System/gregorian_calender -BoostBook2nd/3-System/posix_time1 -BoostBook2nd/3-System/posix_time2 BoostBook2nd/3-System/thread1 BoostBook2nd/4-IO/add_server BoostBook2nd/4-IO/addmul_server2 BoostBook2nd/4-IO/addmul_server3 BoostBook2nd/4-IO/asio1 BoostBook2nd/4-IO/asio2 BoostBook2nd/4-IO/asio3 BoostBook2nd/4-IO/gzview BoostBook2nd/4-IO/iostreams1 BoostBook2nd/4-IO/iostreams2 BoostBook2nd/4-IO/iostreams3 BoostBook2nd/4-IO/iostreams4 BoostBook2nd/4-IO/serialization1 BoostBook2nd/4-IO/serialization2 BoostBook2nd/4-IO/serialization4 BoostBook2nd/5-Math/crc1 BoostBook2nd/5-Math/crcchk BoostBook2nd/5-Math/interval1 BoostBook2nd/5-Math/interval2 BoostBook2nd/5-Math/quaternion1 BoostBook2nd/5-Math/quaternion2 BoostBook2nd/5-Math/random1 BoostBook2nd/5-Math/random2 BoostBook2nd/5-Math/random3 BoostBook2nd/5-Math/rational1 BoostBook2nd/6-Data/any1 BoostBook2nd/6-Data/any2 BoostBook2nd/6-Data/array1 BoostBook2nd/6-Data/array2 BoostBook2nd/6-Data/dynbitset1 BoostBook2nd/6-Data/dynbitset2 BoostBook2nd/6-Data/ite_adapt1 BoostBook2nd/6-Data/ite_facade1 BoostBook2nd/6-Data/multi_array1 BoostBook2nd/6-Data/multi_array2 BoostBook2nd/6-Data/multi_array3 BoostBook2nd/6-Data/optional1 BoostBook2nd/6-Data/range1 BoostBook2nd/6-Data/range2 BoostBook2nd/6-Data/tuple1 BoostBook2nd/6-Data/tuple2 BoostBook2nd/6-Data/variant1 BoostBook2nd/6-Data/variant2 BoostBook2nd/6-Data/variant3 BoostBook2nd/6-Data/variant4 BoostBook2nd/7-Func/bind1 BoostBook2nd/7-Func/bind2 BoostBook2nd/7-Func/bind3 BoostBook2nd/7-Func/bind4 -BoostBook2nd/7-Func/function1 -BoostBook2nd/7-Func/lambda1 BoostBook2nd/7-Func/spirit1 BoostBook2nd/7-Func/spirit10 BoostBook2nd/7-Func/spirit2 BoostBook2nd/7-Func/spirit3 BoostBook2nd/7-Func/spirit5 BoostBook2nd/7-Func/spirit6 -BoostBook2nd/7-Func/spirit7 BoostBook2nd/7-Func/spirit8 BoostBook2nd/7-Func/spirit9 BoostBook2nd/8-Meta/fusion2 BoostBook2nd/8-Meta/fusion3 BoostBook2nd/8-Meta/fusion4 BoostBook2nd/8-Meta/mpl1 BoostBook2nd/8-Meta/mpl2 BoostBook2nd/8-Meta/mpl3 BoostBook2nd/8-Meta/mpl4-5 BoostBook2nd/8-Meta/mplaf BoostBook2nd/8-Meta/pp3 BoostBook2nd/8-Meta/pp4 BoostBook2nd/8-Meta/type_traits1 BoostBook2nd/9-Util/assignment1 BoostBook2nd/9-Util/foreach1 BoostBook2nd/9-Util/ios_saver1 BoostBook2nd/9-Util/next1 BoostBook2nd/9-Util/operators1 BoostBook2nd/9-Util/ref1 BoostBook2nd/9-Util/timer1
2月15日実施分との差分は
+BoostBook2nd/10-Misc/ublas1 +BoostBook2nd/5-Math/random2 +BoostBook2nd/5-Math/random3 +BoostBook2nd/6-Data/optional1 +BoostBook2nd/7-Func/spirit1 +BoostBook2nd/7-Func/spirit10 +BoostBook2nd/7-Func/spirit2 +BoostBook2nd/7-Func/spirit3 +BoostBook2nd/7-Func/spirit5 +BoostBook2nd/7-Func/spirit6 +BoostBook2nd/7-Func/spirit8 +BoostBook2nd/7-Func/spirit9
となったが,注目すべきはboost::ublasやboost::spirit::classicといった代表的なExpression Templateを活用したライブラリがコンパイル可能になったこと.すげー.ちなみに,letsboost::spiritを試してみた限りだと,boost::spirit::qiは通らないようだ.
順調に準拠度は上がっているけど,結構基本的なところがまだ未実装だったりするから,実用にはまだ辛いかな.例えば,現時点では複合代入演算子の値をlvalueとして使えない,っていうのがある.テストケースとしては,
int& f(int& n) { return n += 1; }
が
test.cpp:3:9: error: cannot compile this l-value expression yet return n += 1; ^~~~~~ 1 diagnostic generated.
と言われて通らない.boost::lambdaのサンプルコードも+=使ってる部分を消せばコンパイルは通るんだよなあ.セグフォっちゃうけど.
clang++のboost対応状況 part.3
boost::foreach などboost::addressof が通らないのが原因なエラーがいくつかあるようだ.
http://d.hatena.ne.jp/gamaguchi/20100211/p2
と書いたけど,どうやら解決されたらしい.しかし,未だこのパッチがコミットされていないところを見ると何らかの問題があるのかもしれない.
まあそれはそれとして,最新のr96216にこの修正を手パッチしてビルドしてまた同様のテストをすることに.
今後も頻繁に同じことをする気がしたので,Boost本のサンプルのコンパイルと,コンパイル結果の比較はスクリプトにしておく.
build.zsh
#!/bin/zsh for name in BoostBook2nd/*/*.cpp(:r); do ${CXX} -c ${name}.cpp -o ${name}.$1.o; done
diff.zsh
#!/bin/zsh diff -U 255 <(ls BoostBook2nd/*/*.$1.o | sed 's/\..*//') \ <(ls BoostBook2nd/*/*.$2.o | sed 's/\..*//')
これらのスクリプトを使って,前回と同じgcc 4.4.3のコンパイル結果と比較した.
CXX=~/llvm/Release/bin/clang++ ./build.zsh clang++-0215 ./diff.zsh g++ clang++-0215
その結果
BoostBook2nd/1-String/format1 BoostBook2nd/1-String/format2 BoostBook2nd/1-String/format3 BoostBook2nd/1-String/format4 BoostBook2nd/1-String/lexcast1 BoostBook2nd/1-String/lexcast2 BoostBook2nd/1-String/regex1 BoostBook2nd/1-String/regex2 BoostBook2nd/1-String/regex3 BoostBook2nd/1-String/regex4 +BoostBook2nd/1-String/regex5 BoostBook2nd/1-String/string_algo1 BoostBook2nd/1-String/string_algo2 BoostBook2nd/1-String/string_algo3 BoostBook2nd/1-String/string_algo4 BoostBook2nd/1-String/string_algo5 BoostBook2nd/1-String/tokenizer1 BoostBook2nd/1-String/tokenizer2 BoostBook2nd/1-String/tokenizer3 -BoostBook2nd/1-String/xpressive1 -BoostBook2nd/1-String/xpressive2 -BoostBook2nd/1-String/xpressive3 -BoostBook2nd/1-String/xpressive4 -BoostBook2nd/1-String/xpressive6 -BoostBook2nd/1-String/xpressive7 -BoostBook2nd/1-String/xpressive8 -BoostBook2nd/1-String/xpressive9 -BoostBook2nd/10-Misc/graph1 BoostBook2nd/10-Misc/param BoostBook2nd/10-Misc/po BoostBook2nd/10-Misc/signals1 BoostBook2nd/10-Misc/signals2 -BoostBook2nd/10-Misc/ublas1 -BoostBook2nd/10-Misc/wave BoostBook2nd/2-SmartP/shared_ptr1 BoostBook2nd/2-SmartP/weak_ptr1 BoostBook2nd/3-System/filesystem1 BoostBook2nd/3-System/fsls BoostBook2nd/3-System/fsmv BoostBook2nd/3-System/gregorian1 BoostBook2nd/3-System/gregorian_calender -BoostBook2nd/3-System/posix_time1 -BoostBook2nd/3-System/posix_time2 BoostBook2nd/3-System/thread1 BoostBook2nd/4-IO/add_server BoostBook2nd/4-IO/addmul_server2 BoostBook2nd/4-IO/addmul_server3 BoostBook2nd/4-IO/asio1 BoostBook2nd/4-IO/asio2 BoostBook2nd/4-IO/asio3 BoostBook2nd/4-IO/gzview BoostBook2nd/4-IO/iostreams1 BoostBook2nd/4-IO/iostreams2 BoostBook2nd/4-IO/iostreams3 BoostBook2nd/4-IO/iostreams4 BoostBook2nd/4-IO/serialization1 BoostBook2nd/4-IO/serialization2 BoostBook2nd/4-IO/serialization4 BoostBook2nd/5-Math/crc1 BoostBook2nd/5-Math/crcchk BoostBook2nd/5-Math/interval1 BoostBook2nd/5-Math/interval2 BoostBook2nd/5-Math/quaternion1 BoostBook2nd/5-Math/quaternion2 BoostBook2nd/5-Math/random1 -BoostBook2nd/5-Math/random2 -BoostBook2nd/5-Math/random3 BoostBook2nd/5-Math/rational1 BoostBook2nd/6-Data/any1 BoostBook2nd/6-Data/any2 BoostBook2nd/6-Data/array1 BoostBook2nd/6-Data/array2 BoostBook2nd/6-Data/dynbitset1 BoostBook2nd/6-Data/dynbitset2 BoostBook2nd/6-Data/ite_adapt1 BoostBook2nd/6-Data/ite_facade1 BoostBook2nd/6-Data/multi_array1 BoostBook2nd/6-Data/multi_array2 BoostBook2nd/6-Data/multi_array3 -BoostBook2nd/6-Data/optional1 BoostBook2nd/6-Data/range1 BoostBook2nd/6-Data/range2 BoostBook2nd/6-Data/tuple1 BoostBook2nd/6-Data/tuple2 BoostBook2nd/6-Data/variant1 BoostBook2nd/6-Data/variant2 BoostBook2nd/6-Data/variant3 BoostBook2nd/6-Data/variant4 BoostBook2nd/7-Func/bind1 BoostBook2nd/7-Func/bind2 BoostBook2nd/7-Func/bind3 BoostBook2nd/7-Func/bind4 -BoostBook2nd/7-Func/function1 -BoostBook2nd/7-Func/lambda1 -BoostBook2nd/7-Func/spirit1 -BoostBook2nd/7-Func/spirit10 -BoostBook2nd/7-Func/spirit2 -BoostBook2nd/7-Func/spirit3 -BoostBook2nd/7-Func/spirit5 -BoostBook2nd/7-Func/spirit6 -BoostBook2nd/7-Func/spirit7 -BoostBook2nd/7-Func/spirit8 -BoostBook2nd/7-Func/spirit9 BoostBook2nd/8-Meta/fusion2 BoostBook2nd/8-Meta/fusion3 BoostBook2nd/8-Meta/fusion4 BoostBook2nd/8-Meta/mpl1 BoostBook2nd/8-Meta/mpl2 BoostBook2nd/8-Meta/mpl3 BoostBook2nd/8-Meta/mpl4-5 BoostBook2nd/8-Meta/mplaf BoostBook2nd/8-Meta/pp3 BoostBook2nd/8-Meta/pp4 BoostBook2nd/8-Meta/type_traits1 BoostBook2nd/9-Util/assignment1 BoostBook2nd/9-Util/foreach1 BoostBook2nd/9-Util/ios_saver1 BoostBook2nd/9-Util/next1 BoostBook2nd/9-Util/operators1 BoostBook2nd/9-Util/ref1 BoostBook2nd/9-Util/timer1
前回の結果と比較すると,
BoostBook2nd/6-Data/variant2 BoostBook2nd/6-Data/variant3 BoostBook2nd/8-Meta/fusion2 BoostBook2nd/8-Meta/fusion3 BoostBook2nd/8-Meta/fusion4 BoostBook2nd/9-Util/foreach1
が通るようになっただけでなく,気が付けばBOOST_SP_NO_ATOMIC_ACCESSを有効にしなくてもshared_ptrがコンパイルできるようになっている.ClangのC++対応度を高めるためにLLVM 2.7のリリースを遅らせよう,っていう流れになっているのも納得できる速度で成長してるなあ.
ところで,C++の対応度をチェックするのに最適なテストってのは何なんだろう?
BoostのRegression Testは巨大すぎるのと,bjamでclangを使う方法がよくわからんのがなあ.単にg++と差し替えるだけだと-dumpmachineってオプションが無いって言われて失敗する.
clang++のBoost対応状況 part.2
さっきのテストだと,shared_ptrによるエラーが全体を引っ張ってる感じだった.そこでshared_ptr.hppインクルード時のエラーを見たところ,アサーションに引っかかってるのは#if !defined(BOOST_SP_NO_ATOMIC_ACCESS)の中の行だったので,BOOST_SP_NO_ATOMIC_ACCESSをdefineしてみたところshared_ptrを使ったソースのコンパイルに成功した.というわけで改めて次のようにテストをやりなおしてみた.
for name in BoostBook2nd/*/*.cpp(:r); do ~/llvm/Release/bin/clang++ -DBOOST_SP_NO_ATOMIC_ACCESS -c ${name}.cpp -o ${name}.clang++.o; done for name in BoostBook2nd/*/*.cpp(:r); do g++ -c ${name}.cpp -o ${name}.g++.o; done diff -U 255 <(ls BoostBook2nd/*/*.g++.o | sed 's/\..*//') <(ls BoostBook2nd/*/*.clang++.o | sed 's/\..*//')
その結果(行頭-がg++でのみ成功,行頭+がclang++でのみ成功)
BoostBook2nd/1-String/format1 BoostBook2nd/1-String/format2 BoostBook2nd/1-String/format3 BoostBook2nd/1-String/format4 BoostBook2nd/1-String/lexcast1 BoostBook2nd/1-String/lexcast2 BoostBook2nd/1-String/regex1 BoostBook2nd/1-String/regex2 BoostBook2nd/1-String/regex3 BoostBook2nd/1-String/regex4 +BoostBook2nd/1-String/regex5 BoostBook2nd/1-String/string_algo1 BoostBook2nd/1-String/string_algo2 BoostBook2nd/1-String/string_algo3 BoostBook2nd/1-String/string_algo4 BoostBook2nd/1-String/string_algo5 BoostBook2nd/1-String/tokenizer1 BoostBook2nd/1-String/tokenizer2 BoostBook2nd/1-String/tokenizer3 -BoostBook2nd/1-String/xpressive1 -BoostBook2nd/1-String/xpressive2 -BoostBook2nd/1-String/xpressive3 -BoostBook2nd/1-String/xpressive4 -BoostBook2nd/1-String/xpressive6 -BoostBook2nd/1-String/xpressive7 -BoostBook2nd/1-String/xpressive8 -BoostBook2nd/1-String/xpressive9 -BoostBook2nd/10-Misc/graph1 BoostBook2nd/10-Misc/param BoostBook2nd/10-Misc/po BoostBook2nd/10-Misc/signals1 BoostBook2nd/10-Misc/signals2 -BoostBook2nd/10-Misc/ublas1 -BoostBook2nd/10-Misc/wave BoostBook2nd/2-SmartP/shared_ptr1 BoostBook2nd/2-SmartP/weak_ptr1 BoostBook2nd/3-System/filesystem1 BoostBook2nd/3-System/fsls BoostBook2nd/3-System/fsmv BoostBook2nd/3-System/gregorian1 BoostBook2nd/3-System/gregorian_calender -BoostBook2nd/3-System/posix_time1 -BoostBook2nd/3-System/posix_time2 BoostBook2nd/3-System/thread1 BoostBook2nd/4-IO/add_server BoostBook2nd/4-IO/addmul_server2 BoostBook2nd/4-IO/addmul_server3 BoostBook2nd/4-IO/asio1 BoostBook2nd/4-IO/asio2 BoostBook2nd/4-IO/asio3 BoostBook2nd/4-IO/gzview BoostBook2nd/4-IO/iostreams1 BoostBook2nd/4-IO/iostreams2 BoostBook2nd/4-IO/iostreams3 BoostBook2nd/4-IO/iostreams4 BoostBook2nd/4-IO/serialization1 BoostBook2nd/4-IO/serialization2 BoostBook2nd/4-IO/serialization4 BoostBook2nd/5-Math/crc1 BoostBook2nd/5-Math/crcchk BoostBook2nd/5-Math/interval1 BoostBook2nd/5-Math/interval2 BoostBook2nd/5-Math/quaternion1 BoostBook2nd/5-Math/quaternion2 BoostBook2nd/5-Math/random1 -BoostBook2nd/5-Math/random2 -BoostBook2nd/5-Math/random3 BoostBook2nd/5-Math/rational1 BoostBook2nd/6-Data/any1 BoostBook2nd/6-Data/any2 BoostBook2nd/6-Data/array1 BoostBook2nd/6-Data/array2 BoostBook2nd/6-Data/dynbitset1 BoostBook2nd/6-Data/dynbitset2 BoostBook2nd/6-Data/ite_adapt1 BoostBook2nd/6-Data/ite_facade1 BoostBook2nd/6-Data/multi_array1 BoostBook2nd/6-Data/multi_array2 BoostBook2nd/6-Data/multi_array3 -BoostBook2nd/6-Data/optional1 BoostBook2nd/6-Data/range1 BoostBook2nd/6-Data/range2 BoostBook2nd/6-Data/tuple1 BoostBook2nd/6-Data/tuple2 BoostBook2nd/6-Data/variant1 -BoostBook2nd/6-Data/variant2 -BoostBook2nd/6-Data/variant3 BoostBook2nd/6-Data/variant4 BoostBook2nd/7-Func/bind1 BoostBook2nd/7-Func/bind2 BoostBook2nd/7-Func/bind3 BoostBook2nd/7-Func/bind4 -BoostBook2nd/7-Func/function1 -BoostBook2nd/7-Func/lambda1 -BoostBook2nd/7-Func/spirit1 -BoostBook2nd/7-Func/spirit10 -BoostBook2nd/7-Func/spirit2 -BoostBook2nd/7-Func/spirit3 -BoostBook2nd/7-Func/spirit5 -BoostBook2nd/7-Func/spirit6 -BoostBook2nd/7-Func/spirit7 -BoostBook2nd/7-Func/spirit8 -BoostBook2nd/7-Func/spirit9 -BoostBook2nd/8-Meta/fusion2 -BoostBook2nd/8-Meta/fusion3 -BoostBook2nd/8-Meta/fusion4 BoostBook2nd/8-Meta/mpl1 BoostBook2nd/8-Meta/mpl2 BoostBook2nd/8-Meta/mpl3 BoostBook2nd/8-Meta/mpl4-5 BoostBook2nd/8-Meta/mplaf BoostBook2nd/8-Meta/pp3 BoostBook2nd/8-Meta/pp4 BoostBook2nd/8-Meta/type_traits1 BoostBook2nd/9-Util/assignment1 -BoostBook2nd/9-Util/foreach1 BoostBook2nd/9-Util/ios_saver1 BoostBook2nd/9-Util/next1 BoostBook2nd/9-Util/operators1 BoostBook2nd/9-Util/ref1 BoostBook2nd/9-Util/timer1
shared_ptrがコンパイルできるようになったことで,成功するものがかなり増えたことがわかる.regex5についてはg++で失敗してclang++で成功する唯一の例なので見てみたところ,
BoostBook2nd/1-String/regex5.cpp: In function ‘int main()’: BoostBook2nd/1-String/regex5.cpp:9: error: converting to execution character set: 無効または不完全なマルチバイトまたはワイド文字です BoostBook2nd/1-String/regex5.cpp:10: error: converting to execution character set: 無効または不完全なマルチバイトまたはワイド文字です BoostBook2nd/1-String/regex5.cpp:11: error: converting to execution character set: 無効または不完全なマルチバイトまたはワイド文字です BoostBook2nd/1-String/regex5.cpp:12: error: converting to execution character set: 無効または不完全なマルチバイトまたはワイド文字です
とエラーが出ていた.ソースをUTF-8に変換すればg++でもコンパイルできることは確認したけど,どうやらワイド文字列リテラル内で使える文字集合に違いがあるっぽい?
boost::foreachなどboost::addressofが通らないのが原因なエラーがいくつかあるようだ.
clang++のBoost対応状況 part.1
clangのSVN版をビルドしたので,Boost本のサンプルコードをコンパイルできるかテストしてみた.
比較対象はg++-4.4.3で,zshで
for name in BoostBook2nd/*/*.cpp(:r); do ~/llvm/Release/bin/clang++ -c ${name}.cpp -o ${name}.clang++.o; done for name in BoostBook2nd/*/*.cpp(:r); do g++ -c ${name}.cpp -o ${name}.g++.o; done diff -U 255 <(ls BoostBook2nd/*/*.g++.o | sed 's/\..*//') <(ls BoostBook2nd/*/*.clang++.o | sed 's/\..*//')
してオブジェクトファイルの生成ができるかどうかのみを比較(行頭に-があるのがg++で成功してclang++で失敗したもの)
-BoostBook2nd/1-String/format1 -BoostBook2nd/1-String/format2 -BoostBook2nd/1-String/format3 -BoostBook2nd/1-String/format4 BoostBook2nd/1-String/lexcast1 BoostBook2nd/1-String/lexcast2 -BoostBook2nd/1-String/regex1 -BoostBook2nd/1-String/regex2 -BoostBook2nd/1-String/regex3 -BoostBook2nd/1-String/regex4 BoostBook2nd/1-String/string_algo1 BoostBook2nd/1-String/string_algo2 BoostBook2nd/1-String/string_algo3 BoostBook2nd/1-String/string_algo4 BoostBook2nd/1-String/string_algo5 BoostBook2nd/1-String/tokenizer1 BoostBook2nd/1-String/tokenizer2 BoostBook2nd/1-String/tokenizer3 -BoostBook2nd/1-String/xpressive1 -BoostBook2nd/1-String/xpressive2 -BoostBook2nd/1-String/xpressive3 -BoostBook2nd/1-String/xpressive4 -BoostBook2nd/1-String/xpressive6 -BoostBook2nd/1-String/xpressive7 -BoostBook2nd/1-String/xpressive8 -BoostBook2nd/1-String/xpressive9 -BoostBook2nd/10-Misc/graph1 BoostBook2nd/10-Misc/param -BoostBook2nd/10-Misc/po -BoostBook2nd/10-Misc/signals1 -BoostBook2nd/10-Misc/signals2 -BoostBook2nd/10-Misc/ublas1 -BoostBook2nd/10-Misc/wave -BoostBook2nd/2-SmartP/shared_ptr1 -BoostBook2nd/2-SmartP/weak_ptr1 -BoostBook2nd/3-System/filesystem1 -BoostBook2nd/3-System/fsls -BoostBook2nd/3-System/fsmv -BoostBook2nd/3-System/gregorian1 -BoostBook2nd/3-System/gregorian_calender -BoostBook2nd/3-System/posix_time1 -BoostBook2nd/3-System/posix_time2 -BoostBook2nd/3-System/thread1 -BoostBook2nd/4-IO/add_server -BoostBook2nd/4-IO/addmul_server2 -BoostBook2nd/4-IO/addmul_server3 -BoostBook2nd/4-IO/asio1 -BoostBook2nd/4-IO/asio2 -BoostBook2nd/4-IO/asio3 -BoostBook2nd/4-IO/gzview BoostBook2nd/4-IO/iostreams1 BoostBook2nd/4-IO/iostreams2 -BoostBook2nd/4-IO/iostreams3 -BoostBook2nd/4-IO/iostreams4 BoostBook2nd/4-IO/serialization1 -BoostBook2nd/4-IO/serialization2 -BoostBook2nd/4-IO/serialization4 BoostBook2nd/5-Math/crc1 BoostBook2nd/5-Math/crcchk BoostBook2nd/5-Math/interval1 BoostBook2nd/5-Math/interval2 BoostBook2nd/5-Math/quaternion1 BoostBook2nd/5-Math/quaternion2 BoostBook2nd/5-Math/random1 -BoostBook2nd/5-Math/random2 -BoostBook2nd/5-Math/random3 BoostBook2nd/5-Math/rational1 BoostBook2nd/6-Data/any1 BoostBook2nd/6-Data/any2 BoostBook2nd/6-Data/array1 BoostBook2nd/6-Data/array2 BoostBook2nd/6-Data/dynbitset1 BoostBook2nd/6-Data/dynbitset2 BoostBook2nd/6-Data/ite_adapt1 BoostBook2nd/6-Data/ite_facade1 BoostBook2nd/6-Data/multi_array1 BoostBook2nd/6-Data/multi_array2 BoostBook2nd/6-Data/multi_array3 -BoostBook2nd/6-Data/optional1 BoostBook2nd/6-Data/range1 BoostBook2nd/6-Data/range2 BoostBook2nd/6-Data/tuple1 BoostBook2nd/6-Data/tuple2 BoostBook2nd/6-Data/variant1 -BoostBook2nd/6-Data/variant2 -BoostBook2nd/6-Data/variant3 BoostBook2nd/6-Data/variant4 BoostBook2nd/7-Func/bind1 BoostBook2nd/7-Func/bind2 BoostBook2nd/7-Func/bind3 BoostBook2nd/7-Func/bind4 -BoostBook2nd/7-Func/function1 -BoostBook2nd/7-Func/lambda1 -BoostBook2nd/7-Func/spirit1 -BoostBook2nd/7-Func/spirit10 -BoostBook2nd/7-Func/spirit2 -BoostBook2nd/7-Func/spirit3 -BoostBook2nd/7-Func/spirit5 -BoostBook2nd/7-Func/spirit6 -BoostBook2nd/7-Func/spirit7 -BoostBook2nd/7-Func/spirit8 -BoostBook2nd/7-Func/spirit9 -BoostBook2nd/8-Meta/fusion2 -BoostBook2nd/8-Meta/fusion3 -BoostBook2nd/8-Meta/fusion4 BoostBook2nd/8-Meta/mpl1 BoostBook2nd/8-Meta/mpl2 BoostBook2nd/8-Meta/mpl3 BoostBook2nd/8-Meta/mpl4-5 BoostBook2nd/8-Meta/mplaf BoostBook2nd/8-Meta/pp3 BoostBook2nd/8-Meta/pp4 BoostBook2nd/8-Meta/type_traits1 BoostBook2nd/9-Util/assignment1 -BoostBook2nd/9-Util/foreach1 BoostBook2nd/9-Util/ios_saver1 BoostBook2nd/9-Util/next1 BoostBook2nd/9-Util/operators1 BoostBook2nd/9-Util/ref1 BoostBook2nd/9-Util/timer1
エラーを見る限りだと失敗しているものの多くは内部的に使われているshared_ptrによるエラーだったから,shared_ptrのコンパイルが通るようになったらかなり改善されそうな雰囲気.shared_ptrのコンパイルが通ったので追記.
The Seasoned Schemer (The MIT Press)
現在第4章.The Little Schemer (The MIT Press)を読み終わったから読み始めたけど,どんどん再帰処理が身近に感じてくるから不思議だ.継続(continuation)の意義がやっと分かったところで,Rubyをまた学びなおしたくなってきたなー.
あと,計算機プログラムの構造と解釈とコンピュータプログラミングの概念・技法・モデル (IT Architects' Archiveクラシックモダン・コンピューティング)もそろそろ読みたいなあ.