閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

このBoostライブラリは、あのBoostライブラリを利用しています

Boostのライブラリは他のBoostのライブラリを利用して実装されていることが多いです。AsioはThreadを利用していますし、MPLはその他の色々なライブラリの実装の助けになっています。そういった関係を抜き出してみました。ただの暇つぶしで特に意味はありません。まあ、生きてるサンプルコードとして使えるかもしれません。

抽出方法

Boostのライブラリはそれぞれディレクトリに分けられているので、ディレクトリ=ライブラリとして、ディレクトリ内のすべてのファイル(.hpp)を走査してincludeしているファイルを元に依存関係を抜き出しました。結構適当です。ソース(.cpp)は見ていません。
ディレクトリ単位で見ているので、Math系のライブラリなど同じディレクトリに実装があるライブラリはひとまとめにされます。
ただし、AnyとかArrayは1ファイルだったので、そういうのは一部特別扱いしています。

一番使われているライブラリ

結果は長いので最後に載せます。
単に参照関係だけ見てもよく分からないので、他のライブラリからよく利用されるライブラリの上位10個までをリストにしてみました。

ライブラリ 参照されている数
config 84
type_traits 61
mpl 57
utility 51
static_assert 43
iterator 37
preprocessor 31
ref 22
bind 17
functional 16

一番がConfigなのは言うまでもなく、やはりライブラリのためのライブラリが出てくるというそりゃそうだろ、という結果に。

GraphとMath

