本家リリースノート:https://github.com/boostorg/website/blob/master/feed/history/boost_1_56_0.qbk
モジュール化
Boostのバージョン管理を、Subversionから、Gitのサブモジュールを使用するシステムに移行した。ディレクトリの構成が、以前と少し異なる。
リポジトリは以下:
リポジトリからのビルド方法は、egtraさんのブログを参照:
新モジュール
以下のモジュールは、既存のコードから抽出されたもの。ヘッダのパスは今までと同じ。
- Assert
- カスタマイズ可能なassertマクロ。Peter Dimovによってメンテナンスされる。
- Core
- 他のライブラリから使用される、最小の依存関係を持つコアユーティリティ。Peter Dimov、Glen Fernandes、Andrey Semashevによってメンテナンスされる。
- Lexical_Cast
- Kevlin Henney氏による、テキストと整数間の汎用的な変換。
- Throw_Exception
- Emil Dotchevski氏による、Boostから例外を送出するための一般的なインフラストラクチャ。
- WinApi
- Boost内部で使用する、
<windows.h>を必要としない宣言。
- Boost内部で使用する、
新ライブラリ
- Align
- Glen Fernandes氏による、メモリアラインメントの関数、アロケータ、アダプタ。
- Type_Index
- Antony Polukhin氏による、実行時とコンパイル時両方で使用できる、コピー可能なtype info。
更新ライブラリ
- Accumulators
- Any
- Asio
- Assign
- Atomic
- Circular Buffer
- Concept Check
- Container
- Context
- Coroutine
- Chrono
- Dynamic Bitset
- Flyweight
- Fusion
- Geometry
- Hash
- Interprocess
- Intrusive
- Lexical Cast
- Log
- Math
- Move
- MPL
- Multi Array
- Multi-Index
- Multiprecision
- Odeint
- Optional
- Preprocessor
- Program Options
- Regex
- Smart Pointers
- Thread
- TTI
- Unordered
- Utility
- UUID
- Predef
- Variant
非推奨ライブラリ
- TR1
Accumulators
- 新たなアキュムレータとして、
rolling_varianceとrolling_momentを追加
Any
Asio
- Boost.Coroutineの新しいインタフェースで
boost::asio::spawn()が動かなかった問題を修正(#9442, #9928) io_serviceのデストラクタによるクリーンナップ処理が走ったとき、boost::asio::spawn()のコルーチンが正しくアンワインド(スタック巻き戻しによるスタック内のデストラクタ呼び出し)されない問題を修正(#9731)io_service::wrap()とstrand::wrap()によって生成されるハンドラのための継続フックの移譲を修正(#9741)- 接続志向IPソケットのために、WindowsのI/O完了ポートバックエンドに、使用可能なら
ConnectEx()関数を使用するようにした。 - 非Windows(および非IOCP Windows)環境において、
io_serviceのインスタンスひとつに付き、ひとつの条件変数を使用するよう変更した。これによって、run_one()が複数スレッドから呼ばれる際の、潜在的な競合状態を解決した。 boost::chronoとstd::chronoのクロックをベースにしてタイムアウト時間を計算する際の整数オーバーフローを修正(#9662, #9778)- kqueueバックエンドの
EV_CLEARハンドリングに、さらに変更を加えた。Mac OS Xのclose()システムコールがハングするケースがあったため。 resolver_query_base::flags::operator~の実装で無限再帰が起こっていたので修正(#9548)- 膨大な数のソケットを使うWindows上で
selectリアクタがより効率的に動作するようにした(#9528) - WindowsのGCCで起きるtype aliasingの問題を修正(#9550)
- アドレスサニタイザーの警告を回避するために、バッファのテストをコンパイル時のみ走らせるようにした(#8295)
- 最近のWindowsバージョンで、
GetQueuedCompletionStatus()のタイムアウトワークアラウンドを無効にした(commit 9d13af4) - リンクローカルなマルチキャストアドレスを使用する際の、文字列ベースのスコープIDをサポートした
- IPv6マルチキャストグループのジョインに、明示的に指定されなければアドレスのスコープIDを使用するよう変更した
- リンクローカルなマルチキャストアドレスのテストがMac OS XとBSD環境で失敗していたので修正
- GCCで無名enumを使用すると発生する問題のワークアラウンドを追加(#10042)
- Windowsの
HANDLEバックエンドを、ERROR_MORE_DATAを無視するよう巻き戻した。代わりに、他のもの(error_codeを使うか、system_error例外の送出)を使ってエラーを伝搬するようにし、転送されたバイト数が返るようにした。部分的なメッセージを処理する必要がある場合は、error_codeのオーバーロードを使用すること(#10034) signal_setの実装に含まれるシグナル番号チェックでの、off-by-oneエラーを修正(#9324)- Crayコンパイラで動くように、SSE2を組み込み関数ではなくインラインアセンブラを使用するようにした
- 最新のVisual C++とWindows SDKで非推奨マークが付いているWinsockの機能を使用停止(commit cc9730e)
- AIXのGCCで単体テストを通すためのワークアラウンドを追加
- 多くのドキュメントの細かい部分を修正(#8295, #9605, #9771)
Assign
- C++11での曖昧さを解決(#3073)
Atomic
- ライブラリを再設計した。内部的なリファクタリングのほか、さまざまなバグの修正、機能テストマクロの不適切な値やオーバーフローハンドリングの割り込みといったことも含む。
memory_order列挙型の値を変更した。列挙型の値はインタフェースの一部ではないが、ユーザーのインタフェースとして使用する場合、ABIが壊れる可能性がある。- MSVCのWindows x64向けに、128ビットのアトミック操作を実装した。ターゲットCPUにcmpxchg16b命令が存在していることを想定している。初期のいくつかのAMD CPUはこの命令をサポートしていない。そのようなターゲットのためには、
BOOST_ATOMIC_NO_CMPXCHG16Bマクロを定義する。 - 実験的に、MSVCのWindows ARMターゲットのサポートを実装した。
- 実験的に、GCCのDEC Alphaターゲットのサポートを実装した。
- GCCのARMv6とそれ以降のサポートを改善した。全てのアトミック操作を、CASベースのループの代わりに、アセンブラブロックで実装した。ARMv7で64ビット操作をサポートした。
BOOST_ATOMIC_FLAG_INITマクロとatomic_flagの初期化の、オプショナルなサポートを実装した(#8158)。constexprデフォルトコンストラクタによる初期化に依存する。以下の記事を参照:- Constant Initialization - 雑貨’s tumblr
- SPARCv9ターゲットのコンパイルを修正した(#9446)。
- PowerPCターゲットのコンパイルを修正した(#9447)。
- x86とx86-64に対するClangでのいくつかの互換性問題を修正した(#9610、#9842)
- WindowsのIA64プラットフォームに特化したコードを削除した。
Circular Buffer
- C++11のアロケータモデルをサポート(#9970)
- 古いコンパイラのサポートを終了
Concept Check
バグ修正
- いくつかの警告を修正(#5012)
Container
新機能
- DLMallocベースの拡張アロケータを追加
- 参照:「Boost.Containerにrealloc相当の機能が入る予定」
boost::container::allocator<T, 2>を使用することで(2はバージョン)、vectorの内部実装にrealloc()相当の機能が使われるようになる。boost::container::node_allocatorを追加。これは、シンプルな分離ストレージのアロケータ。明示的に要求しない限り、システムにメモリを返さない、Boost.Poolと同じようなアプローチをとっている。boost::container::adaptive_poolを追加。これは、node_allocatorが低コストでシステムにメモリを返せるようにするためのもの。- これらの機能を使うには、Boost.Containerのビルドが必要。
- ツリーベースの順序付き連想コンテナのカスタマイズ性を改善した。
(multi)mapおよび(multi)setの実装に、AVL tree、Scapegoat tree、Splay treeを使用できるようにした。
バグ修正
- VS2005でcontainer/memory_util.hppをインクルードしたあとに
swap()を使うとコンパイルエラーになる問題を修正(#9338) vector::resize()のパフォーマンス問題を解決(#9637)stringの構築を最適化(#9648)stable_vectorのイテレータからiterator_rangeを作れない問題を修正(#9801)vector::resize(size, default_init)のドキュメントでvalue initializedされると書かれていたので、default initializedに修正(#9915)- ほとんどのコンテナの代入演算子で、アロケータの伝搬が間違っていたのを修正(#9916)
flat_map::insert(ordered_unique_range_t...)にmove_iteratorを渡せない問題を修正(#9931)vectorの中で、重複メモリ範囲でmemcpy()を行っていた問題を修正(#9955)
Context
- 破壊的変更:
fcontext_t型を、構造体から、void*の別名に変更fcontext_t型に関連するmake_fcontext()関数のシグニチャの一部が、fcontext_t*からfcontext_tに変わる。
- Linux環境において、コンテキストに使用するスタックがexecutable stackではないことを示すマーカーを付けた。これにより、executable stackを作る権限が必要なくなる。(#8826)
- iOSとWindows 8環境において、Boost.Contextの例外を捕捉できない問題を修正(#9437)
- x32 ABIをサポート(#9445)
- powerpc_64leをサポート(#9522)
- powerpc_64 le/beの、エンディアン周りのバグを修正(#9743)
- Mac OS X + clangに対するx86のバグ修正(#9774)
Coroutine
新機能
symmetric_coroutineをサポート。- Boost.Coroutineがサポートするアーキテクチャのリストを、ドキュメントに記載した(#9551)
バグ修正
- 複数スレッドで
pull_coroutineを使用する際に発生する、protected_stack_allocatorでの競合状態を修正(#9355) - POSIX実装のstack_allocator内で
mmapのエラーチェックをしていなかったので修正(#9734) mmap後にmemsetで0を埋める必要はなかったので削除(#9735)- coroutineのイテレータが
const修飾版のoperator==を持っていなかったので追加(#9760) mmap()の戻り値を修正(#10070)protected_stack_allocatorでファイル記述子は必要なかったので修正(#10157)
Chrono
- HP ux上で、
pthread_getcpuclockid()が定義されていないために、コンパイルエラーになる問題を修正(#6918) - Windowsで起動時に
steady_clock::now()を呼ぶと、アサーション失敗になる問題を修正(#8006) chrono::process_cpu_clockのtime pointでの1000の係数が、Linux上で間違っていた問題を修正(#9337)process_cpu_clock::time_pointの出力フォーマットが{real;user;system}の3つになっているはずが、V2ではrealのみが出力されていたので修正(#9342)boost::chrono::floor()/round()に負のdurationを渡した結果が間違っていた問題を修正(#9419)thread_clockがMac OS X向けに定義されていなかった問題を修正(#9698)boost::this_thread::sleep_for()が、Win32上でときどき、すぐに返ってしまう問題を修正(#9720)- gcc-mingwは多くの問題があったため、Boost.Buildから削除された。代わりに
<toolset>gcc,<target-os>windowsを使うよう修正した(#9859) - Solaris上で
timegm()関数が定義されていないためにコンパイルエラーをが起こっていた問題を修正(#9918) std::numeric_limitsの静的メンバ関数がconstexpr実装になっていなかった場合にコンパイルエラーが起こっていた問題を修正(#9811)process_cpu_clocksが32ビット環境でオーバーフローする問題を修正(#10069)- QNX上で
timegm()関数が定義されていないためにコンパイルエラーが起こっていた問題を修正(#10151)
Dynamic Bitset
- ムーブコンストラクタのサポートを追加
- MSVC2013の警告を修正
- C++11の最小アロケータ要件をサポート
noexcept仕様に対応
Flyweight
- 可変引数テンプレートを使用した、
flyweight<T>でT::T()への完全転送をサポートした。(以前まではエミュレーションをしていた) std::initializer_listを受け取るコンストラクタと代入演算子をサポート。元となる型Tのコンストラクタ引数として使用する。- DLLモジュール間の静的初期化で発生する問題を修正(#9553)
- メンテナンス関係の細かい修正
Fusion
- FusionをGPUで使用可能にした
Geometry
新機能
- 新たなアルゴリズム
buffer()を追加。これは、ジオメトリの膨張/収縮(inflating/deflating)を行う。(buffer()アルゴリズム自体は以前からあったが、Boxを大きくするのみだった。) - 新たなアルゴリズム
remove_spikes()を追加。これは、Ring、Polygon、もしくはMulti Polygonからスパイクを削除するアルゴリズム。 - 新たなアルゴリズム
point_on_surface()を追加。このアルゴリズムは、Polygonのサーフェイス(インテリア)上のPointを生成する。 - 新たなアルゴリズム
is_simple()を追加。このアルゴリズムは、ジオメトリがOGC標準に従ってシンプルならtrueを返す。 - 新たなアルゴリズム
is_valid()を追加。このアルゴリズムは、ジオメトリがOGC標準に従って適格ならtrueを返す。 - 新たなアルゴリズム
crosses()を追加。このアルゴリズムは、OGC標準に従って空間的関係をチェックする。 - 集合演算アルゴリズム(
difference(),intersection(),sym_difference(),union_())に対して、入力としてPointと見なせる型の組、および線形ジオメトリをサポートした。 distance()アルゴリズムとcomparable_distance()アルゴリズムを、全てのジオメトリの組み合わせに対応した。- 空間関係のアルゴリズム(
covered_by(),touches(),within(), etc...)に、線形ジオメトリと面積ジオメトリのサポートを追加。 - 様々なアルゴリズムの入力ジオメトリとして、
boost::variantをサポート。 rtreeに、インデックス付きセグメントのサポートを追加。rtreeのnearest()に、述語のサポートを追加。
解決したチケット
- 重なっているポリゴンに対する多くのアルゴリズムの結果がおかしくなる問題を、
disjoint()の実装にpoint_on_surface()を使用することで解決した(#8310) - 自己交差がないポリゴンから自己交差が作られてしまう問題を修正(#9081)
- make_qbk.pyの実行がエラーになってドキュメント生成に失敗する問題を修正(#9245)
(sym_)difference()が成功しない問題を、堅牢な型への再スケーリングによって修正(#9563)- ほぼ水平のSegmentに対してwinding戦略を付けた
within()の実行結果がおかしい問題を修正(#9628) - スパイクのみのポリゴンの、スパイクを削除するようにした(#9871)
- WKTのドキュメントがなかったので追加(#9947)
- LinestringとBoxに対するdifferenceがintersectionを返す問題を修正(#10019)
- boost/geometry/arithmetic.hppのコンセプトチェックがおかしかったので修正(#10077)
バグ修正
intersects(polygon)が自己交差のPointを返していたので修正equals()が、OGC標準の非シンプルなジオメトリに対して不正な結果を返していたので修正touches()が、CCW面積ジオメトリに対して正しく動作していなかったので修正rtreeのnearestクエリが、非デカルト(cartesian)座標系において間違った結果を返していたので修正rtreeにInterprocessのアロケータを使うと、いくつかのケースでクラッシュしていたので修正
Hash
- Visual C++ 6.0向けのワークアラウンドをいくつか削除
hash_combine()の継続的な改善。これは、以前からドキュメント化されていたアルゴリズムの変更。
Interprocess
- バグ修正
- Linux上で
message_queueがデッドロックする問題を修正(#Trac #9221) - いくつかのコンピュータではCommon AppDataのレジストリが空であるため、Interprocessが動かない問題を修正(Trac #9226)
WaitForSingleObject(mutex)を呼び出しているところで、WAIT_ABANDONEDをハンドリングするよう修正(Trac #9284)CreateMutex()を呼び出しているところで、失敗値をwinapi::invalid_handle_value(-1)と比較していたが、実際の失敗値はNULLなので、比較する値を修正(Trac #9285)timed_waitが寿命切れをチェックしていなかったので修正(Trac #9288)- AndroidはXSI共有メモリオブジェクトをサポートしていないので、ワークアラウンドを修正(Trac #9408)
managed_external_bufferオブジェクトの構築でクラッシュする問題を修正(Trac #9729)- Windowsでイベントログが破損しているとbooststampの生成に失敗する問題を修正(Trac #9767)
- Android NDK GCC 4.8でコンパイルに失敗する問題を修正(Trac #9835)
- Windowsで共有フォルダが使用可能でない場合に、
get_tmp_base_dir()が失敗する問題を修正(Trac #9911) init_atomic_func()とfini_atomic_func()での、変数の未初期化警告を修正(Trac #9946)segment_manager::find(unique_instance_t*)がコンパイルに失敗する問題を修正(Trac #10011)- Cray C++ Compilerのサポートを追加(GitHub #2)
- MinGW環境のために、
interprocess_exception例外を送出する部分を修正。エラー内容の取得とthrowを同一行に書くと、GetLastError()がリセットされてしまうため、2行に分離した(GitHub #3)
- Linux上で
- ABI破壊
message_queueに、BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEXオプションを追加した(Trac #9221) try_lock()の(timed_)lockコードをリファクタリングし、統一化した。condition_variableのデストラクタの挙動として、POSIXのセマンティクスを許可。BOOST_INTERPROCESS_SHARED_DIR_PATHオプションを追加。これは、共有メモリオブジェクトの実装としてメモリマップドファイルが使われた場合に、使用する共有ディレクトリの場所を指定するためのもの。- 他のライブラリと同じように、
BOOST_USE_WINDOWS_Hをサポートした。これが定義されている場合、<windows.h>や他のWindows SDKの構造体を使用し、そうでなければ、重いヘッダーの負担を軽減する構造体を定義して使用する。(Trac #10021) windows_shared_memoryにget_size()メンバ関数を追加した(Trac #10021)
Intrusive
- Doxygenによって生成されるリファレンスを改善し、先行宣言のヘッダーを修正、更新した。
- ABI破壊 1.55.0で導入したABIレギュレッションを修正した。主にMSVCコンパイラ周りで。
- 破壊的変更 以前から非推奨としていた機能を削除した。
splayコンテナからxxx_dont_splay()関数を削除splayコンテナからsplay_set_base_hookとsplay_set_member_hookを削除splaytree_algorithmsの関数の追加パラメータ「bool splay = true」を削除
- バグ修正
- Visual Studio 2010/2012で
has_member_function_callable_with_construct_implがコンパイルエラーになっていたので修正(#8468, #9332) list_impl::iterator_to()メンバ関数内で使用するvalue_traitsを、ステートフルにした(#9650)- 最近のSun CC CompilerでIntrusiveのコンパイルができなくなっていたので修正(#9736)
- safe_link(or auto_unlink)を付けたintrusive listが、解放後のメモリを操作していた問題を修正(#9940, #9949)
const_castの使用をやめた(#9948)- デフォルトフックから派生しない場合の、侵入フックのテストを追加(#9961)
- Visual Studio 2010/2012で
- ツリーの再バランスコードの冗長な代入を回避して、最適化した
- 64ビット環境の
suggested_upper_bucket_count()とsuggested_lower_bucket_count()用に、64ビットの素数値を追加(#8468) - 古いSun CC Compilerのworkaroundを削除。
Lexical Cast
try_lexical_convert()関数を追加。この関数は変換失敗時にfalseを返し、出力パラメータの型にDefault Constructibleを要求しない(#6700)- 先頭が0の文字列を
boolに変換する処理を修正(#9659)- Boost 1.47.0まで
boost::lexical_cast<bool>("00")は成功しfalseを返していたが、それ以降でbad_lexical_cast例外を送出していた。
- Boost 1.47.0まで
- より小さなバイナリを生成し、コンパイラの作業をよりシンプルにする変更を行った(#9046)
- このライブラリを、Boost Conversion Libraryから分離した。
- 警告を修正(#8991)
Log
全体的な変更:
- Windowsターゲットにおいて、このライブラリはデフォルトでWindows XP向けにコンパイルするようにした。
recordとrecord_viewの添字演算子にattribute_name引数を追加。basic_formatting_ostreamで、一時オブジェクトを出力できるようにした(#9389)- フォーマット文字列に、名前付きスコープの関数名とソースファイル名を入れられるようにした(#9263)
- named scope formatterに、不完全および空のmarkerのサポートを追加した(#9123)
- 不完全な名前付きスコープリストのデフォルトの出力フォーマットを変更した:末尾のスコープ区切り文字を省略するようにした。
std::regexのサポートを追加。- Boost.Logのデフォルトで、Boost.Regexを内部的な正規表現に使用するようにした。この正規表現バックエンドは、マクロで変更できる。
バグ修正:
- AVX2を有効にしたCPU(たとえばIntelのHaswell)での
dumpマニピュレータを修正 - ロガークラスの
get_attribute()メンバ関数のコンパイルエラーを修正 - 同期/非同期sinkフロントエンドの
locked_backend()関数の実装で発生していたデータ競合を修正 block_on_overflow戦略を使用した非同期sinkのenqueue()メンバ関数での、ロギングスレッドの無限ブロックを修正より詳細な変更は、ChangeLogを参照:
http://www.boost.org/doc/libs/release/libs/log/doc/html/log/changelog.html
Math
- 破壊的変更 メンテナンス用の機能を、libs/math/include_privateディレクトリ以下に移動した。影響を受けるヘッダは以下:
- boost/math/tools/test_data.hpp
- boost/math/tools/remez.hpp
- boost/math/constants/generate.hpp
- boost/math/tools/solve.hpp
- boost/math/tools/test.hpp
- もしこれらの機能を引き続き使いたい場合は、libs/math/include_privateディレクトリへのパスを通せばよい。
- 破壊的変更 分布関数と特殊関数が、overflow errorを吐き出す変わりに、正の無限大の値を返すよう修正し、ドキュメントに挙動を明記した。これまでoverflow errorが発生したときのデフォルトの動作は
std::overflow_error例外の送出だったが、例外を送出するかしないかは、関数ごとに違っていた(#10111)。- 影響がある特殊関数は以下:
gamma_p_inva()gamma_q_inva()ibeta_inva()ibetac_inva()ibeta_invb()ibetac_invb()gamma_p_inv()gamma_q_inv()
- 影響がある分布関数は以下:
pareto_distributionbeta_distributiongeometric_distributionnegative_binomial_distributionbinomial_distributionchi_squared_distributiongamma_distributioninverse_chi_squared_distributioninverse_gamma_distribution
- 影響がある特殊関数は以下:
round()とtrunc()の引数として、整数を受け取れるようにした(#10066)- 0階導関数(zero derivative)をハンドリングするよう、Halleyのイテレーションを修正(#10046)
- geometric distribution (幾何分布)の内部処理で、渡されたポリシーを使っていない箇所があったので修正(#9833)
- negative binomial distribution (負の二項分布)のコーナーケースを修正(#9834)
- Mac OSでのコンパイルエラーを修正
- スターリングの近似を使うために、
tgammaとlgammaの精度を任意に変更できるbernoulli_numbersを追加(Nikhar Agrawal氏作) - ベッセル関数の最初の導関数を追加(Anton Bikineev氏作):
cyl_bessel_j_primecyl_neumann_primecyl_bessel_i_primecyl_bessel_k_primesph_bessel_primesph_neumann_prime
- Studentのt分布のサンプルコードにあったバグを修正。sample meanの透過性テストも一緒に修正。
- より良いルート探索コードに使えるmax_iterパラメータをドキュメントに記載した(#9225)
__float128型の定数を有効/無効にするオプションを追加(#9240)- ベッセルのI0とI1における、負数のハンドリングを整理した(それと、もう使っていないコードを削除した)。(#9512)
tgammaとlgammaに非常に小さい値が渡された場合でもハンドリングできるよう修正した。これらはspuriousオーバーフローを生成しないようになった。(Rocco Romeoに感謝)- 「#9672 Laplace distribution(ラプラス分布)のPDFとCDFがdomain error例外を送出する」ランダムな変量(variate)を無限にした。
rising_factorial、falling_factorial、tgamma_delta_ratioにあったいくつかのコーナーケースを修正した。Rocco Romeoに感謝。- 使っていなかった定数
pow23_four_minus_piを削除
Move
BOOST_MOVE_RETマクロを追加- バグ修正
MPL
boost::mpl::for_eachを、GPUで使用可能にした
Multi Array
operator()がCollectionコンセプトをチェックしているが、実際にはRandomAccessCollectionを要求していた問題を修正(#5664)- Visual C++ 2010デバッグモードでのコンパイルエラーを修正(#4874)
fortran_storage_orderingのサンプルコードが間違っていたので修正(#3581)- コンセプトが
detail名前空間に置かれていたので、detailの外に出した(#4032) - C++標準文書へのリンクが壊れていたので修正(#9212)
- GCCの-Wundefオプションで発生する
BOOST_MULTI_ARRAY_NO_GENERATORS関係の警告を修正(#8368)
Multi-Index
- erase(iterator)のオーバーロードが、次を指すイテレータを返す必要があるためにパフォーマンスが遅かった(#4264を参照)。LWG issue #579の解決策に基いて、ひとつ以上の要素メモリを使用することを犠牲にして、eraseのインタフェースを維持したままこの問題を解決した。実際には、非順序連想コンテナに対する計算量の要件は、hashed indicesで以下のように改善した:
- 与えられた要素の削除を、無条件に定数時間にした
- 最悪ケースの計算量はO(n)ではなく、O(ndist)となる。ndistは、そのインデックスにおける要素数とは同等でない数。
- hashed indiciesの
iteratorとlocal iteratorの内部表現が、新しいデータ構造に依存して変更される。これはシリアライズに影響を与えるため、対応するシリアライズのバージョンが0から1に上がる。hashed indiciesの(local) iteratorを含む古いアーカイブは、1.56.0のBoost.Multi-Indexに読み込める。 - hashed indiciesに
reserveメンバ関数を追加。 - hashed indiciesの等値/非等値のチェックを、C++標準規格の[unord.req]仕様に合わせた。
- Boost.Multi-Indexの
publicインタフェースを、noexceptに対応した。(noexceptが使用可能なコンパイラで) multi_index_containerへの挿入失敗のパフォーマンスを改善した。- MSVC 7.0以前のサポートを目的とした内部コードを削除した。この修正によって、コンパイル時間がわずかに速くなる可能性がある。
- 右辺値を挿入できなかったバグを修正(#9665)
BOOST_BIND_NO_PLACEHOLDERSに対応し、名前空間修飾なしのプレースホルダーを直接使用しないように修正(#9798)- メンテナンス上の細かい修正
Multiprecision
- 浮動小数点数型から
rationalへの変換をimplicitにした(#10082) checked_cpp_rationaltypedefの定義を修正cpp_intの、文字列からの代入でのバグを修正(#9936)- 2進浮動小数点のバックエンドとして、
cpp_bin_floatを追加。 cpp_intの文字列からの代入で発生するバグを修正(#9936)。- 符号がクリアされない。
- MSVCのコンパイラintrinsicをインクルードするよう修正(#9336)
- ドキュメントの誤字を修正(#9432)
gmp_rationalをムーブコピーできるよう修正(#9497)numeric_limitsの値のリストをドキュメントに追加
Odeint
- 適切な代数と操作を自動検出するディスパッチャーを追加
- Eigen、Boost.Multiarray、Boost.MPI、Boost.Compute、Blaze、NT2のサポートを追加
- 代数インタフェースを、algebra.norm_inf関数を使用するよう変更した
- ODEの解をイテレートするためのイテレータを追加。これは、積分(integrate)関数の代わりに使用できる。
- Velocity-Verletメソッドを追加
- 小さなバグ修正
Optional
- 右辺値参照のサポートを追加。
optional<T>が、ムーブ可能でコピー不可なT型を扱えるようになった。 swapを改善した。(ムーブ操作を使うようにした)emplace()メンバ関数を追加。これは #1841 でリクエストされたもの。optionalをムーブ可能にした。std::move_if_noexceptと組み合わせられる、条件付きのnoexcept仕様にした。- 破壊的変更 プラットフォームがサポートしていれば、safe boolイディオムの代わりに
explicit operator bool()を使用するようにした(#4227)。 optionalオブジェクトを誤って不適切にシリアライズしないように、operator<<(ostream&, optional const&)の先行宣言を定義した。- 非推奨なメンバ関数である
reset()の使用を、サンプルコードから削除した(#9005)。 boost::noneとの比較では、TにEqualityComparableを要求しないようにした。optional<T&&>を明確に禁止した。- 破壊的変更
optional<T&>への一時オブジェクトの束縛を、明確に禁止した。 - 包含している値にアクセスする新たな手段として、
value()、value_or()、value_or_eval()メンバ関数を追加。 - ドキュメントを更新し、再編した。チュートリアルとクイックガイドの項を追加。
Preprocessor
- 可変引数マクロを使用する場合のタプル機能を、配列機能と一致するものとして追加した。
Program Options
Regex
basic_regex<>::mark_count()の挙動を、ドキュメントに一致するよう修正した。basic_regex<>::subexpression(n)も同様に、一致するよう修正(#8903)。- ドキュメントの誤字を修正(#9283)
- ロケールによって生成された照合文字列へのnul埋め込みが失敗した場合の、照合コードのバグを修正(#9451)
- Threadライブラリの非推奨なミューテックスを使っていたのを修正(#9461)
- 不正なUTF-8シーケンスの、より良いチェッカーを追加(#9473)
Smart Pointers
make_sharedとallocate_sharedのオーバーロードを更新し、C++言語規格にN3939で提案されている配列型(T[],T[N])に対応した。- C++標準の欠陥レポートLWG #2070に対応し、
make_sharedとallocate_sharedにおけるスカラ型と配列型の実装を修正した。
Thread
実験的な新機能
when_any()関数を追加(#7446)when_all()関数を追加(#7447)async()関数に、スケジューラをとるパラメータを追加(#7448)- 並行キューとして、
sync_queueとsync_bounded_queueを追加(#8274) thread_poolexecutorを追加(#8513)latchクラスを追加(#8518)future/shared_futureのthen()メンバ関数に、スケジューラをとるパラメータを追加(#8516)with_lock_guard()関数を追加(#9058)- 動的なexecutorと、executorアダプタを追加(#9571)
バグ修正
- Windowsの64ビット環境上で、
GetTickCount()関数の代わりに、GetTickCount64()関数を追加(#8070) scoped_threadがmsvc-12.0でコンパイルエラーになる問題を修正(#9333)- intel-linux-14.0.1上で
scoped_threadがコンパイルエラーになる問題を修正(#9341) - msvc-10,11,12上で、
async(Executor, ...)のコンパイルに失敗する問題を修正(#9366) - msvc-10,11,12上で、executorのテストを通した(#9402)
make_futureのテストを通した(#9404)- Synchronizationドキュメントの細かい修正(#9471)
future_waiter::add()がクラッシュする問題を修正(#9535)try_lock_for()に0ミリ秒を指定した場合、Windows上でプログラムが終了しない問題を修正(#9618)threadクラスのデストラクタの説明が不明瞭だったので修正(#9625)threadクラスに、アンドキュメントなpublicメンバ関数start_thread()があったので、privateに移動(#9632)- MinGW上で、
boost::thread::physical_concurrency()関数がコンパイルエラーになる問題を修正(#9673) boost::condition_variable::timed_wait()にBoost.DateTimeの無限時間を指定すると、意図と違ってすぐに目覚めてしまう問題を修正(#9708)future::then()に指定した関数が、2回呼ばれてしまう問題を修正(#9711)- gcc-mingwは多くの問題があったため、Boost.Buildから削除された。代わりに
<toolset>gcc,<target-os>windowsを使うよう修正した(#9867) futureのドキュメントの誤字を修正(#10008)call_once()内でヌルポインタにアクセスする可能性があったのを修正(#10058)call_once()の右辺値参照エミュレーションでの可変引数バージョンがコンパイルエラーになっていた問題を修正(#10125)call_once()の(Function, once_flag&)のオーバーロードを非推奨化(#10126)- AIXのgcc上の
pthread_delay_np()関数はパラメータが異なっているため、コンパイルエラーになっていた問題を修正(#10147) - PowerPC上での
thread::physical_concurrency()が常に0を返していたので、修正(#10155) when_any()とwhen_all()にinlineを付け忘れていて、シンボルの重複定義でリンクエラーになっていた問題を修正(#10184)
TTI
Unordered
- 小さなドキュメントと警告の修正(#9377, #9719)
- 整数のバケットに、常に素数を使用するようにした。連続した整数を挿入するときのパフォーマンスを改善(#9282)
- C++11標準仕様に基づき、アロケータのみを使用してメモリ確保するようにした。
Utility
- いくつかのコンポーネントを、Boost.Coreモジュールに移動した。
empty_deleterを非推奨とした。代わりにBoost.Coreのnull_deleterを使用すること。base_from_memberユーティリティで、左辺値参照のメンバ型をサポートした。(#7577)
UUID
- 基本的なC++11機能のサポートを追加。
- SSE最適化バージョンの関数を実装した。これには、
swapや比較演算子も含まれる。SSE版は、コンパイラによって自動的に有効になるが、明示的に有効/無効を設定できる(#8509)。BOOST_UUID_NO_SIMD、BOOST_UUID_USE_SSE2、BOOST_UUID_USE_SSE3、BOOST_UUID_USE_SSE41のいずれかをdefineする。
- いくつかの警告を黙らせた(#8495, #8697)。
Predef
BOOST_PLAT_*のプラットフォーム定義に、MinGWとWindowsのバリエーションを追加。- Windows 8のモバイルデバイスをターゲットとするWindowsで、ARMアーキテクチャを検出できるようにした。
- 64ビットARMの検出を改善。
- オペレーティング・システムとして、iOSの検出を追加。
- いくつかのプラットフォームでのエンディアン検出を改善。
- プラットフォームとコンパイラを検出するための、エミュレーション機能を追加。
Variant
- 破壊的変更 サポートしているコンパイラでは、可変引数テンプレートを使用するようにした。これによってバイナリが小さくなり、コンパイル速度も改善することを期待できるが、いくつかのケースで既存のメタプログラミングコードを破壊する可能性がある。とくに、
BOOST_VARIANT_ENUM_PARAMSとBOOST_VARIANT_ENUM_SHIFTED_PARAMSが使われなくなったことについて注意が必要だ。可変引数テンプレートを使用する場合、BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATESが無効になる。 polymorphic_get()関数を追加(#9479)- ムーブのみ可能な型をビジターから返せるようにした
variant::swap()を最適化し、move_swap()との曖昧さを修正(#2839)- ムーブ代入演算子、デフォルトコンストラクタ、ムーブコンストラクタに条件付きの
noexceptを追加し、variantをmove_if_noexcept()フレンドリーにした。 -fvisibility=hiddenフラグが設定されていても、例外をモジュール間で見えるようにした。- 古いコンパイラのサポートを終了した。
- 警告を修正(#3020)
<ライブラリ名>
新機能 (必要であれば分類分けをする)
- <追加、変更、削除内容> (#0) (←svn.boost.orgのissuesへのリンク)
-
<追加、変更、削除内容> (r0) (←svn.boost.orgのcommitへのリンク)バグ修正
-
破壊的変更: 赤文字+ボールドではっきりと分かるように
- ABI変更: これも赤文字で
- [訳注] 本家ノートの記述が不十分であると考えるときは、適宜注釈を入れる
- 参照: 必要であれば外部の文献へのリンクを挿入する
テスト済みコンパイラ
主要なテストコンパイラ:
- Linux:
- Clang: 3.4, 3.3, 3.2, 3.1, 3.0
- Clang, C++98: 3.3.16
- Clang, C++11, libc++: 3.4.2
- Clang, C++1y: 3.3.16
- GCC: 4.8.2, 4.8.1, 4.7.3, 4.6.4, 4.4.7
- GCC, C++98: 4.9.0
- GCC, C++11: 4.8.2
- GCC, C++1y: 4.9.0
- Intel: 13.1
- OS X:
- Apple Clang: 5.1
- Apple Clang, C++11: 5.1
- GCC: 4.2.1
- Intel: 12.0
- Windows:
- GCC, mingw: 4.9.0, 4.8.2, 4.7.3, 4.7.2, 4.6.3, 4.5.4, 4.4.7
- Visual C++: 12.0, 11.0, 10.0, 9.0
- FreeBSD:
- GCC: 4.2.1
- QNX:
- QCC: 4.4.2
追加して含まれるテストコンパイラ:
- Linux:
- Clang: 3.4, 3.3, 3.2, 3.1, 3.0
- Clang, C++98: 3.3.16
- Clang, C++11, libc++: 3.4.2
- Clang, C++1y: 3.3.16
- Clang, C++14, libc++: trunk
- GCC: 4.8.2, 4.8.1, 4.7.3, 4.6.4, 4.4.7
- GCC, C++98: 4.9.0
- GCC, C++11: 4.9.0, 4.8.2
- GCC, C++1y: 4.9.0
- Intel: 13.1, 13.0, 12.1, 11.1
- OS X:
- Apple Clang: 5.1
- Apple Clang, C++11:
- Clang: trunk
- Clang, C++11: trunk
- GCC: 4.2.1
- Intel: 12.0
- Windows:
- GCC, mingw: 4.9.0, 4.8.2, 4.7.2, 4.6.3, 4.5.4, 4.4.7
- Visual C++: 12.0, 11.0, 10.0, 9.0
- FreeBSD:
- GCC: 4.2.1
- QNX:
- QCC, ARM: 4.4.2
- QCC, x86: 4.4.2
翻訳
Akira Takahashi