最終更新日時:
が更新

履歴 編集

Boost 1.48.0 リリースノート

本家リリースノート:

http://svn.boost.org/svn/boost/website/public_html/beta/feed/history/boost_1_48_0.qbk

新ライブラリ

  • Container
    • 標準ライブラリコンテナとその拡張。
    • 作者:Ion Gaztañaga
  • Locale
    • ローカライズとUnicodeハンドリングのためのツール。
    • 作者:Artyom Beilis
  • Move
    • C++03/C++11のための汎用的なムーブセマンティクスの実装。
    • 作者:Ion Gaztañaga

更新ライブラリ

(+)が付いているものは本家のリリースノートには記載されていない変更。

更新ツール

Accumulators(+)

  • accumulator_setの要素型がstd::numeric_limitsで特殊化されていない場合、minの結果が不正な値になっていた。std::numeric_limitsの特殊化をコンパイル時にチェックするよう修正(#5491)。

Asio

  • 様々なパフォーマンス向上を実装:
    • スレッドローカルな操作のキューを使用することにより、シングルスレッドで使う際(つまりconcurrency_hint1のとき)のロック/アンロックのペアを排除。
    • いくつかのepoll_reactorで、投機的(speculative)な操作についてロックを保持することなく実行できるようにした。
    • epoll_reactorのI/O操作をハンドラを実行する前に行うことにより、参照の局所性を向上。また、CPU間のスケーラビリティが向上。
    • 非同期の読み書き操作を、配列(boost::array or std::array)で特殊化。
  • async_read_untilregexオーバーロードのコンパイルエラーを修正(#5688)。
  • グローバル名前空間のsignal()を明示的に呼び出すことにより、Windows固有のコンパイルエラーを修正(#5722)。
  • タイマーヒープが空の場合に、クロックを読みにいかないようdeadline_timerを修正。
  • 完全なTLSレコードを保持するために、SSLのバッファサイズを十分に持つよう修正(#5854)。
  • ユーザーのノンブロッキング設定に従うようnull_bufferを修正(#5756)。
  • Windows上で、fd_setのサイズを実行時に設定するよう修正。
  • 関数型(function type)のconst修飾で出ていたMSVCの警告を無効化。
  • Intel C++ Compilerで発生するクラッシュを修正(#5763)。
  • 全ての利用可能なアルゴリズムをサポートするために、OpenSSLを初期化。
  • セッションをシャットダウンする際のSSLエラーマッピングを修正。
  • いくつかのレイテンシーテストプログラムを追加。
  • バッファがいっぱいになった際に、読み書き操作が終了することを明らかにした(#5999)。
  • epoll_reactorの初期化での例外安全性の問題を修正(#6006)。
  • strandの実装数を、BOOST_ASIO_STRAND_IMPLEMENTATIONSマクロで設定可能にした。
  • strandのアロケーションにround-robinアプローチを使用できるようにするためにBOOST_ASIO_ENABLE_SEQUENTIAL_STRAND_ALLOCATIONフラグを追加。
  • strand.post()を使用する可能性のある飢餓問題を修正。

Chrono

新機能

  • 丸め演算ユーティリティを追加。作者:Howard Hinnant。(「<chrono> utilities」, #5979)
  • process_clockが使用可能かを調べるBOOST_CHRONO_HAS_PROCESS_CLOCKSを追加(#5978)。
  • 高水準なエラーハンドリングを無効にすることを可能にした。BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLINGをdefineすると無効になる(#5998)。
  • 標準C++11に合わせて、durationtime_pointのいくつかの関数にconstexprを設定(#5906)。
  • noexceptに対応(#5907)

バグ修正

  • Intel Compilerでduration.hppのコンパイルに失敗する問題を修正(#5669)。
  • visibilityをサポート(#2114)。
  • process_cpu_clock::now()が、MAC上では1/1000秒のtime_pointを返すようにした(#5909)。
  • Windows上でreal cpu clockがsteady_clockになるようにした(#5946)。
  • real cpu clockが、MAC上ではclock()の代わりにtimes()を使用するようにした。これは2倍高速で、より良い精度を持っている(#5974)。

クリーンアップ

  • テスト時間を50%速くするために、ヘッダオンリー、共有、静的リンクの組み合わせを削減
  • chrono_accuracy_testは決定性がないため、レギュレッションテストから削除
  • 以下の古いファイルを削除:
    • boost/chrono/timer.hpp
    • boost/chrono/process_times.hpp
    • boost/chrono/detail/process_clock.hpp
    • boost/chrono/detail/mac/process_clock.hpp
    • boost/chrono/detail/posix/process_clock.hpp
    • boost/chrono/detail/win/process_clock.hpp
    • boost/chrono/detail/run_timer.hpp
    • boost/chrono/detail/run_timer_static.hpp

Config

  • BOOST_NO_DECLTYPE_N3276マクロを追加(see N3276)

Fusion

  • single_viewがrandom access sequenceを生成するようにした
  • fusion::distanceから、嘘のコンパイル時アサートを削除
  • segmented Fusionの実装を整理

Geometry

バグ修正

  • 堅牢性の問題。いくつかの状況でunionの出力に失敗していた。
  • 堅牢性の問題。いくつかの状況で計算された交差点(intersection)がセグメント外だった。
  • コンセプトの問題。デカルト交差(cartesian intersect)が提供されたもの以外のセグメントを理解していなかった。
  • いくつかの状況で、linestringの自己交差点を逃していた。(boost users : [geometry] intersects bug?)
  • Fusionの座標系が登録されていなかった。

解決したチケット

  • セグメントのintersectionfirst / secondという名前のメンバを想定している(#5726)
  • Fusionアダプトのサンプルで、座標系の登録が間違っている(#5744)
  • ドキュメント用のコードに、#include <boost/foreach.hpp>が必要(#5748)
  • distance_pythagorassqrt()を行なっていない(#5954)

アルゴリズムの改善

  • 自己交差点の計算を自動では行わないようにした。これはパフォーマンスを爆発的に向上させる。
  • その他に、自己交差点の計算を高速化。
  • intersectionが、重複するポイントの出力を避けるようにした。したがって、これは最小限の集合を出力する。

追加アルゴリズム

  • covered_by : withinは「境界線上ではない内側」だが、covered_byは「境界線上もしくは内側」

追加機能

  • within : strategywithin<point, box>within<box, box>が可能になった
  • convert : より広い範囲の変換をサポート
  • assign : 同上。引数の順番は逆だが、convertの別名。

座標型の追加

  • Boost.Rationalをサポート

Graph

バグ修正

  • libboost_graph_parallel shared library内でexit()を使用していたのを削除(#5185)。
  • write_graphmlkeyを無視していたのを修正(#5506)。
  • MSVCで、maxマクロの問題でcsr_graphがコンパイルエラーになっていたのを修正(#5813)。
  • named_graphremoving_vertexで、vertexを直接削除していたのを、vertex nameを削除するよう修正(#5919)。
  • Tracにないその他いくつかのバグを修正。

reverse_graphedge_descriptor型を変更し、曖昧さを解消。

Interprocess

バグ修正

  • Windows上でinterprocess::file_lockが正しく動作していなかった問題を修正(#2796)
  • vectorstreamの構築でメモリリークしていた問題を修正(#4301)
  • OSX Leopard 64ビット版でboot stampの取得が常に失敗していた問題を修正(#4251)
  • GCC 4.5/4.6でNDEBUG + 最適化オプション(例えばO1)を付けるとmanaged_mapped_fileが落ちる問題を修正(#4452)
  • Windows上でboost::interprocess::managed_shared_memoryが間違ったtmpパスに作ってしまう問題を修正(#4895)
  • managed_shared_memoryopen_onlyモードで作成すると、権限が変更されてしまう問題を修正(#5077)。
  • boot stampを取得する処理の互換性問題を修正(#5120)。
  • Linux上でmemory segmentを開く際、アクセス許可がリセットされる問題を修正(#5123)。
  • 32-64bit間の共用memoryにおける構造体のメモリレイアウトが実装意図と異なる問題を修正 (#5230)
  • libc++でstd名前空間にあるallocator, less, pair, char_traitsの前方宣言ができない問題に対応 (#5197)
  • boost/interprocess/sync/file_lock.hppがmsvc10で64bitコンパイルできない問題を修正 (#5287)
  • boost/interprocess/sync/xsi/simple_xsi_semaphore.hpp#ifndefで終端されていない問題を修正(ただしここのクラスはもう実装に利用していないので信頼すべきでない) (#5294)
  • boost/interprocess/detail/win32_api.hpp にあるget_wmi_class_attribute呼び出しでクラッシュする問題を修正 (#5306)
  • interprocessの、boost/interprocess/managed_windows_shared_memory.hppなどのヘッダをインクルードすると、多くの警告が無効になる問題を修正 (#5308)
  • メッセージキューのテンポラリディレクトリに関する問題がまだ発生していたので修正。get_wmi_class_attributeが間違った文字列を返していたため、WMIごと利用しないようにした (#5392)
    • 訳註:Windows 7 64 bit と Windows XP SP3 32 bit、Boost1.47でまだ発生した、という報告の後にre-open -> fixの流れがないので警戒する必要があるかも

  • Windowsで名前付きmutexの生成に非常に時間がかかる問題を修正 (#5409)
  • offset_ptrカスタマイズのサポートを追加。また、32-64bitプロセス間で共用可能なカスタム管理セグメントを作成可能にした。
  • Windowsにおける共用memoryは再びファイルシステムと同じ生存期間になった。これはkernel bootstampとWMIを利用して信頼できるタイムスタンプを得ようとすると問題が頻発したため。

Intrusive

  • 基底クラスのメンバフックが動作しない問題を修正 (#4797)
  • ドキュメントのエラーを修正 (#5165)
  • safe_linkモード時にintrusive::tree_algorithms::replace_nodeが失敗する問題を修正 (#5183)
  • unordered_setiterator_to()const付きの引数を渡すとコンパイルできない問題を修正 (#5191)

Lexical Cast

  • どのプラットフォームにおいてもInfNaNが正しく処理されるようにコードを追加した (#5689)
  • Quickbookドキュメントの更新 (#5723)
  • 多くのSourceTarget型の組みあわせにおいて、パフォーマンスの最適化ならびに省メモリ化がなされるようにした
  • Cロケールにおけるパフォーマンス最適化

Math

  • cyclic Bessel I, J, K, Y 関数に新シリーズの評価メソッドを追加した。またこれら関数のオーバーフロー/アンダーフロー問題が発生しないように修正した。cyl_bessel_j関数が小さい数を入力した場合にNaNを返す問題を修正した (#5560)
  • Thomas Mangにいただいたベイズ統計の逆カイ二乗分散の例を追加した。
  • global facetを使わずに、C99のnonfiniteを扱うことができる改善版lexical_castを用いたテストを追加
  • 一様分布における累積分布関数の補数値に範囲外の値を設定した場合の誤りを修正 (#5733)
  • OpenBSD環境下でlong doubleサポートを有効にした (issue #6014)
  • 他の実装と同じように振る舞うように、nextafter関数と関連する関数を変更した。これにより、nextafter(+INF, 0) は有限数(finite)となる (issue #5832)
  • Boost.Tr1と同時に利用するときに発生する問題を修正するために、tupleのインクルード元を変更した (issue #5934)
  • 両端とも0のrangeが設定された場合のeps_toleranceクラスの振る舞いが正しくなるように修正した (issue #6001)
  • prime.hppにインクルードガードがなかったため追加 (issue #5927)
  • constants.hppにある使っていない/アンドキュメントな定数を削除 (issue #5982)
  • nonfinite_num_facets.hpp中でstd::プレフィクス一部欠けている問題を修正 (issue #5914)
  • Crayコンパイラ互換にするためのパッチを適用

Meta State Machine

  • eUMLにおいて、event再処理を容易にする機能(process(event_)reprocess())を追加
  • 内部遷移テーブルを書きなおした。いくつかのバグ(サブ-サブマシンの内部遷移テーブルの再帰が失敗する)や、不足していた機能(メインステートマシンの内部遷移テーブルが使われていない問題)があったため。

バグ修正

  • favor_compile_timeポリシーをBoost 1.46の状態に戻した
  • none eventは他のいかなるeventからでも変換可能にした
  • eUMLとexit疑似状態
  • Flag_ANDが機能していない問題を修正
  • あるeventとそのbase eventが遷移テーブルにあるサブマシンで同じeventが複数回処理されてしまう稀なバグを修正
  • gccで未使用変数の警告が出る問題を修正

破壊的変更

  • 新規内部遷移テーブル機能にはマイナーな破壊的変更がある。サブマシンにおいて、internal_transition_tableで利用されるguard/actionのためのFsmテンプレートパラメータは、上位のステートマシンではなくサブマシンに変更される。 上位のステートマシンの internal row 記法を使って表現されている内部遷移の振る舞いは変更されない。(Fsmパラメータは上位のステートマシンである)。 要するに、内部遷移Fsmパラメータはこの遷移を含む最も近いステートマシンとなる。

Numeric Conversion

Proto

  • 破壊的変更:コンパイラサポートの右辺値参照を使用してオーバーロード数を減少させた。この変更により、Proto式に対する加算演算子のオーバーロードが曖昧になる。これの解決策は、あいまいと言われるProtoの演算子を、ユーザー定義の演算子によって、無効化にするgrammarを使用することである。
  • Protoのタグ型を、ADLブロックされた名前空間へ移動。
  • proto::switch_に、ディスパッチ用の第2テンプレートパラメータを追加。
  • BOOST_PROTO_EXTENDSBOOST_PROTO_BASIC_EXTENDSを指定することによって、依存するドメインを許可。

Regex

バグ修正

  • キャラクタクラスの直後に配置された大文字と小文字を区別しない修飾子が機能していない問題を修正 (#698)
  • cregex.cpp, fileiter.cpp, posix_api.cpp に書式文字列攻撃の対象になるsprintfが使われている問題を修正 (#5835)
  • 省略符号(…)でnon-POD型のboost::match_resultsを実引数として渡すとコンパイルエラーになる問題を修正 (#5958)
  • regexのソースファイルを併合すると、c_regex_typeの多重定義でコンパイルできない問題を修正 (#5736)

Spirit

Spirit V2.5.1

V2.5(Boost 1.47.0)からの変更点

  • spirit::istream_iterator (multi_passを参照)が、構築時にストリームのeofをチェックするようにした。
  • optional属性に埋め込まれたoptional属性を適切に折りたたむようにした(例えば -('(' > -int_ >> ')') )。これは、optional<optional<int>>optional<int>に折りたたまれることを意味する。問題を報告してくれたPeter Schuellerに感謝する。
  • バイナリパーサーがアクションを正しく伝播するよう修正した。問題を報告してくれたMathias Bornに感謝する。

Lexのバグ修正

  • lexertltoken_value_typeが、constな未使用変数を返していたところを、非const参照な変数を返すようにした(#5701)。
  • lexer (position_token)で、有効なパーサーのデバッグで発生する問題を修正(MSVC2010)

Type Traits

  • 演算子サポートを追加
メタ関数 持っているかを判定する演算子
has_bit_and a & b
has_bit_and_assign a &= b
has_bit_or a | b
has_bit_ot_assign a |= b
has_bit_xor a ^ b
has_bit_xor_assign a ^= b
has_complement ~a
has_dereference *a
has_divide a / b
has_divide_assign a /= b
has_equal_to a == b
has_greater a > b
has_greater_equal a >= b
has_left_shift a << b
has_left_shift_assign a <<= b
has_less a < b
has_less_equal a <= b
has_logical_and a && b
has_logical_not !a
has_logical_or a || b
has_minus a - b
has_minus_assign a -= b
has_modulus a % b
has_modulus_assign a %= b
has_multiples a * b
has_multiples_assign a *= b
has_negate -a
has_new_operator new a
new (std::nothrow) a
new a[n]
new (std::nothrow) a[n]
new (allocate_area) a[b]
has_not_equal_to a != b
has_nothrow_assign a = b
throw() or noexcept
has_nothrow_constructor
has_nothrow_default_constructor
A a A()
throw() or noexcept
has_nothrow_copy
has_nothrow_copy_constructor
A a(a_type_value)
A a = a_type_value
throw() or noexcept
has_plus a + b
has_plus_assign a += b
has_post_decrement a--
has_post_increment a++
has_pre_decrement --a
has_pre_increment ++a
has_right_shift a >> b
has_right_shift_assign a >>= b
has_trivial_assign a = b
※ 暗黙定義される=演算子
has_trivial_constructor
has_trivial_default_constructor
A a A()
※暗黙定義されるデフォルトコンストラクタ
has_trivial_copy
has_trivial_copy_constructor
A a(a_type_value) A a = a_type_value
※暗黙定義されるコピーコンストラクタ
has_trivial_destructor ~a()
delete a
※暗黙定義されるデストラクタ
has_unary_minus -a
has_unary_plus +a
has_virtual_destructor ~a()
delete a
※仮想デストラクタ

Unordered

  • 標準 C++ 11 のサポートを改善 - emplaceequalityに破壊的変更あり。
  • ムーブセマンティクスの実装にBoost.Moveを使用。
  • 全ての詳細はchange logを見よ。

Change Log (Boost 1.48.0 - Major Update)

  • メジャーな変更として、Boost.Moveによるムーブのエミュレーションを使用するようになり、また、より標準C++11に対応しました。 詳細はcompliance sectionを御覧ください。
  • このライブラリのコンテナはC++11の計算量要件を満たすようになりました。ただ、使用に当たっては、わずかだけ多くメモリを使用することになります。
  • これによりquick_eraseerase_return_voidは必要なくなるため、これらは将来のバージョンで取り除かれるでしょう。

C++11サポートはいくつかの破壊的変更をもたらしました。

  • Equality comparisonはC++11の仕様に合わせて変更されました。equivalentなキーを持つコンテナについて、同じ(equal)キーに属する要素はこれまで、considered equalでなければならなかったため、同じ順序で整列している必要がありました。現在は、それら要素たちの順列組み合わせでも良いことになりました。これまでの振る舞いで使用するには、BOOST_UNORDERED_DEPRECATED_EQUALITYマクロを定義します。(訳註:不安なので間違ってたら訂正お願いします)
  • swapされる2つのコンテナが同じでないallocatorを持つ場合の挙動が異なります。これまでは、allocatorを借用して新しいノードをallocateしていました。これからは、もしallocatorが、propagate_on_container_swap::valuetrueであるようなpropergate_on_containe_swap構造体をメンバに持っている場合、allocatorswapするようになりました。(訳註:不安なので間違ってたらry)
  • Allocatorconstruct関数、destruct関数は、allocatorpointer typeではなく、生ポインタと共に呼び出されます。
  • emplaceは初期のC++0x draftで登場したvariadic pair constructorをemulateしていましたが、それは取り除かれたので、emulateしないようになりました。そして、新たなpiecewise_construct_ pair constructをemulateするようになりました(あなたがboost::piecewise_constructの使用を必要としたときに限って)。これまでのvariadic constructorのemulationを使用する場合は、BOOST_UNORDERED_DEPRECATED_PAIR_CONSTRUCTを定義します。

Wave

V.2.3.1

  • support_option_emit_contnewlines フラグの追加。このオプションは、Wave libraryがバックスラッシュ+改行をemitするかどうか制御する。デフォルト今までと同じ(無視して、そこから後ろは適当に処理する)※SLexモジュールのみがサポートしている
  • #5887 の修正:flex_string.hpp needs to include <ios>

テスト済みコンパイラ

主要なテストコンパイラ:

  • Linux:
    • LLVM Clang 2.8
    • GCC: 3.4.6, 4.2.4, 4.3.4, 4.4.3, 4.5.1, 4.5.2, 4.6
    • GCC, C++0x mode: 4.3.4, 4.4.3, 4.5.2
    • Intel 11.1
  • OS X:
    • Intel 11.1
    • GCC: 4.2.1, 4.4.4
    • GCC, C++0x mode: 4.4.4
  • Windows:
    • Visual C++ 8.0, 9.0, 10.0
    • GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.1
  • FreeBSD:
    • GCC 4.2.1, 32 and 64 bit.
  • QNX:
    • QCC 4.4.2
    • QCC, C++0x mode: 4.4.2, 4.6.1

追加のテストコンパイラ:

  • Linux:
    • Clang from subversion, with libc++ and GNU libstdc++
    • LLVM Clang 2.8 x
    • GCC: 3.4.6, 4.2.4, 4.3.4, 4.4.4, 4.5.2, 4.5.4, 4.6.1, 4.6.2
    • GCC, C++0x mode: 4.3.4, 4.4.3, 4.4.4, 4.5.2
    • pgCC: 11.2 x
    • Intel: 10.1, 11.1, 12.0
    • PathScale: 4.0.8
    • Visual Age 10.1
  • OS X:
    • Clang from subversion, with libc++ and GNU libstdc++.
    • Intel 11.1.
    • GCC: 4.2.1, 4.4.4.
    • GCC, C++0x mode: 4.4.4.
  • Windows:
    • Visual C++ 8.0, 9.0, 10.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.2, 4.5.4, 4.6.1
    • GCC, C++0x mode, mingw: 4.5.2
    • GCC, mingw 64-bit: 4.7.0
  • AIX:
    • IBM XL C/C++ Enterprise Edition, V11.1.0.0
  • FreeBSD:
    • GCC 4.2.1, 32 and 64 bit.
    • Solaris:
    • Sun 5.10

翻訳

Akira Takahashi, digitalghost, hotwatermorning, zak, Takatoshi Kondo