Boost の定番機能はこれだ

C++ の定番ライブラリ Boost はいまや不動の地位を得ていますが、機能が多岐にわたりすぎていて、何から使い始めていいのか分からずにとっつきにくい印象がありました。

Boost 関連の情報を探していて、Boostを使用しているプロジェクト - boostjp というページを見つけました。このページでは、Boost 公式ページ上の

にリンクしています。この3ページでは、様々な製品やプロジェクトで利用されている Boost のコンポーネントが紹介されています。

せっかくなので、利用数ランキングを集計してみました。多くのプロジェクトで利用されているコンポーネント=定番機能、という単純な発想です。

ランキング1~10位

早速1位から10位を紹介!!

順位コンポーネント名利用数
1Boost.SmartPointers24
1Boost.Bind24
3Boost.Regex20
4Boost.Function17
5Boost.StringAlgorithms14
5Boost.Thread14
7Boost.TypeTraits12
7Boost.DateTime12
7Boost.Tuple12
7Boost.FileSystem12
7Boost.Iterator12

上位に入っている多くの機能が、C++0x では標準ライブラリに取り込まれるようです。

10位以下はこんな感じ

ちなみに10位以下は次のようになっています。

順位コンポーネント名利用数
12Boost.Any11
12Boost.LexicalCast11
12Boost.MPL11
15Boost.Spirit10
16Boost.Optional8
16Boost.SharedPointer8
16Boost.Operators8
16Boost.Format8
20Boost.Utility7
20Boost.ProgramOptions7
20Boost.Ref7
20Boost.Signals7
24Boost.Lambda6
24Boost.Tokenizer6
24Boost.Variant6
24Boost.Serialization6
24Boost.Functional6
24Boost.Random6
24Boost.MultiIndex6
31Boost.Python5
31Boost.StaticAssert5
31Boost.Preprocessor5
34Boost.EnableIf4
35Boost.Tribool3
35Boost.Asio3
35Boost.Test3
35Boost.Timer3
35Boost.DynamicBitset3
35Boost.Assign3
41Boost.Phoenix2
41Boost.GIL2
41Boost.Ublas2
41Boost.CRC2
41Boost.PointerContainer2
41Boost.Graph2
41Boost.Conversion2
48Boost.ConceptCheck1
48Boost.NumericCast1
48Boost.Integer1
48Boost.Range1
48Boost.Rational1
48Boost.MemFn1
48Boost.PropertyMap1

集計方法

3つのページをダウンロードして、次のようなワンライナーで処理しました。

$ cat *.html | perl -e '$c={};while(<>){s/>Boost\.([\w-]+)/{$c->{$1}++}/ge;} print "$_ $c->{$_}\n" for sort {$c->{$b}<=>$c->{$a}} keys %$c;'

Perl じゃなく、Boost つかって集計しろよ、という声が聞こえてきそうですね…。