Boostのレビュー状況 2009/12

BoostML - Review Wizard report for December 2009


【ニュース】
・Polygonライブラリを採択

・Boost 1.40.0 リリース
  新規ライブラリ : なし
  更新ライブラリ : Accumulators, Asio, Circular Buffer, Filesystem, Foreach, Function, Fusion, Hash, Interprocess, Intrusive, MPL, Program Options, Proto, Python, Serialization, Unordered, Xpressive

・Geometryライブラリを採択

・Boost 1.41.0 リリース
  新規ライブラリ : Property Tree
  更新ライブラリ : DateTime, Filesystem, Iostreams, Math, Multi-index Containers, Proto, Python, Regex, Spirit, System, Thread, Unordered, Utility, Wave, Xpressive

・MSMライブラリのレビューが進行中

・Constrained Valueレビュー - レビュー結果は未決


【以前からの問題点】
・2007/08に採択された時系列(Time Series)ライブラリはまだ提出されていません。
浮動小数点ユーティリティライブラリはまだ提出されていません。
 Boost.Mathライブラリに統合される予定です。
・2008/01に仮採択されたSwitchライブラリは、完全な採択のための提出はまだされていません。
・2008/09に仮採択されたPhoenixライブラリは、完全な採択のための提出はまだされていません。


【一般的な発表】
私たちは常に、経験を積んだレビューマネージャーを必要としています。


〜中略〜(レビュアーが全然足りてないそうです)


レビューキュー
・Lexer
・Shifted Pointer
・Logging
・Log
・Join
・PImpl
・Task
・Endian
・Conversion
・Sorting
・GIL.IO
・AutoBuffer
・String Convert
・Move
・Containers
・Interval Containers
・Type Traits Extensions
・Interthreads
・Bitfield
・Lockfree


【Lexer】
作者 : Ben Hanson
レビューマネージャー : Eric Neibler
ダウンロード : http://boost-consulting.com/vault/index.php?action=downloadfile&filename=boost.lexer.zip&directory=Strings%20-%20Text%20Processing
説明 :
flexによってインスパイアされたプログラマブルな字句解析器(lexical analyser)ジェネレータです。
flexのように、正規表現によってプログラムされ、圧縮のための同値類(equivalence class)を利用する
多くのDFAとしてステートマシンを出力します。


【Shifted Pointer】
作者 : Phil Bouchard
レビューマネージャー : 必要としている
ダウンロード : http://www.boost-consulting.com/vault/index.php?&direction=0&order=&directory=Memory
説明 :
スマートポインタは、ユーザーが最大限に活用する特定のリソース(メモリ使用量、CPUサイクル、扱いやすい…)のために
最適化されます。このスマートポインタの目的は、参照カウント(あるいは所有権)およびオブジェクトそれ自身を
同時に割り当てることで、動的メモリ管理が加速され、メモリマップよりも安い状態に単純化することです。


【Logging】
作者 : John Torjo
レビューマネージャー : Gennadiy Rozental
ダウンロード : http://torjo.com/log2/
説明 :
適切に使用されるLoggingは非常に強力なツールです。デバッグ/テストの支援に加え、
それはさらにあなたのアプリケーションがどのように使用されるかあなたに示すことができます。
Boost Logging Libraryは多くのシナリオをサポートし、非常に単純なものから(ひとつの
目的地にすべてダンプする)、非常に複雑なもの(複数のログ、一部を有効/一部を無効、
レベル、etc...)まで可能にします。それは非常にシンプルで柔軟なインタフェース、
メッセージの効率的なフィルタリング、スレッド安全性、フォーマッタおよび目的地、
ログの容易な操作を特徴とし、あなたのアプリケーションのニーズに基づいた
最良のLogger/フィルタクラスを見つけて、あなた自身のマクロと、より多くのものを定義できます!


