最終更新日時:
が更新

履歴 編集

Boost 1.57.0リリースノート

本家リリースノート:

リポジトリは以下:

リポジトリからのビルド方法は、egtraさんのブログを参照:

更新ライブラリ

Any

  • RTTIは必須ではなくなった(RTTIのエミュレートにはType Indexが使用される)。
  • #8958を修正。
    • 訳者註:cv修飾子を無視したany_castが可能になっており、未定義動作を引き起こす原因となっていた。

Asio

  • FreeBSDで動作するkqueueリアクタを修正。#10606
  • Mac OS上でシリアルポートを読む際に、kqueueリアクタがビジーループに陥るのを修正。#10496
  • 読み込み専用ファイル記述子を使用した場合のkqueueリアクタの問題を修正。#10367
  • /dev/pollリアクタを使用した場合のコンパイルエラーを修正。#10572
  • Windowsバックエンドにおいて、非推奨のWSASocketAWSASocketWに置き換えた。#10534
  • Visual C++ 2013でのいくつかの警告を修正。#10376
  • WinRT環境におけるバイトオーダー変換関数の整数型を修正。#10539
  • use_futurespawn()asio.hppをインクルードしただけでは利用できない為、ドキュメントを修正。#10567
  • asio::strandは非推奨となった。代わりにasio::io_service::strandを使用すること。

Circular Buffer

  • Boost.Moveのmove_if_noexceptを使用した際のいくつかの警告を修正。 #7888

Config

  • BOOST_HAS_PRAGMA_DETECT_MISMATCHマクロを新規追加。
    • コンパイラが#pragma detect_mismatch("name", "value")をサポートするかを調べられる。

Container

  • initializer_listのサポートを追加。Robert Matusewiczによる貢献。
  • 後方に拡大可能なアロケータを使用する場合のvectorにおいて、二重破棄の問題を修正
  • バグ修正
    • Trac #10263 AIX 6.1環境において、sched_yield()関数がスコープ外になっていた問題を修正
    • GitHub #16 不完全型コンテナのイテレータを修正。Mikael Perssonに感謝。

Coroutine

  • スタック用に確保した領域がスタック用であるとValgrindへ登録することができるようになった。
    • 訳者註:
      • 通常Valgrindはコンテキストスイッチが発生したことを知ることができず、スイッチ後にスタックトレースを出力するとSegfaultを起こすが、これを回避することができるようになる。
      • 通常この機能は無効化してビルドされる。有効にするにはビルド時にBoost.Buildへ<valgrind>onを渡す必要がある(コマンドラインではvalgrind=on)が、生成物利用する際にはABI互換性に注意する必要がある。
  • MSVCにおいて、asymmetric_coroutine.hppで定義されているシンボルが重複するためリンクエラーになる問題を修正。 #10386
  • begin(...pull_coroutine< R > & c) の呼び出しが曖昧になる問題を修正。 #10536

Flyweight

  • Boost.Serializationによるシリアライズのサポートを追加。
  • 1.56にてflyweightのデフォルトコンストラクタはexplicit指定されたが、いくつかの初期化方法で問題が見つかった。そのため以前のexplicit指定されないコンストラクタを復帰させた。 #10439

Geometry

改善

  • rtreeのメンバ関数insert()remove()count()のパラメータとして、value_typeに変換可能な型をサポート。

解決したチケット

  • #8402, #10668 暗黙変換の警告
  • #9354 非デカルト座標系(non-cartesian coordinate systems)におけるwinding strategyのwithin()covered_by()のバグ
  • #10177 インクルード漏れ
  • #10345 いくつかの座標系型でdistance()のコンパイルに失敗する
  • #10398 回転の計算で、バッファの近接チェックが間違っている
  • #10421 spherical CSのpoint-box間のdistance()が不正
  • #10615 rtreeのコンストラクタに対する機能リクエスト
  • #10643 大きな座標でのpoint_on_surface()の結果が不正

