最終更新日時:
が更新

履歴 編集

Boost 1.52.0 リリースノート

本家リリースノート:

更新ライブラリ

Accumulators

ベータリリース後に追加された修正

  • オリジナルのtagを実装する時に既存のタグを継承すると、依存性がその意図した通りに解決されない長年の問題を修正 (#7409)
    • 訳者注:このバグは2008年の6月から存在していた

Config

  • GCC 4.4のSFINAEがあまりにもバギーだったので、BOOST_NO_SFINAE_EXPRを定義した

Chrono

新機能

  • chrono I/Oの強化。これはHoward Hinnantによって提案された機能である(#5980, proposal)。
  • time_pointフォーマット状態のためのio state saverを追加(#5981)
  • 低レベルのI/O機能群を追加(#7059)非推奨機能
  • Boost.Chrono 1.2.xに含まれるchrono i/o。これはバージョン2.0でリファクタリングされている。
  • chrono i/o : マニピュレータduration_shortおよびduration_longを非推奨とする。代わりにパラメータ化されたduration_fmt、もしくは名前変更されたマニピュレータduration_style::symbolおよびduration_style::prefixを推奨する。
  • chrono i/o : duration_punct<>ファセットを非推奨とする。ローカライズ用途には、get_duration_styleフリー関数で情報を取得し、duration_unitsファセットを使用する必要がある。
  • BOOST_CHRONO_VERSION==2の場合には、非推奨機能は使用できない。

バグ修正

  • C++11準拠 : constexpr durationから非constローカル変数への代入で、未解決シンボルになる問題を修正(#7381)

修正なし

  • chrono_io.hppoperator<<(ostream& os, …)によってosの状態が変更される。バージョン2.0で提供される新たなI/Oではこの問題が解決される。新たなバージョンに移行する必要がある(#6871)。

Betaリリース後に追加された修正

  • コンパイラがconstexprを対応しているが、標準ライブラリインターフェースがconstexprに対応していない場合のコンパイルエラーを修正 (#7479)

Container

  • stable_vectorのテンプレートコード膨張と型安全性を改良した
  • doxygenドキュメントを改良するために、シーケンスコンテナのtypedefを変更し、関数の並びを変えた
  • バグ修正
    • ドキュメントのリンクを修正(#6615)
    • flat_map/flat_multimapのドキュメントで、比較述語の型がstd::less< std::pair< Key, T> >と記述されていたので、std::less<Key>に修正(#7139)
    • string::insert()が返すイテレータが、標準と異なり、+1の位置を返すようになっていたので修正(#7215)
    • 範囲を引数にとるContainer::insert()メンバ関数が、C++11からイテレータを返す仕様になったためその機能を実装した(#7232)
    • 範囲を引数にとるvector::insert()メンバ関数が、逆順で挿入されたりクラッシュしたりする問題を修正(#7269)
    • flat_map/set::insert(ordered_unique_range_t, …)の挙動がおかしかったのを修正(#7439)
  • C++11の、範囲を引数にとるinsert()メンバ関数がイテレータを返すという仕様を実装し、ほとんどのコンテナの挿入コードをクリーンナップした
  • エイリアシングエラーを修正

Date Time

  • BOOST_DATE_TIME_NO_LIBをドキュメントに記載(#6077)
  • nth_as_str()関数内で、AND条件をORで書いていたのを修正(#7022)
  • いくつかの警告を修正(#7234)

Foreach

  • GCCでのアライメント警告を修正

Function

  • ムーブコンストラクタとムーブ代入演算子を追加(#7330)
    • C++11で右辺値参照が使える環境のみサポート

Graph

バグ修正

  • grid_graphのドキュメントに「2次元以上」と記載していたが、そんな制限はなかったのでドキュメントを修正(#6950)
  • 辺の緩和条件(relaxation condition)を判定するrelax.hpprelax()関数において、先行マップが変更された場合でもfalseを返してしまう問題を修正(#7226)
  • バンドルプロパティに継承関係のあるクラスを指定した場合、基本クラスのメンバを使おうとするとコンパイルエラーになっていた。バンドルプロパティの取得・設定には、指定した型のみではなく継承関係にある型を許可するよう修正した(#7308)
  • テンプレートパラメータのGraphから直接null_vertex()を呼び出していたのを、graph_traitsを経由するよう修正した(#7327)
  • pending/indirect_cmpの戻り値型が間違っていたので修正(#7338)
  • コア数を計算するweighted_core_numbers()アルゴリズムで、正しい使用方法にも関わらずout_of_range例外が送出されていた問題を修正(#7341)
  • lookup_one_property_internalプロパティクラスがtype型を持っていなかったので追加(#7378)
  • astar_search_no_init()の名前付き引数バージョンから通常のバージョンを呼び出す際に、colorパラメータとindex_mapパラメータを逆に渡していたので修正(#7380)
  • dijkstra_shortest_paths()/dijkstra_shortest_paths_no_color_map()において、無限の重さは正しく動作する保証がないことをドキュメントに記載(#7398)
  • 未使用変数の警告を修正(#7428)

Hash

  • アクシデントによりenumのサポートが削除されたのをリストア (#7437)
  • 新しい浮動小数点数用hasherを用意
    • バイナリをhashすることで多くのプラットフォームで高速に動作するようになった

Interprocess

  • mapped_regionshrink_by()関数とadvise()関数を追加
  • ABI破壊circular buffer indexmessage_queueを再実装(古い実装では、順序付けされた配列を過度にコピーしていた)。これはパフォーマンスを大幅に改善するが、ABIは壊れる。古い挙動とABIが必要な場合は、boost/interprocess/detail/workaround.hppBOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEXをundefineすること。
  • message_queueへの挿入時間を改善。一般的なケースでの優先探索を回避(配列と循環バッファ両方の構成)。
  • interproces_sharable_mutexinterproces_condition_anyを実装
  • offset_ptrのパフォーマンスを改善
  • 整数のオーバーフローチェックを追加

Iterator

バグ修正

  • コンストラクタで関数が呼ばれて1つ要素が食われていたのを修正 (#5825)
  • function_input_iteratorのドキュメントのエラーを修正 (#7194)

破壊的変更

  • #5825 を修正するに伴い、不必要な関数の実行は行われなくなった。例えば、終端イテレータの生成に関数は実行されない。つまり、イテレータの参照外しとインクリメントをN回実行すれば関数はN+1回ではなくN回実行される。古い挙動に関連しているユーザコードは調整する必要がある。
    • 訳者注:このバグの修正方法では参照外しとインクリメントはセットで行わなければならない。つまり、イテレータのインクリメントだけを行なって読み飛ばそうとするとBOOST_ASSERTによりアサートが発生する。

Lexical Cast

  • lexycal_cast(const CharType* chars, std::size_t count) というオーバーロードを追加 (#6663)
  • バグを修正 (#7228)
  • 1.51.0でMSVC2003でコンパイルできなくなったのを修正 (#7255)

Math

  • 与えられた分布に対してmoments(mean, variance, …)が定義されていない場合、それを求めようとするとコンパイルエラーも例外も吐かずに数学的に間違っている値を返したりする問題を修正。長い議論の末、全てのmomentsは数学的なポリシーに沿わない場合、domain_errorを投げる(例外が無効な場合はNaNを返す)ことに既になっていた。よってこのバグはそれにあたって解決されている。 (#7177)
  • 多くの分布で不正な値を検出するルーチンが間違っていた問題を check_out_of_range を実装できる機能を追加したことで修正した (#6934) 。これに付随して、不正な値を検出できていなかった分布が更に発見され、同時に修正されている。
  • Hankel 関数で x < 0 かつν が奇数の場合に不正な値が返される問題を修正 (#7135)
  • boost::math::isfiniteunsigned int 0 に対して false を返す問題を修正 (#6517)
  • GCC 4.4で bessel_ik.hpp 内の匿名enumによる問題を修正 (#6362)
  • Boostによる必要なマクロ等の定義後に <complex> をインクルードしていたことによって Boost.TR1 がうまく動かない問題を修正 (#7053)
  • Golden ratio等を数学的な定数のリストに新たに追加する提案をfixedとしてマーク。このチケットは相当に古く、現在のバージョンでは phi として既に実装されているため。 (#2693)
  • cdf/pdf/quantile による 問題のある分布のチェックが不正だった問題は、不正な値を検出するルーチンの改良によって既に修正された。 (#6937)
  • 浮動小数点数のビット数が小さい特定のコンパイラでそれによって例外が投げられる問題のcompiler workaround (#7099)

Phoenix

  • decltypeベースのboost::result_ofが動作するようにした

Polygon

  • ボロノイ図に関する拡張機能を追加
  • 新たなSegmentコンセプトを導入
  • コンパイルエラーを修正

Proto

  • データパラメータのプリミティブな変換は key でインデックスされたスロットを持つこともできるようになった
  • プリミティブな変換は const 参照されていないtemporary expressionにも適用できるようになった
  • <iterator>とBoost.Rangeに存在する幾つかのフリー関数について、呼び出し可能な関数オブジェクトの型を追加
  • Protoのexpression nodesにMPLのalgorithmが動くようになった
  • proto::pass_through プリミティブ変換は、Domain テンプレートパラメータを新たに取るようになった。これによって結果の表現についてのドメインを指定できるようになった。

Ratio

新機能

  • short_namelong_name 関数はそれぞれ symbolprefix 関数に置き換えられた

非推奨

  • ratio_string<>::short_nameratio_string<>::long_name は非推奨となった。それぞれ ratio_string<>::symbolratio_string<>::prefix を使用することが推奨される。非推奨となった関数は1.55まで提供される。

ベータリリース後に追加された修正

  • コンパイラがchar16_tchar32_tに対応しているが、標準ライブラリがstd::u16stringstd::u32stringに対応していない場合のコンパイルエラーを修正 (#7478)

Result Of

  • decltypeが”満足に動作する”のであればboost::result_ofdecltypeで実装される。つまりコンパイラがn3276の提案を実装していることが要求される
    • 現在、n3276を実装しているのは非常に最近のコンパイラであるClang 3.1のみである
  • boost::result_ofdecltypeで実装されているのであればn3436で実装される
    • n3436の提案はresult_ofでSFINAEできるようにする提案

Thread

  • 廃止予定機能: Boost 1.50.0からBoost 1.55.0まで利用可能な廃止予定機能。これらの廃止予定機能は、Boost 1.52.0までデフォルトで提供される。非推奨機能が必要ない場合は、BOOST_THREAD_DONT_PROVIDE_DEPRECATED_FEATURES_SINCE_V3_0_0をdefineすればよい。1.53.0移行で廃止予定機能を使いたい場合は、BOOST_THREAD_PROVIDE_DEPRECATED_FEATURES_SINCE_V3_0_0をdefineすること。これらの廃止予定機能は、Boost 1.55.0までの提供なので、1年以内に新機能に移行すること。
    • 時間関連の関数にBoost.DateTimeライブラリを使わず、代わりにChronoオーバーロードを使用する。
  • BOOST_THREAD_VERSION==3での破壊的変更(Boost 1.53.0からのデフォルト): いくつかの新機能は、インタフェースが同じで挙動が異なる。BOOST_THREAD_VERSIONが3の場合でも、マクロによる動作切り替えで限定的に2の機能を提供する。廃止予定機能はBoost 1.55.0まで利用可能である。
    • C++11準拠&破壊的変更unique_futureを、C++11に従ってfutureに名前変更(#6229)
    • C++11準拠&破壊的変更threadのデストラクタは、join可能な状態で呼び出されたらterminateを呼ぶようにした(#6266)
    • C++11準拠&破壊的変更threadのムーブ代入は、join可能な状態で呼び出されたらterminateを呼ぶようにした(#6269)

新機能

  • C++11準拠: 不足していたasync()を追加(#4710)
  • C++11準拠: notify_all_at_thread_exitを追加(#7283)
  • C++11準拠: recursive mutextry_locknoexceptを追加(#7345)

バグ修正

  • thread_specific_ptrのキーの本質、計算量、論拠をドキュメント化(#2361)
  • thread_specific_ptrの2つの問題を修正: 1. dllでスレッドが使われる場合、スレッドローカルストレージのクリーンナップコードが呼ばれる前にdllがアンロードされるとクラッシュする。 2. 微妙にリークしてる(#2797)
  • future.hppのコンパイルエラーを修正(#5274)
  • WIndows CE 6.0上でコンパイルエラーになる問題を修正(#5431)
  • call_onceが、いくつかのプラットフォームで動作しない可能性があったので修正(#5752)
  • Threadライブラリのビルドで、date_timeが自動的にビルドされない問題を修正(#7045)
  • 誤字修正:ドキュメントでinterrupt_point()と書いていたところをinterruption_point()に修正(#7173)
  • libs以下にあるテストコード中で、#include <libs/thread/src/pthread/timeconv.inl>のようなパス指定でインクルードを行っていた。これはCMakeで問題になるので、相対パスでインクルードするようにした(#7200)
  • インライン関数にdllimportを指定していて警告が出ていたので修正(#7220)
  • this_thread::sleep_for()interrupt()に対応してなかったので修正(#7238)
  • バージョン3関連のドキュメントtypoを修正(#7245)
  • win32/thread_primitives.hppの、Intel C++ compiler 12.1での警告を修正(#7272)
  • shared mutexに対するlockshared lockへのアクセスには優先順位がないことを明記(#7284)
  • boost/thread/future.hppがHPUXでコンパイルエラーになっていたので修正(#7329)
  • BOOST_THREAD_DONT_USE_SYSTEMが動作していなかったので修正(#7336)
  • packaged_taskがアロケータを指定された場合、アロケータへの参照をメンバに保持していたので、コピーを保持するよう修正(#7349)
  • packaged_taskがアロケータを指定された場合、デストラクタを呼んでいなかったので修正(7350)

uBLAS

  • inplace_solve()のパフォーマンス向上(#4024)
  • coordinate_matrix::sort()がGCC 4.7でコンパイルエラーになっていた問題を修正(#7363)
  • 内部でstd::inplace_merge()を使用していたが、index_tripleのイテレータはプロキシオブジェクトを返すため、標準アルゴリズムの要件を満たしていなかった

Unordered

  • 要素の追加時に既存のノードを再利用できる時は再利用するようにした
  • その他、実装のリファクタリング

ベータリリース後に追加された修正

  • 区間をeraseするときにクラッシュしていたのを修正 (#7471)

Uuid

ベータリリース後に追加された修正

  • 536,870,912バイト以上のメッセージに対してsha1.hppが正しく計算できていなかったのを修正 (#7128)

Wave

  • boost::filesystem::create_directories() の仕様変更に応じて util::create_directories() を新たに定義した
  • 直前の行が空のマクロの展開だけの場合、プリプロセス時の文脈が認識されなくなる、非常に発見しづらいバグを修正 (テスト t_9_023.cpp を追加)
  • 新たなオプション --license=<file> を追加。これによって、生成される新しいファイル全ての先頭に対して <file> の中身をプリペンドできるようになった。これはPhoenixやFusionで使用されている部分的なプリプロセッシングの実装を簡単にする。
  • -N オプションの動作を変更。以前はマクロ自体が無いものとして扱われていたが、この変更によってマクロ展開全てはスキップされず、引数の展開は行い、そのマクロ自身の展開のみ行わないようになった。

Xpressive

  • sub_matchをBoost.Rangeで動作するようにした (#7237)

テスト済みコンパイラ

  • Linux
    • GCC: 4.2.4, 4.3.4, 4.4.3, 4.5.3, 4.6.2, 4.7
    • GCC, C++11 mode: 4.3.4, 4.4.3, 4.5.3, 4.6.2
    • Intel: 11.1, 12.0, 12.1
    • LLVM Clang: 2.8
  • OS X
    • GCC: 4.4
    • GCC, C++11 mode: 4.4.4
    • Intel: 11.1, 12.0
  • Windows
    • GCC, MinGW: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.0
    • Visual C++: 8.0, 9.0, 10.0
  • FreeBSD
    • GCC: 4.2.1(32/64bit)

追加のテスト済みコンパイラ

  • Linux
    • Cray: 8.0
    • LLVM Clang: from subversion
    • LLVM Clang:
    • GCC: 4.2.4, 4.3.4, 4.4.4, 4.5.3, 4.6.2, 4.6.3, 4.7.0, 4.7.1, 4.7.2
    • GCC, C++11 mode: 4.3.4, 4.4.4, 4.5.3, 4.6.3, 4.7.1
    • pgCC: 11.9
  • Intel: 10.1, 11.1, 12.0, 12.1
    • Visual Age: 10.1
  • OS X
    • LLVM Clang: subversion
    • LLVM Clang, C++11 mode: subversion
    • Intel: 11.1, 12.0
    • GCC: 4.4.4
    • GCC, C++11 mode: 4.4.4
  • Windows
    • Visual C++: 8.0, 9.0, 10.0, 11.0
    • Visual C++ with STLport: 9.0
    • Visual C++, Windows Mobile 5, with STLport: 9.0
    • GCC, MinGW: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.0
  • AIX
    • IBM XL C/C++ Enterprise Edition: V12.1.0.0
  • FreeBSD
    • GCC: 4.2.1(32/64bit)
  • Solaris
    • Sun: 5.10

翻訳

Kohei Takahashi, Akira Takahashi, manga_osyo, Nana Sakisaka(saki7)