【Log】
作者 : Andrey Semashev
レビューマネージャー : 必要としている
ダウンロード : http://tinyurl.com/cm9lum
説明 :
このライブラリは、アプリケーションにロギング機能を加えるための支援を目的としています。
syslogサーバーあるいはWindowsイベントログへログを送る、フォーマットと属性に基づいて
フィルタリングする、あるいは単にファイルにログを格納するといった、多くの広く用いられる
性能を常識破りにサポートします。さらにそれは、設定ファイルからのライブラリ初期化を行う
基礎的なサポートも行います。このライブラリはアプリケーションイベントに関して広範囲の
タスクと手段を集め、処理の統計情報やユーザーへの通知に使用することができます。


【Join】
作者 : Yigong Liu
レビューマネージャー : 必要としている
ダウンロード : http://channel.sourceforge.net/
説明 :
Joinは非同期の、join算法(join calculus)に基づいたメッセージベースのC++並列性ライブラリです。
それはマルチスレッドのアプリケーション、非同期の組織化、イベントベースアプリケーションに
適用可能です。Comegaの設計とBoost facilitiesによる実装と構造に従います。
それは非同期メソッド、同期メソッド、そして同期・非同期性と並列性を定義する「joinパターン」を
一致させることにより、高水準の並列性APIを提供します。


【PImpl】
作者 : Vladimir Batov
レビューマネージャー : 必要としている
ダウンロード : http://www.boost-consulting.com/vault/index.php?action=downloadfile&filename=Pimpl.zip&directory=&

http://www.ddj.com/cpp/205918714 (ドキュメント)

説明 :
Pimplイディオムは、インターフェースと実装の分離、
および実装を隠すことにより結合を最小化する、シンプルであるが強健な技術です。
このライブラリは、PImplイディオムに便利で柔軟な、ジェネリック配置テクニックを提供します。
その外見は完全で広く適用可能で、にも関わらず小さく単純で、使用することが楽しい。


【Task】
作者 : Oliver Kowalke
レビューマネージャ : 必要としている
ダウンロード : http://www.boostpro.com/vault/index.php?action=downloadfile&filename=boost-threadpool.2.tar.gz&directory=Concurrent%20Programming
説明 :このライブラリは以下を提供します:

    • スレッド生成ポリシー:ワーカースレッドの管理を決定する
      • プール中のスレッドの固定セット
      • 要求に応じて(コンテキストに依存して)ワーカースレッドを作成する
      • 一定のアイドル時間のあとにワーカースレッドをタイムアウトさせる
    • チャンネルポリシー:キューに置かれたタスクへのアクセスを管理する:
      • 待ち状態タスクのための高/低水準による制限のあるチャンネル
      • キューに置かれたタスクの無制限の数による無制限のチャンネル
      • rendezvousは、producerとconsumerのスレッド間で同期を渡す(怪しい訳。このへん参照)
    • キューポリシー:タスクがチャンネルからどのように取り除かれるかを決定する
      • FIFO
      • LIFO
      • 優先順位キュー(タスクに属性を割り当てる)
      • スマートな挿入と抽出(たとえば、最も新しい属性を持った最も古いタスクを取り除く)
    • タスクはチェーンにすることができ、また、Lazyなタスクの提出(submit)もサポートされます(Braddocksの将来のライブラリのおかげ)
    • submit関数からタスクオブジェクトが返されます。タスクはそれ自身がcooperative(協力的?)であれば中断することができる。(このコード"this_thread::interruption_point()"が、それがいくつかの中段ポイントを持っていることを意味する)


【Endian】
作者 : Beman Dawes
レビューマネージャー : 必要としている
ダウンロード : http://mysite.verizon.net/beman/endian-0.10.zip
説明 :
ヘッダは、バイトオーダー、値型、サイズおよびアライメント上の
明示的な制御で整数ライクなbyte-holder binary型を提供します。
typedefは、共通設定で使いやすい名前を提供します。


