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

Boost.Containerが採択されました

C++

【Containers Library Review】 The review of the Containers library by Ion Gaztanaga starts today
【Containers Review Result】 Boost.Containers is accepted into Boost.


Boost.Containerライブラリがレビューの結果、採択されました。
Boost.Containerは、vectorやmapなどのコンテナの最新仕様を提供することを目的としたライブラリで、C++11のコンテナライブラリで導入されるムーブセマンティクスやPlacement Insert(emplace_back)といった仕様にも対応していて、それをC++03で使用することができます。


今回のレビューには、私も微力ながら参加しました。
アンドキュメントと、C++11仕様への対応不足の指摘をした程度ですが、次にレビューするときはさらに深く掘り下げた意見が出せるようにしていきたいです。
日本人では、私のほかに id:Flast さんもレビューに参加していました。


以下、レビュー結果です。


==


これは、Ion GaztanagaによるContainerライブラリが採択されたことのアナウンスです。


賛成11票と反対1票が投じられ、多くの方が同じ指摘を行いました。
以下、レビューコメントのまとめ:

  • よりよい導入/概要/チュートリアルのドキュメントが必要。
    • ステートフルなアロケータは?現在のサポート領域は?どのようにサポートし、パフォーマンスに影響するか。
    • 新コンテナの概要が必要。stable_vector, flat_*, etc...
    • 再帰的なコンテナ(recursive container)と、それがなぜC++03のコンテナではサポートされないかの説明が必要。
    • このライブラリが完全な標準準拠になっていない理由を説明する必要がある(おそらく上記と一緒に言及されることになるだろう)。
  • デフォルトアロケータがドキュメント上で明確ではない。
  • アロケータテンプレートパラメータ名の一貫性を確認すること。
  • C++11から導入されるbasic_string::shrink_to_fitメンバ関数を追加。
  • range insertionドキュメントの誤字(first/last vs i/j)。
  • vectorの動作をドキュメントに記載する(それからその方法を正当化する)必要がある。
  • C++11のドキュメントに準拠する必要がある。コンテナの要件や、C++11の機能であるstd::allocator_traitsなど。
  • dequeのいくつかのメンバ関数にドキュメントがない。
  • 戻り値/効果、計算量 or 例外などのドキュメントが不足している。
  • "Acknowledgements"ページが現在空になっている。様々な参照ソースがどこから来ているのかの(c)通知やライセンスの表明を明確にする必要がある。Interprocessコンテナと混同されないように、Boostのコードの歴史、すなわちBoost.Interprocessの一部であったことを記述するべき。
  • ドキュメントの構成が、目的の情報に直接飛ぶのが不必要に難しいといういくつかのコメントがあった。


機能追加のリクエスト

  • C++11のstd::forward_listの実装を検討(訳注:slistとはインタフェースやsizeの計算量が異なる)。
  • Boost.Rangeとの相互運用性のため、range insertのサポートを検討。
  • flat_*コンテナのコンテナアダプタを作成すること。これは a) ユーザーが実装を選択できるようにし、 b) (主に効率的なデータの読み込みのために)元のコンテナを操作できるようにしてユーザーが自分の足を撃てるようにする。また、より多くのユースケースを満たせるようにするいくつかのインタフェース拡張を提供する。
  • ソート済みデータによる順序付きコンテナの効率的な構築。
  • Clangのlibc++ std libのパフォーマンステストを調査する。


John Maddock
Containers review manager.


(訳注:レビュー結果中にC++11とC++0x両方の表記があったので、ここでは前者に統一しています。)