Boost.Testを使っているライブラリがあったので見てみたら、GraphとMathはテストコードがソースに入っているみたいですね。これ別のところに移した方がいいんでは……(libs/*/test/ とか)。

結果

利用するもの されるもの
accumulators any, array, circular_buffer, concept_check, config, functional, io, iterator, mpl, parameter, preprocessor, range, ref, tuple, type_traits, typeof, utility
archive config, integer, io, iterator, mpl, preprocessor, serialization, static_assert, type_traits, utility
config utility
date_time config, conversion, io, mpl, operators, range, serialization, tokenizer, type_traits
dynamic_bitset config, iterator, static_assert
exception config, tuple, utility
filesystem config, exception, iterator, static_assert, system, type_traits, utility
flyweight config, mpl, multi_index, parameter, preprocessor, type_traits, utility
format config, optional, utility
function config, functional, integer, mem_fn, mpl, preprocessor, ref, type_traits, typeof, utility
functional config, integer, preprocessor, ref, static_assert, type_traits, utility
function_types config, mpl, preprocessor, type_traits
asio array, bind, config, function, iterator, system, thread, type_traits, utility
fusion any, array, bind, call_traits, config, function_types, functional, io, lambda, mpl, preprocessor, ref, static_assert, swap, tuple, type_traits, utility
gil bind, concept_check, config, iterator, mpl, preprocessor, static_assert, type_traits, utility
graphlib any, array, bind, concept, concept_check, config, disjoint_sets, dynamic_bitset, exception, filesystem, foreach, function, functional, integer, iterator, minmax, mpi, mpl, multi_index, operators, optional, parameter, property_map, random, range, ref, serialization, smart_ptr, static_assert, test, tuple, type_traits, typeof, utility, variant, xpressive
icl call_traits, concept, concept_check, config, interval, iterator, mpl, rational, static_assert, type_traits, utility
integer config
interprocess StringAlgo, compressed_pair, config, conversion, integer, intrusive, math, mpl, preprocessor, static_assert, type_traits, utility
intrusive config, functional, mpl, static_assert
io
iostreams array, bind, call_traits, config, function, functional, iterator, mpl, optional, preprocessor, random, range, ref, regex, static_assert, type_traits, utility
iterator concept_check, config, lambda, mpl, operators, static_assert, tuple, type_traits, utility
assign array, config, mpl, preprocessor, ptr_container, range, static_assert, tuple, type_traits
lambda config, mpl, operators, preprocessor, tuple, type_traits, utility
math array, concept_check, config, format, function, mpl, random, rational, static_assert, test, tuple, type_traits
mpi archive, config, exception, function, graphlib, integer, iterator, mpl, optional, property_map, python, serialization, static_assert, type_traits, utility
mpl StringAlgo, bind, config, iterator, lambda, operators, preprocessor, range, ref, static_assert, tuple, type_traits, typeof, utility
msm any, bind, circular_buffer, config, function, mpl, parameter, preprocessor, proto, ref, serialization, tuple, type_traits, typeof, utility
multi_array array, concept_check, config, functional, iterator, mpl, static_assert, type_traits
multi_index archive, bind, call_traits, config, functional, iterator, math, mpl, operators, preprocessor, ref, serialization, static_assert, tuple, type_traits, utility
optional config, mpl, type_traits, utility
parameter config, lambda, mpl, optional, preprocessor, python, type_traits, utility
polygon config, mpl, utility
bimap call_traits, concept_check, config, functional, iterator, lambda, mpl, multi_index, operators, preprocessor, property_map, serialization, static_assert, type_traits, utility
pool config, static_assert, type_traits
preprocessor config
program_options any, config, function, iterator, static_assert, type_traits
property_map any, bind, concept_check, config, function, graphlib, iterator, mpl, multi_index, optional, serialization, smart_ptr, type_traits
property_tree any, config, iterator, mpl, multi_index, optional, serialization, static_assert, type_traits, utility
proto config, functional, fusion, mpl, preprocessor, range, ref, type_traits, typeof, utility
ptr_container array, circular_buffer, compressed_pair, config, exception, iterator, mpl, range, serialization, static_assert, type_traits, utility
python bind, call_traits, compressed_pair, config, foreach, function, iterator, lambda, mpl, operators, preprocessor, ref, static_assert, tuple, type_traits, utility
random config, mpl, operators, static_assert, type_traits, utility
range array, concept_check, config, iterator, mpl, preprocessor, regex, static_assert, tuple, type_traits, utility
bind config, mem_fn, ref
regex concept_check, config, functional, iterator, mpl, ref, static_assert, type_traits
serialization archive, array, call_traits, config, mpl, operators, optional, preprocessor, static_assert, type_traits, variant
signals any, config, function, iterator, mpl, operators, optional, ref, smart_ptr, type_traits, utility
signals2 any, bind, config, function, iterator, mpl, optional, parameter, preprocessor, ref, smart_ptr, swap, type_traits, utility, variant
smart_ptr config, functional, type_traits
spirit StringAlgo, any, array, bind, call_traits, compressed_pair, concept_check, config, foreach, format, function, function_types, fusion, integer, io, iostreams, iterator, lambda, mpl, operators, optional, pool, preprocessor, proto, range, ref, regex, serialization, static_assert, swap, thread, type_traits, typeof, utility, variant
statechart bind, config, function, mpl, ref, static_assert, thread, type_traits
system config, operators, utility
test bind, call_traits, config, exception, foreach, io, iterator, mpl, optional, parameter, static_assert, timer, tokenizer, type_traits, utility
thread bind, config, conversion, date_time, function, mpl, optional, ref, static_assert, type_traits, utility
circular_buffer call_traits, concept_check, iterator, type_traits
tr1 array, bind, config, function, functional, iterator, math, mem_fn, mpl, random, ref, regex, static_assert, tuple, type_traits, utility
tuple config, ref, static_assert, type_traits, utility
typeof StringAlgo, config, functional, mpl, preprocessor, type_traits, utility
type_traits config, lambda, mpl, preprocessor, static_assert, typeof, utility
units config, io, lambda, math, mpl, serialization, static_assert, type_traits, utility
unordered compressed_pair, config, functional, iterator, mpl, type_traits, utility
utility config, mpl, preprocessor, static_assert, swap, type_traits
uuid config, io, iterator, random, serialization, static_assert, type_traits
variant call_traits, config, lambda, mpl, preprocessor, static_assert, type_traits, utility
wave concept_check, config, filesystem, iterator, mpl, multi_index, pool, preprocessor, serialization, static_assert, type_traits
compatibility
xpressive StringAlgo, any, call_traits, config, exception, fusion, integer, iterator, mpl, optional, preprocessor, proto, range, ref, type_traits, typeof, utility
interval config, tribool, utility
ublas concept_check, config, exception, functional, iterator, mpl, serialization, static_assert, type_traits, typeof, utility
conversion config, mpl, type_traits
StringAlgo concept, concept_check, config, function, iterator, mpl, range, regex, type_traits
tribool config
any config, static_assert, type_traits
array config, iterator, swap
call_traits config
compressed_pair config
concept config, mpl, preprocessor
crc config, integer
disjoint_sets graphlib
foreach config, iterator, mpl, range, type_traits, utility
mem_fn bind
operators config, iterator
rational call_traits, config, math, operators, static_assert
ref config, mpl, utility
scope_exit config, preprocessor, typeof
static_assert config
swap utility
concept_check mpl
timer config
tokenizer config, iterator, mpl
minmax ref, tuple

単独で動くライブラリはIO State Saversくらいで、ほとんどは他のライブラリに依存しているようですね。
「このライブラリだけ使いたい」という時に、関連ファイルだけ抜き出すのは結構めんどくさそうです。

おまけのdotファイル

依存関係をBoost.Graphに突っ込んでdotファイル(Graphviz)にしてみました。これで図を作るとえらいことになります。

graph.dot

ちなみにBoost.Grpahは「graph」という名前で書き込んでいたのですが、これだとGraphvizとかで読むと失敗してしまうので「graphlib」にしています。