これらの型は特定のコンピュータアーキテクチャとは無関係に、整数データにポータブルな
バイトホルダーを提供します。ユースケースは、ほぼ常にファイルかネットワーク接続の
いずれかによるI/Oを含んでいます。データのポータビリティは主要な動機ですが、
これらの整数バイトホルダーもそれらがそうでなければ利用可能でない2進整数サイズを
提供するので、メモリ使用、ファイルサイズあるいはネットワーク活動を
縮小するために使用されるかもしれません。


【Conversion】
作者 : Vicente Botet
レビューマネージャー : 必要としている
ダウンロード : http://www.boostpro.com/vault/index.php?action=downloadfile&filename=conversion.zip&directory=Utilities&
説明 :
無関係な型の間のGenericな明示的型変換。
Boost.Conversionは以下を提供します:

    • 無関係な型の間の明示的型変換を作るためにユーザーによって特殊化できるGenericな"convert_to"関数
    • 無関係な型の間の明示的な代入をするためにユーザーによって特殊化することができるGenericな"assign_to"関数
    • 明示的に変換可能な型の"std::complex"との変換
    • 明示的に変換可能な型の"boost::optional"との変換
    • 明示的に変換可能な型の"boost::rational"との変換
    • 明示的に変換可能な型の"boost::interval"との変換
    • "boost::chrono::time_point"と"boost::ptime"との変換
    • "boost::chrono::duration"と"boost::time_duration"との変換


【Sorting】
作者 : Steven Ross
レビューマネージャー : 必要としている
ダウンロード : http://www.boostpro.com/vault/index.php?action=downloadfile&filename=algorithm_sorting.zip
説明 :
std::sortに優秀な(?)最悪なケースと平均なケースの性能を提供する、
3つのテンプレート化された高水準なradix/comparison-basedソートアルゴリズムのグループです:
右シフト(デフォルトは>>)と比較演算子(デフォルトは<)をサポートする固定サイズデータ型をソートするinteger_sort。
整数に安全にそれらをキャストすることにより標準の浮動小数点数をソートするfloat_sort。
可変長データ型をソートし、8ビット文字列のために最適化されるstring_sort。


3つのアルゴリズムは全て、kがデータ型のビット数でsがconstantな場合に
O(n(k/s + s))ランタイムと、制限メモリオーバーヘッド(現実的な入力用のkB)を持ちます。
テストでは、integer_sortはプロセッサ、コンパイラの最適化、
データ配分によってstd::sortより35%から8倍速くなります。
float_sortはx86プロセッサ上のstd::sortよりおよそ7倍ほど速いです。
string_sortはstd::sortよりおよそ2倍ほど速いです。


【GIL.IO】
作者 : Christian Henning
レビューマネージャー : 必要としている
ダウンロード : http://gil-contributions.googlecode.com/files/rc2.zip
説明 :
boost::gilのための、様々な画像形式(tiff, jpeg, png, etc)を読み書きすることを
可能にするI/O拡張です。このレビューは、さらに新しいカラースペース、
アルゴリズムなどのような、gilにある一般的な機能性を追加する
ツールボックス拡張を含んでいるでしょう。


【AutoBuffer】
作者 : Thorsten Ottosen
レビューマネージャー : 必要としている
ダウンロード : http://www.cs.aau.dk/~nesotto/boost/auto_buffer.zip
説明 :
Boost.AutoBufferは、効率的な動的ローカルバッファのためのコンテナを提供します。
さらに、コンテナはより大きな柔軟性とよりよい性能を提供し、
std::vectorの代わりとして使用されてもいいでしょう。


