Boost C++ライブラリ
Boost C++ Libraries
Boost (ブースト)とは、C++の先駆的な開発者のコミュニティ、およびそのコミュニティによって公開されているオープンソースのソフトウェアライブラリのことを指す。コミュニティとしてのBoostはC++標準化委員会の委員により設立されており、現在でもその多くが構成員として留まっている。このような経緯もあり、BoostコミュニティはC++の標準化において大きな影響力を有している。実際に標準化委員会が発表した「TR1」の2/3以上がBoostライブラリを基にしている。Random, Regex, ThreadなどはいずれもC++11規格の標準ライブラリとして正式に導入・標準化されている。このことから、Boostは考案された新機能を標準化させる前の試験運用の場であるとも言える。
Boostで公開されるライブラリはコミュニティの公開レビューによって精選されている。Boostを使用して作成したプログラムは、商用、非商用を問わず無償のの下でライセンスされる。
Boostはテンプレートなどを活用して積極的にメタプログラミングやジェネリックプログラミングの技法を取り入れて行く傾向がある。そのためBoostライブラリの利用者にはC++の現代的な記述に慣れていることを要求される。
。
Boostには次のような分野のライブラリが含まれている。ライブラリの一部はビルドが必要。
並列プログラミング(非同期プログラミング)
- スレッド
- ユーザーレベルコンテキストスイッチ
- コルーチン
- ファイバー
- OpenCLベースのマルチコアCPU/GPGPU演算プラットフォームインターフェイス
- STLコンテナ方式による固定長配列の管理
- 総称的グラフコンテナ、コンポーネント、アルゴリズム
- N次元配列の生成の単純化
- 異なるソートとアクセスセマンティクスを可能にするビルトインインデックスのあるコンテナ
- 値へのポインタを素直に管理できるようにする標準的なSTLコンテナをモデルにしたコンテナ
- コンセプト的なインターフェイス仕様とキー値をオブジェクトにマップするための多目的インターフェイス
- コンパイル時に指定する型の集合から選べる型オブジェクトの効率的なストレージと、それにアクセスする型安全で総称的なスタックベースのオブジェクトコンテナ
- 指定可能なテンプレートパラメータ(コンセプト)を制限できるようにする
- コンパイル時アサートのサポート
- テストプログラムの作成、テストケースとテストスイートによるテストの構成、そしてそれらの実行制御のためのコンポーネントの組み合わせ。
- 動的なstd::bitset-に似たデータ構造
関数オブジェクトと高階プログラミング (無名関数など)
と - 関数、関数オブジェクト、関数ポインタおよびメンバ関数のための汎用バインダ
- 遅延呼び出しのための関数オブジェクトのラッパー。コールバックのための汎用的なメカニズムも提供される。
- C++標準ライブラリで定義される関数オブジェクトのアダプタの強化。以下の内容を含む。
- C++ Technical Report 1 (TR1) で定義されているハッシュ関数オブジェクトの実装。ソートされていない連想コンテナのデフォルトのハッシュ関数として利用できる。
- ラムダ抽象化の考え方で、プレースホルダー (placeholders) を使用して、小さい無名関数オブジェクトを定義できるようにする。特にアルゴリズムからの遅延呼び出しを使って、呼び出し地点でのこれらのオブジェクトの操作を可能とする。
- 標準C++の参照の能力を強化するため、特に関数テンプレートで利用するための、ユーティリティクラステンプレートを提供する。
- 関数オブジェクトの戻り値の型を取り出す。関数の型を定義するのに役立つ。
- 管理されたシグナルとスロットのコールバック実装
言語間サポート(Python用)
- ユーザー定義のイテレーターのための演算子をオーバーロードしてクラスが算術計算に適用できるようにするクラステンプレート。
- シーケンス内に含まれるトークンのセットをコンテナとして見えるようにしてイテレーターでアクセスできるようにする。
- 3次元コンピュータグラフィックスプログラミングで多用される固定サイズのクォータニオン、ベクトル、行列
メモリ(参照カウントによるスマートポインタなど)
- 分割されたストレージベースのシンプルなメモリ管理スキームを提供する。
- 様々なポインタ管理方式によるスマートポインタクラステンプレートのコレクション。
- ポインタ(単一のオブジェクト)を所有する。
- 配列用のscoped_ptr。
- 他のshared_ptrと共有できるポインタ。最後のshared_ptrが破棄されたときにポインタを破棄する。
- 配列用のshared_ptr。
- すでにshared_ptrで管理されているオブジェクトへの「弱い」参照を提供する。
- ポインタが提供する参照カウンタを使用するshared_ptrに似たクラス。
- 以下のようなその他のクラス。
- 派生クラスのコンストラクタの初期化子でベースクラスのメンバを初期化する必要のあるクラスのための回避策を提供する。
- 不完全な型へのポインタを使用してオブジェクトまたはオブジェクトの配列を破棄しようとする試みをチェックする。
- 特に操作の結果が異なるイテレーターに保存されている必要がある(つまりオリジナルのイテレーターを変更できない)場合に、前方向または両方向のイテレーターをより簡単に操作できる。
- コピーコンストラクタと代入演算子を禁止できる。
- operator&()演算子のオーバーロードをバイパスしてオブジェクトの実際のアドレスを取得できるようにする。
- 関数の型を定義するのに役立つ。
文字列とテキスト処理(正規表現など)
- テキストとの型変換
- タイプセーフな引数のフォーマット文字列
- 新しい送受信フィルタフレームワークのためのC++ストリームとストリームバッファの補助
,  - 正規表現のサポート
Spirit - オブジェクト指向的な再帰的下向き構文解析ジェネレーターのフレームワーク。
- 文字列に関する様々なアルゴリズムのコレクション。
- 文字列やその他の文字シーケンスをトークンで分割できるようにする。
- C99/C++のプリプロセッサ機能の標準に準拠した実装。使いやすいインターフェイスでラップされている。
- コンパイル時のアルゴリズム、シーケンス、メタ関数の、多目的で高レベルのメタプログラミングフレームワーク。
- コンパイル時アサートのサポート
- 基礎的な型の属性を定義するテンプレート。
Boostには、BLASのレベル1、2、3の各演算を実装したuBLASという線型代数 (linear algebra) ライブラリがある。
以下はベクトルと行列の乗算方法を表している。
Boost.Random - 分布(ディストリビューション)非依存の擬似乱数生成器 (PRNG) と、具体的な生成器を構築するために組み合わせる疑似乱数に依存しない確率分布を提供する。
以下はメルセンヌ・ツイスタ生成器を利用した正規分布によりサンプルする方法を表している。
詳細はを参照。
Boost.RandomのサブセットがC++11の標準ライブラリとして取り込まれた。
Boost.Spirit - バッカス・ナウア記法に出来るだけ近いC++のプログラム形式で直接パーサを記述するという、Boostにおける最も複雑なライブラリのひとつ。
カンマ区切りの数値を読み込むパーサの例。
詳細は  を参照。
Boost.Regex - 正規表現を利用するライブラリ。フィルタ・検索・パース・テキスト処理に必要な各種関数を持っている。
正規表現の種類としてPCRE、POSIX基本正規表現とPOSIX拡張正規表現が利用可能である。
テキストをパースするプログラムの例。
詳細は  を参照。
Boost.RegexのサブセットがC++11の標準ライブラリとして取り込まれた。
Boost.Xpressiveは、動的な正規表現と静的な正規表現を提供する。
以下のプログラムは「私は2052/10/30に生まれた。」という文字列に対し、年月日を抽出する正規表現である。どちらも出力結果は同じである。
Boost.Graph - グラフ理論の複数の視点および多数のアルゴリズムの形で、グラフ概念の柔軟かつ効果的な実装を提供する。
アルゴリズムの例:トポロジカルソート
詳細は  を参照。
Boost.Thread - プラットフォームに依存しないスレッドの抽象化を提供する。APIはPOSIXスレッドをベースにオブジェクト指向化したものとなっている。
スレッドを生成しているコードの例。
Boost.ThreadのサブセットがC++11の標準ライブラリとして取り込まれた。
in Dr. Dobb's Journal.
Boost.Threads .
based on Boost.Thread