読者です 読者をやめる 読者になる 読者になる

Boostのレビュー状況 2010/05

C++

Review Wizard Report for May 2010

http://thread.gmane.org/gmane.comp.lib.boost.devel/204808


ニュース

  • Boost 1.42.0 リリース
    • 新規ライブラリ : UUID
    • 更新ライブラリ : Asio, Circular Buffer, Fusion, Graph, Integer, Iostreams, Program.Options, Property Map, Proto, Regex, Spirit, Unordered, Xpressive
  • Meta State Machine(MSM)ライブラリを採択
  • Boost 1.43.0 リリース
    • 新規ライブラリ : Functional/Factory, Functional/Forward
    • 更新ライブラリ : Range, Accumulators, Array, Asio, Fusion, Iostreams, Multi-index Containers, Proto, Random, Spirit, Thread, Unordered, Uuid, Wave, Xpressive


未解決の問題点

  • Constrained Valueライブラリは、2008/12にレビューが行われましたが、レビュー結果が報告されていません。
  • 以下のライブラリは、Boostに採択されましたがまだSVNに提出されていません:
    • Time Series (accepted August 2007)
    • Floating Point Utilities (accepted March 2008)
    • Futures (accepted April 2009)
    • Polygon Library (accepted November 2009)
    • Geometry Library (accepted November 2009)
    • Meta State Machine (accepted January 2010)
    • Interval Container Library (accepted April 2010)
    • Log (accepted May 2010)

※訳注:MSMは間もなくSVNに提出される予定。Futuresは1.41.0ですでに入ってる。

  • 以下のライブラリは、Boostに仮採択されましたが、ミニレビューと完全な採択のための提出がされませんでした:
    • Switch (accepted provisionally January 2008)
    • Phoenix (accepted provisionally September 2008)

※訳注:Phoenixは、Protoによる実装のもの。鋭意製作中。


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


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


レビューキュー

  • Lexer
  • Shifted Pointer
  • Logging
  • Join
  • PImpl
  • Task
  • Endian
  • Conversion
  • Sorting
  • GIL.IO
  • AutoBuffer
  • String Convert
  • Containers
  • Type Traits Extensions
  • Interthreads
  • Bitfield
  • Lockfree
  • Fiber
  • Chrono
  • Sequence Properties
  • Static Size Linear Algebra
  • Locale


Lexer
作者 : Ben Hanson
レビューマネージャー : Eric Neibler
ダウンロード
説明 :
flexによってインスパイアされたプログラマブルな字句解析器(lexical analyser)ジェネレータです。
flexのように、正規表現によってプログラムされ、圧縮のための同値類(equivalence class)を利用する
多くのDFAとしてステートマシンを出力します。


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


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


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


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


Task
作者 : Oliver Kowalke
レビューマネージャ : 必要としている
ダウンロード
説明 :このライブラリは以下を提供します:

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


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

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


Conversion
作者 : Vicente Botet
レビューマネージャー : 必要としている
ダウンロード
説明 :
無関係な型の間の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
レビューマネージャー : 必要としている
ダウンロード
説明 :
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
レビューマネージャー : 必要としている
ダウンロード
説明 :
boost::gilのための、様々な画像形式(tiff, jpeg, png, etc)を読み書きすることを可能にするI/O拡張です。このレビューは、さらに新しいカラースペース、アルゴリズムなどのような、gilにある一般的な機能性を追加するツールボックス拡張を含んでいるでしょう。


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


String Convert
作者 : Vladimir Batov
レビューマネージャー : 必要としている
ダウンロード
説明 :
このライブラリは、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等で処理/準備しなければならないアプリケーションでは必須のツールです。


Containers
作者 : Ion Gaztanaga
レビューマネージャー : 必要としている
ダウンロード
ドキュメント
説明 :
Boost.Containerライブラリは、STLコンテナを含むいくつかの有名なコンテナを実装します。
このライブラリの目標は、標準コンテナにないもの、あるいはC++03のコンパイラで最新の標準ドラフトの機能を提供することです。


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

  • is_equal_to_comparable<T,U>
  • is_greater_comparable<T,U>
  • is_greater_equal_comparable<T,U>>
  • is_less_comparable<T,U>
  • is_less_equal_comparable<T,U>
  • is_not_equal_to_comparable<T,U>

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

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

  • t
  • t
  • t


InterThreads
作者 : Vicente J. Botet Escriba
レビューマネージャー : 必要としている
ダウンロード
説明 :
Boost.InterThreadsは、Boost.Threadsにいくつかの機能を拡張します:

  • スレッドデコレーター : 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
レビューマネージャー : 必要としている
ダウンロード
ドキュメント
説明 :
汎用的なビットフィールド特性。
Boost.Bitfieldは以下のもので構成されます:

  • genericなgetter/setterメソッドを提供するgenericなビットフィールド特性クラス
  • ビットフィールド特性およびビットフィールドのgetter/setterを容易に定義するBOOST_BITFIELD_DCLマクロ


