本家リリースノート:
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(+)
- Asio
- Chrono
- Config
- Fusion
- Geometry
- Graph
- Interprocess
- Intrusive
- Lexical Cast
- Math
- Meta State Machine
- Numeric Conversion
- Proto
- Regex
- Spirit
- Type Traits
- Unordered
- Wave
(+)が付いているものは本家のリリースノートには記載されていない変更。
更新ツール
Accumulators(+)
accumulator_set
の要素型がstd::numeric_limits
で特殊化されていない場合、min
の結果が不正な値になっていた。std::numeric_limits
の特殊化をコンパイル時にチェックするよう修正(#5491)。
Asio
- 様々なパフォーマンス向上を実装:
- スレッドローカルな操作のキューを使用することにより、シングルスレッドで使う際(つまり
concurrency_hint
が1
のとき)のロック/アンロックのペアを排除。 - いくつかの
epoll_reactor
で、投機的(speculative)な操作についてロックを保持することなく実行できるようにした。 epoll_reactor
のI/O操作をハンドラを実行する前に行うことにより、参照の局所性を向上。また、CPU間のスケーラビリティが向上。- 非同期の読み書き操作を、配列(
boost::array
orstd::array
)で特殊化。
- スレッドローカルな操作のキューを使用することにより、シングルスレッドで使う際(つまり
async_read_until
のregex
オーバーロードのコンパイルエラーを修正(#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に合わせて、
duration
とtime_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の座標系が登録されていなかった。
解決したチケット
- セグメントの
intersection
がfirst
/second
という名前のメンバを想定している(#5726) - Fusionアダプトのサンプルで、座標系の登録が間違っている(#5744)
- ドキュメント用のコードに、
#include <boost/foreach.hpp>
が必要(#5748) distance_pythagoras
がsqrt()
を行なっていない(#5954)
アルゴリズムの改善
- 自己交差点の計算を自動では行わないようにした。これはパフォーマンスを爆発的に向上させる。
- その他に、自己交差点の計算を高速化。
intersection
が、重複するポイントの出力を避けるようにした。したがって、これは最小限の集合を出力する。
追加アルゴリズム
covered_by
:within
は「境界線上ではない内側」だが、covered_by
は「境界線上もしくは内側」
追加機能
within
:strategy
でwithin<point, box>
とwithin<box, box>
が可能になったconvert
: より広い範囲の変換をサポートassign
: 同上。引数の順番は逆だが、convert
の別名。
座標型の追加
- Boost.Rationalをサポート
Graph
バグ修正
- libboost_graph_parallel shared library内で
exit()
を使用していたのを削除(#5185)。 write_graphml
がkey
を無視していたのを修正(#5506)。- MSVCで、
max
マクロの問題でcsr_graph
がコンパイルエラーになっていたのを修正(#5813)。 named_graph
のremoving_vertex
で、vertex
を直接削除していたのを、vertex nameを削除するよう修正(#5919)。- Tracにないその他いくつかのバグを修正。
reverse_graph
のedge_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_memory
をopen_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_set
のiterator_to()
にconst
付きの引数を渡すとコンパイルできない問題を修正 (#5191)
Lexical Cast
- どのプラットフォームにおいても
Inf
とNaN
が正しく処理されるようにコードを追加した (#5689) - Quickbookドキュメントの更新 (#5723)
- 多くの
Source
とTarget
型の組みあわせにおいて、パフォーマンスの最適化ならびに省メモリ化がなされるようにした 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_EXTENDS
とBOOST_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のバグ修正
lexertl
のtoken_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 のサポートを改善 -
emplace
とequality
に破壊的変更あり。 - ムーブセマンティクスの実装にBoost.Moveを使用。
- 全ての詳細はchange logを見よ。
Change Log (Boost 1.48.0 - Major Update)
- メジャーな変更として、Boost.Moveによるムーブのエミュレーションを使用するようになり、また、より標準C++11に対応しました。 詳細はcompliance sectionを御覧ください。
- このライブラリのコンテナはC++11の計算量要件を満たすようになりました。ただ、使用に当たっては、わずかだけ多くメモリを使用することになります。
- これにより
quick_erase
とerase_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::value
がtrue
であるようなpropergate_on_containe_swap
構造体をメンバに持っている場合、allocator
をswap
するようになりました。(訳註:不安なので間違ってたらry)Allocator
のconstruct
関数、destruct
関数は、allocator
のpointer 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