【String Convert】
作者 : Vladimir Batov
レビューマネージャー : 必要としている
ダウンロード : http://www.boostpro.com/vault/index.php?action=downloadfile&filename=boost-string-convert.zip
説明 :
このライブラリは、string-to-typeとtype-to-string変換の領域で、
boost::lexical_castのアプローチをとり、過去のboost::lexical_castの
経験と進歩に基礎を置く、さらなる変換機能性を提供します:

    • 変換失敗をthrowする/しないの振る舞い
    • 変換失敗時にデフォルト値の返却をサポート
    • 2つの型の変換失敗チェック -- basic and better/safe
    • 標準IOストリームおよび標準(あるいはユーザー定義)のストリームマニピュレータ(std::hex、std::scientificなど)に基づいたフォーマットサポート
    • boost::range準拠のchar/wchar_tベース文字列コンテナのサポート
    • ターゲット型にDefaultConstructibilityを要求しない


これは例えば、設定ファイルを広範囲に利用したり、相当なデータ量をXML等で
処理/準備しなければならないアプリケーションでは必須のツールです。


【Move】
作者 : Ion Gaztanaga
レビューマネージャー : 必要としている
ダウンロード : http://svn.boost.org/svn/boost/sandbox/move/
ドキュメント : http://svn.boost.org/svn/boost/sandbox/move/libs/move/doc/html/index.html
説明 :
C++0xでは、ムーブセマンティクスは右辺値参照の導入で実装されます。
それは私たちが、記述が短く、実行時オーバーヘッドのないmove()を実装することを可能にします。
Boost.Moveは、右辺値参照を持ったコンパイラだけでなく、C++03のコンパイラでそれらのムーブセマンティクスを実装するツールを提供するライブラリです。


【Containers】
作者 : Ion Gaztanaga
レビューマネージャー : 必要としている
ダウンロード : http://www.boostpro.com/vault/index.php?action=downloadfile&filename=boost.move.container.zip&directory=Containers&
ドキュメント : http://svn.boost.org/svn/boost/sandbox/move/libs/container/doc/html/index.html
説明 :
Boost.Containerライブラリは、STLコンテナを含むいくつかの有名なコンテナを実装します。
このライブラリの目標は、標準コンテナにないもの、あるいはC++03のコンパイラで最新の標準ドラフトの機能を提供することです。


【Interval Template Library】
作者 : Joachim Faulhaber
説明 :
Interval Template Library(Itl)は、intervalと、2種類の区間コンテナを
提供します:interval_setとinterval_map。
interval_setとmapは、ちょうど要素のsetあるいはmapとして
使用することができます。しかし、要素が隣接したチャンクで現れるとき、
それらのスペースと時間ははるかに効率的です:interval。
これは明らかに、日付と時間に関連した問題を扱う分野では
多くの問題領域(problem domain)のケースです。


区間コンテナは、セグメンテーションで働くことをinterval_setの
交わる点(intersect)のために可能にします。例えば、数ヶ月のグリッドを
もつ区間コンテナと交差し、次にそれらの数ヶ月にわたって繰り返したいと思うかもしれません。


最後に、追加のintervalがinterval_mapに格納される間隔で
オーバーラップする場合、interval_mapは関連する値上の集合を提供します。
この機能はオーバーラップ上の集成体(aggregate on overlap)と呼ばれます。
以下に例を示します:

typedef set<string> guests; 
interval_map<time, guests> party; 
guests mary; mary.insert("Mary"); 
guests harry; harry.insert("Harry"); 
party += make_pair(interval<time>::rightopen(20:00, 22:00),mary); 
party += make_pair(interval<time>::rightopen_(21:00, 23:00),harry); 

// party now contains 
[20:00, 21:00)->{"Mary"} 
[21:00, 22:00)->{"Harry","Mary"} //guest sets aggregated on overlap 
[22:00, 23:00)->{"Harry"}

例からわかるように、interval_mapは(関連する値上の)累積的(accumulative)な
ものだけでなく、(時間次元上の)decompositionalな振る舞いの両方を持ちます。