バグ修正

  • いくつかの、アルゴリズムのバッファのバグを修正
  • CCW Polygon (extreme_points())に対するpoint_on_surface()のバグと数値的な問題を修正(Matt Amosに感謝)
  • point_on_surface()point_on_border()の交換によるA/Aのdisjoint()のバグを修正(Matt Amosに感謝)
  • convex_hull()が結果として重複したpointを返す問題を修正。非常に少ないpoint(1〜2)を入力として与えると発生する。
  • 大きな座標でのcentroid()が不正確であった問題について、pointの変換を修正(#10643のチケットに関連)
  • for_each_segment()が、開いているGeometryの最後のsegmentを考慮していない問題を修正

Interprocess

  • unique_ptrは削除された。現在boost::interprocess::unique_ptrBoost.Moveから提供される一般化されたboost::movelib::unique_ptrを指す。
    • この実装は標準のstd::unique_ptrに近く、またよくメンテナンスされている。
  • バグ修正
    • #10262 AIX 6.1における変数hzのバグを修正。
    • #10229 interprocess\detail\os_file_functions.hpp内でのコンパイルエラーを修正。
    • #10506 create_or_open_file内での無限ループを修正。
    • pull request 11 BOOST_USE_WINDOWS_Hが定義されている際のコンパイルエラーを修正。
  • リファレンスを改善するためにDoxygenのマーカを整理。

Intrusive

  • 実験的なノードチェッカを追加(Matei Davidからのコントリビュート、ありがとう!)。
  • C++14のNull Forward Iteratorsを実装。
  • バグ修正
    • pull request 12 MSVC14の警告を修正(C4456: declaration of 'x_parent_right' hides previous local declaration)。
    • #10520 intrusive/detail/utilities.hppでの暗黙の型変換による警告を修正。
    • #10469 optimize_multikeyを使用したunordered_multisetから削除する際に無限ループに陥るのを修正。

Iterator

  • ほとんどのコンポーネントを、boost::iterators名前空間に移動した。後方互換性のため、従来のboost名前空間でもアクセスできる。
  • イテレータの演算子が、条件付きでイテレータのカテゴリを元に定義するようにした。
  • ライブラリの内部コンポーネントを一部をpublicにした(たとえばminimum_category)。

Lexical-Cast

  • いくつかの内部的な変更を行った。これまでは一つのヘッダファイルでライブラリを構成していたが、複数のヘッダファイルに分割した。#10391, #10173

Math

  • 超指数分布を追加。
  • 不完全なガンマ関数によるいくつかのオーバーフローを修正(Rocco Romeoに感謝)。
  • a = b = 0.5の時の不完全なベータ関数の導関数によるバグを修正。
    • これはいくつかの非心分布へも影響を与える。#10480を参照せよ。
  • round()関数のいくつかのコーナーケースを修正。
  • 標準ライブラリのサポートが不完全な場合、cstdfloat.hppによる80bit浮動小数点型のサポートを行わない。
    • 訳者註:FreeBSD等、いくつかの環境ではlong double型へのサポートが不完全であり、まともな精度を期待できないためである。

Move

  • スマートポインタであるunique_ptrを実装(素晴らしい実装とテストをくれたHoward Hinnantに感謝)。
  • move_if_noexceptを追加(Antony Polukhinに感謝)。
  • バグ修正
    • #9785 boost/move/core.hppでのIntel ICCの警告を修正。
    • #10460 緩い例外指定によるコンパイルエラーを修正。
    • pull request 3 右辺値参照が利用できない場合、コピーコンストラクタを消去しないように変更。

Multi-Array

  • Clangにおいてfriend宣言で警告が出るのを修正(Marcel Raadからのコントリビュート)。

Multiprecision

  • 有理数から浮動小数点数への変換の際に、近い方へ丸め込む様に変更。
  • 浮動小数点数から有理数への変換を改善。
  • cpp_bin_floatの指数関数で稀に発生するバグを修正。
  • 多くの些細なドキュメントの問題を修正。

Multi-Index

  • std::tupleが利用可能なとき、複合キーの検索に使用することが可能になった。

Preprocessor

  • is_begin_parensremove_parensを追加。
  • 配列と同等の機能をタプルに追加。
  • 空のタプルデータに関するVC++の問題を修正。
  • is_emptyの内部実装を、可変引数マクロが使用可能な場合に、より優れた実装としてそれによる実装に切り替えるようにした。
  • 可変引数マクロのサポートを、GCCと同様になるようClangの方を更新。
  • 新たな機能についてのドキュメントを追加。

Thread

新機能

  • Synchro: コンパイラがサポートする場合、汎用ロックアルゴリズムで可変長テンプレートを使用する。 #6227
  • Synchro: 並行キューにviewを追加。 #10298
  • Async: generic_executor_refを追加。 #10300
  • make_valid_futureを追加。 #10552

バグ修正

  • MSVCにおいて、call_onceが正しくない組み込み関数を使っていたのを修正。 #6782
  • システム時刻が巻き戻った場合に、boost::thread::sleep()がハングしていたのを修正。 #6787
  • スレッド中でthis_thread::sleep_forが_steady_になっていなかったのを修正。 #7665
  • future::fallback_toがassertで落ちる問題を修正。 #9307
  • future::asyncがlambdaの呼び出しで例外を投げて終了するのを修正。 #9308
  • test_4648_libが失敗するのを修正。 #9310
  • promisefutureが値の格納に指定されたアロケータを使用していなかったのを修正。 #9425
  • futureの単体テストがget()/pthread_cond_wait()でハングするのを修正。 #9558
  • [windows] basic_timed_mutex::try_lock_until及びcondition_variable::wait_untilに短い期間を渡すと無限に(若しくは無限に近いぐらい)待ち続けるのを修正。 #9787
  • [windows] システム時刻が1970年以前の場合にboost::condition_variable.timed_wait()が例外を送出していたのを修正。 #9880
  • GCC 4.4のバグを回避。 #10159
  • thread_specific_ptrでのvoid *をサポート。 #10196
  • _Boost.Thread 1.56 RC1_が_MinGW_でコンパイル出来ないのを修正。 #10296
  • _Boost.Thread 1.56 RC1_が_armhf_でビルドするとハングする。 #10297
    • 訳者註:このバグはClang 3.4固有のものであり、Boost.Threadは何も変更されない。
  • boost::promise<T>::set_value(const T&)のオーバーロードがC++03モードで正しく提供されていないのを修正。 #10340
  • when_all/when_anyのドキュメントがないのを修正。 #10425
  • when_allに_deferred_なfutureを渡すと直ちに制御が戻ってきてしまうのを修正。 #10426
  • when_anyに_deferred_なfuture若しくは_ready_状態にあるfutureを渡した際に、他の_deferred_なfutureを実行していなかったのを修正。 #10427
  • Boost.Moveが提供するunique_ptrを使用するように変更。 #10428
  • 未実装だったwhen_all/when_anytupleを返す場合を実装。 #10465
  • BOOST_THREAD_MOVABLE_ONLY<T>なクラスがis_copy_constructible<T>::value == falseを満たさないのを修正。 #10476
  • boost/thread/future.hppのデータレースを修正。 #10478
  • pthread/condition_variable_anyのコンストラクタがpthread_cond_initのエラーコードで間違った値を返していたのを修正。 #10529
  • shared_future<R>::thenをconstにした。 #10563

Type-Index

  • ODR違反の検出にBOOST_HAS_PRAGMA_DETECT_MISMATCHを使用するようになった。#10404
  • typoの修正。#10294

Type-Traits

  • 新しいトレイトとしてis_copy_assignable及びis_finalを追加。

Units

  • 新たな単位系を追加。<boost/units/systems/information.hpp>ヘッダに、以下の単位が含まれる:
    • bit
    • byte
    • nat
    • hartley
    • shannon
  • 2進接頭辞の大きさ単位として、以下のIEC接頭辞を追加:
    • kibi
    • mebi
    • gibi
    • tebi
    • pebi
    • zebi
    • yobi
  • MSVC-14での、NaNの出力を修正
  • C++11のnumeric_limits機能であるdigits10lowestをサポート
  • 警告を修正

Unordered

  • iteratorにおけるpointertypedefを修正。 (#10672)
  • Coverityによる警告を修正。 (pull request 2)

Utility

  • 距離を受け取るnext()prior()を再実装した。
    • 距離がunsigned、若しくはどちらも整数であっても正しく動作する。
    • これは第1引数の演算子のサポートの仕方で適切な実装を選択している。

uBLAS

  • 新たに2つの型、matrix_rowmatrix_columnファサードを追加。これは、行列のデータに行の配列、列の配列としてアクセスできるようにするものである。
  • 小さな機能として、固定サイズのコンテナを追加:fixed_vectorfixed_matrix。実装にstd::arrayを使用しているため、C++11が必要。
  • banded_matrixのフォーマットを、標準BLASにマッチするよう修正(#7549)
  • matrixvectorのインタフェースに、C++11のcbegin()cend()crbegin()crend()を追加。
  • ドキュメントの配布を容易にするために、doxygenのドキュメントを削除。
  • MSVCでの未使用パラメータ警告を修正
  • uBLASの開発用フォルダの構成を変更した(ユーザーのライブラリに影響はない)
  • さまざまなコンパイラでの警告、およびコンパイルエラーについて、大規模な修正を行った。いくつかの、古いコンパイラのための警告や非互換を解決するのは難しかったが、uBLASのコンパイルは非常に整理された状態になった。

テスト済みコンパイラ

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

  • Linux:
    • Clang: 3.0, 3.1, 3.2, 3.3, 3.4
    • Clang, C++14: 3.5
    • GCC: 4.4.7, 4.5.3, 4.6.4, 4.7.3, 4.8.1, 4.8.2
    • GCC, C++98: 4.9.1
    • GCC, C++11: 4.4.7, 4.8.2, 4.8.3, 4.9.1
    • GCC, C++14: 4.9.1
    • Intel: 13.1, 14.0
    • Intel, C++11: 13.1, 14.0
    • QCC: 4.4.2
  • OS X:
    • Apple Clang: 6.0
    • Apple Clang, C++11: 6.0
    • Apple Clang, C++14: 6.0
    • GCC: 4.2.1, 4.9.1
    • Intel: 12.0
  • Windows:
    • GCC, mingw: 4.4.0, 4.4.7. 4.5.4, 4.6.3, 4.7.2, 4.7.3, 4.8.0, 4.8.2, 4.9.0
    • Visual C++: 8.0, 9.0, 10.0, 11.0, 12.0
  • FreeBSD:
    • GCC: 4.2.1
  • QNX:
    • QCC: 4.4.2

追加して含まれるテストコンパイラ:

  • Linux:
    • Clang: 3.0, 3.1, 3.2, 3.3, 3.4.2
    • Clang, C++14: 3.5.0, trunk
    • GCC: 4.4.7, 4.6.4, 4.7.3, 4.8.1, 4.8.2, 5.0 (experimental)
    • GCC, C++11: 4.4.7, 4.8.2, 4.8.3, 4.9.1
    • GCC, C++14: 4.9.1
    • Intel: 11.1, 12.1, 13.0, 13.1, 14.0
    • Intel, C++11: 13.1, 14.0
  • OS X:
    • Apple Clang: 6.0
    • Apple Clang, C++11: 6.0
    • Apple Clang, C++14: 6.0
    • Clang: trunk
    • Clang, C++11: trunk
    • GCC: 4.2.1, 4.9.1
    • Intel: 12.0
  • Windows:
    • GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.3, 4.8.0, 4.8.2, 4.9.0
    • Visual C++: 8.0, 9.0, 10.0, 11.0, 12.0
  • FreeBSD:
    • GCC: 4.2.1
  • QNX:
    • QCC: 4.4.2

翻訳

Kohei Takahashi, Akira Takahashi