Lockfree
作者 : Tim Blechmann
レビューマネージャー : 必要としている
ダウンロード
リポジトリ
ドキュメント
説明 :
Boost.Lockfreeは、lock-freeデータ構造の実装を提供します。
lock-freeデータ構造は、ガードのような同期プリミティブを、ブロッキングことなく多数のスレッドからアクセスすることができます。
lock-freeデータ構造は、アルゴリズムのブロッキングが高く、最悪の場合の実行時間につながるかもしれないリアルタイムシステムで、プライオリティ反転を回避するか、あるいはマルチプロセッサマシン用の拡張性を高めるために使用することができます。


Boost.Lockfreeは以下を提供します:

  • boost::lockfree::fifo : lock-free fifo queue
  • boost::lockfree::stack : lock-free stack


Fiber
作者 : Oliver Kowalke
レビューマネージャー : 必要としている
ダウンロード
説明 :
fiber(micro-thread)を起動し、fiber間のデータを同期させるためのC++ライブラリ。


Chrono
作者 : Vicente Botet
レビューマネージャー : 必要としている
ダウンロード
ドキュメント
説明 :
Boost Chronoライブラリは以下を提供します:

  • C++0x標準ライブラリのcommon_type
  • C++0x標準ライブラリの時間ユーティリティ、以下を含みます:
    • Class template duration
    • Class template time_point
  • Clocks:
    • system_clock
    • monotonic_clock
    • high_resolution_clock
    • durationクラスとtime_pointクラスのためのtypeof登録
  • Process clocks:
    • Real CPU時間を得るprocess_real_CPU_clocks
    • User CPU時間を得るprocess_user_CPU_clocks
    • System CPU時間を得るprocess_system_CPU_clocks
    • 一度だけReal、User、System CPU時間を得るタプルのようなクラスprocess_cpu_clock。
  • Stopwatches:
    • 経過Clock時間を得るstopwatch
    • accumulateした経過Clock時間を得るstopwatch_accumulator
    • Stopwatchのstart/stop操作、suspend/resume、resume/suspendを可能にするscopedヘルパクラス
  • Stopclocks or Stopwatch reporters:
    • Stopwatchモデルの便利な結果報告を行うstopwatch_reporter
    • stopwatch_reporter>の短い表現stopclock
    • stopwatchフォーマッタのワイド文字サポート


Sequence Properties
作者 : Grant Erickson
レビューマネージャー : 必要としている
ダウンロード
説明 :
creasingアルゴリズムテンプレートは、シーケンスの順序特性を決定するための4つのテンプレート関数を定義します:

  • Increasing
  • Decreasing
  • Strictly Increasing
  • Strictly Decreasing

実装は、STLのadjacent_find, not2、および{greater,less,greater_equal,less_equal}の自明な合成です。
シーケンス順序検証のためにこれらのテンプレートを使用することは、あるシーケンスの一時的にソートされたバージョンを作成し、それを元のシーケンスと比較するより効率的で簡単です。
例:

bool CheckPoints(const Points & inPoints)
{
    const bool strictlyIncreasing =
        is_strictly_increasing(inPoints.begin(), inPoints.end());

    if (!strictlyIncreasing) {
        cerr << "Points must be in increasing order with no duplicate values." << endl;
    }

    return strictlyIncreasing;
}


Static Size Linear Algebra
作者 : Emil Dotchevski
レビューマネージャー : 必要としている
ダウンロード
ドキュメント
説明 :
Boost.LAは主に静的サイズのベクトルおよび行列で働くための、ジェネリック線形代数アルゴリズムの集合を提供します。また、このライブラリベクトルと行列データ型を定義します。これはvector_traitsとmatrix_traitsのテンプレートの特殊化でユーザーが自身の型を導入することを可能にします。

※訳注:説明がなかったのでBoost.LAのドキュメントから説明もってきた


Locale
作者 : Emil Dotchevski
レビューマネージャー : 必要としている
ダウンロード
説明 :
Boost.Localeは、Unicodeを意識した方法で既存の組み込みC++ローカライズ能力を拡張する、強力なローカライズツールを提供するローカライズライブラリです。


開発中のライブラリ

Persistent
作者 : Tim Blechmann
説明 :
このライブラリは、永続オブジェクトへのアクセスに、メモリ中の規則的なオブジェクトへのアクセスにできるだけ近いインタフェースを提供する、Boost.Serializationに基づいたライブラリです。

  • Boost.SmartPtrによって使用されるものと等価なオブジェクト所有権概念:shared, weak, scoped(and raw)
  • 並列アクセスコンテナ:ノードを永続オブジェクトとして実装して、コンテナをメモリを動かさずにアクセスできるSTLコンテナ。コンテナを変更する並列トランザクションは、同じコンテナノードが2つのスレッドによって同時に変更されるという、まれなケースで繰り返されるだけです。
  • 他のトランザクションリソース、例えばリレーショナルマッパが、来たるBoost.Rdbライブラリによって拡張可能です。それらの中に分散されたトランザクションがある状態で、複数のリソースをひとつのデータベースに結合できます。

現在開発中で、レビューのために提出するつもりのライブラリがあれば教えてください。
開発中のライブラリのリストは以下を参照してください。

http://svn.boost.org/trac/boost/wiki/LibrariesUnderConstruction