【Type Traits Extensions】
作者 : Frédéric Bron
レビューマネージャー : 必要としている
ダウンロード : https://svn.boost.org/trac/boost/browser/sandbox/type_traits
説明 : 追加の目的は、型TとUが<, <=, >, >=, ==, !=といった演算子で比較可能かどうかを検知する型特性を加えることです。


以下のtraitsを追加します:
is_equal_to_comparable
is_greater_comparable
is_greater_equal_comparable
is_less_comparable
is_less_equal_comparable
is_not_equal_to_comparable


これらの名前は標準テンプレートライブラリに基づきます。
( header, section 20.3.3 of the standard)


コードには以下の性質があります:
・t

    • スレッドデコレーター : thread_decoratorは、スレッドによって一度だけ呼ばれるsetup/cleanup関数を定義することを可能にします:setupはスレッド関数の前、cleanupはスレッド関数を抜けるときに呼ばれます。
    • shared_ptr特有のスレッド:これは、他のスレッドからそのスレッド特有のコンテキストへのアクセスを提供するthread_specific_ptrの拡張です。それが共有されるように、格納されるポインタは生のポインタの代わりにshared_ptrです。
    • thread keep alive mechanism:このメカニズムは、それらがkeep_alive_pointを定期的に呼ぶことにより生きていることを示さないスレッドを検知することを可能にします。スレッドが死んでいるように宣言される場合、ユーザーが提供された関数を呼ぶと、デフォルトでプログラムを終了(abort)するでしょう。
    • スレッドタプル:スレッド数を静的に知っているスレッドが構築時に作成されるスレッドグループを定義します。
    • set_once:待機しているあらゆる変数を、一度だけ設定する変数値に通知するシンクロナイザー。
    • thread_tuple_onece:set_onceシンクロナイザーを使用して、最初に終了するスレッドを連結(join)することを可能にするboost::thread_tupleの拡張。
    • thread_group_once:set_onceシンクロナイザーを使用して、最初に終了するスレッドを連結(join)することを可能にするboost::thread_groupの拡張。


thread_decoratorとthread_specific_shared_ptrは、
Roland Schwarzによって書かれたthreadalertのオリジナルの実装に基づきます。


Boost.InterThreadsは、スレッドsetup/cleanupデコレーター、スレッド特有の共有ポインター、
keep alive mechanismおよびthread tuplesを加えてBoost.Threadsを拡張します。


【Bitfield】
作者 : Vicente J. Botet Escriba
レビューマネージャー : 必要としている
ダウンロード : https://svn.boost.org/svn/boost/sandbox/bitfield/
ドキュメント : https://svn.boost.org/svn/boost/sandbox/bitfield/libs/integer/doc/html/index.html
説明 :
汎用的なビットフィールド特性。
Boost.Bitfieldは以下のもので構成されます:
・genericなgetter/setterメソッドを提供するgenericなビットフィールド特性クラス
・ビットフィールド特性およびビットフィールドのgetter/setterを容易に定義するBOOST_BITFIELD_DCLマクロ


【Lockfree】
作者 : Tim Blechmann
レビューマネージャー : 必要としている
ダウンロード : http://www.boostpro.com/vault/index.php?action=downloadfile&filename=boost_lockfree-241109.zip&directory=Concurrent%20Programming&
http://tim.klingt.org/git?p=boost_lockfree.git
ドキュメント : http://tim.klingt.org/boost_lockfree/
説明 :
Boost.Lockfreeは、lock-freeデータ構造の実装を提供します。
lock-freeデータ構造は、ガードのような同期プリミティブを、ブロッキングことなく多数のスレッドからアクセスすることができます。
lock-freeデータ構造は、アルゴリズムのブロッキングが高く、最悪の場合の実行時間につながるかもしれないリアルタイムシステムで、プライオリティ反転を回避するか、あるいはマルチプロセッサマシン用の拡張性を高めるために使用することができます。


Boost.Lockfreeは以下を提供します:
・boost::lockfree::fifo : lock-free fifo queue
・boost::lockfree::stack : lock-free stack