最終更新日時:
が更新

履歴 編集

Boost 1.72.0リリースノート

本家リリースノート:

リポジトリは以下:

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

新ライブラリ

更新ライブラリ

Atomic

  • libstdc++のいくつかのバージョンで__float128が浮動小数点数型とみなされない問題へのワークアラウンドを追加
  • clang-winコンパイラとの互換性を改善

Beast

  • 今回は、バグ修正と、Boost.Asioの新機能対応を含むメンテナンスアップデートである
  • このライブラリを使用しているユーザーもしくはユーザー企業がどのようにこのライブラリを使用しているか教えてほしい。以下にリストがある:
  • 修正内容
    • https_getのサンプルコードで、Host Headerを送信するようにした
    • async_readがタイムアウトしたときのasync_closeのエラーコードを修正
    • zlibのテストをリファクタし、enumのtypoを修正

CircularBuffer

  • GitHub #29 max_size()メンバ関数がアロケータのmax_size()を考慮するよう修正 (Glen Fernandes氏)

Context

  • s390xアーキテクチャをサポート
  • 破壊的変更 execution_contextを削除

Endian

  • endian_reverseconditional_reverse、および\*\_to_*をGCCとClang向けにconstexprにした
  • 便利な読み込み関数 (load) と書き込み関数 (store) を追加
    • [load|store]_[big|little]_[s|u][16|24|32|40|48|56|64]
  • 便利な浮動小数点数型の別名を追加
    • [big|little|native]_float[32|64]_[t|at]
  • constdata()メンバ関数を追加し、戻り値型をunsigned char*に変更
  • 利用可能な場合にendian_reverse__int128のサポートを追加
  • 便利なヘッダboost/endian.hppを追加

Filesystem

  • ヘッダファイルを整理
    • filesystem_errorexception.hppに抽出
    • file_statusと関連する列挙型と関数をfile_status.hppに抽出
    • directory_entrydirectory_iteratorrecursive_directory_iteratordirectory.hppに抽出
  • 非推奨化 後方互換性のためにoperations.hppでは、新たなヘッダexception.hppfile_status.hppdirectory.hppを、BOOST_FILESYSTEM_NO_DEPRECATEDがdefineされない限りインクルードする。これらの暗黙的なインクルードは非推奨とし、将来のリリースから削除される。ユーザーは、新たなヘッダを直接インクルードするか、filesystem.hppをインクルードすることを推奨する
  • filesystem_error例外が、コンパイル済みBoost.Filesystemライブラリに実装されるようになった。ユーザーは、プロジェクトにBoost.Filesystemライブラリをリンクする必要がある場合がある
  • GitHub #115 POSIX.1-2008プラットフォームでは、utimeの代わりにutimensatを使用するようにした。utimeはPOSIX.1-2008で廃止されており、たとえばuClibc-ngでは無効にできる
  • 終端状態のdirectory_iteratorでメモリ確保エラーが起こらないようにした
  • Windows環境で、Boost.WinAPIを使用してWindowsバージョンを選択できるようにした
  • 新機能 directory_options列挙型を追加した。これはC++20の名前付き列挙型を反映している。この列挙型を使用することで、directory_iteratorrecursive_directory_iteratorのイテレーション時の振る舞いをカスタマイズできる。とくに、権限が不十分で開くことのできないディレクトリのスキップをサポートするようになった。symlink_option列挙型は非推奨となり、directory_optionsで置き換えられる
  • GitHub #112 デフォルトで、recursive_directory_iteratorでエラーが起きたときに終端状態になるよう、C++20の仕様に合わせた
  • 新機能 directory_options::pop_on_errorオプションを追加。このオプションはrecursive_directory_iteratorに対して設定するもので、成功するか終了状態になるまでpop()を繰り返し呼び続けることにより、イテレーションエラーからの回復を試みる
  • 新機能 directory_options::skip_dangling_symlinksオプションを追加。このオプションはrecursive_directory_iteratorに対して設定するもので、ぶらさがった (参照先がない) ディレクトリのシンボリックリンクを辿らずに、エラー報告する代わりにイテレーションを続行する
  • 非推奨化 recursive_directory_iteratorの以下のメンバ関数を非推奨とする:
    • level()
    • no_push_pending()
    • no_push_request()
    • no_push()
    • ユーザーは、標準の機能に対応するdepth(), recursion_pending(), disable_recursion_pending()を使用すること。recursion_pending()は、no_push_pending()no_push_request()と比較して反対の意味をもつことに注意。非推奨となったメンバ関数は、将来のリリースで削除する予定
  • GitHub #76 path::lexically_relative (およびそれに依存するアルゴリズム) を修正し、空、ドット、ドットx2のパス要素を含むパスを正しくハンドリングできるようにした。この動作はC++17に近づき、空およびドットx1パス要素は無視され、ドットx2パス要素は生成される相対パスから減らすよう考慮される

Functional/Factory

  • factoryvalue_factoryの実装を、以下の機能に対応するよう書き換えた (Glen Fernandes氏) :
    • 右辺値引数のサポート (可能な場合)
    • 可変引数テンプレートを使用した任意数の引数サポート (可能な場合)
    • finalなアロケータのサポート
    • fancy pointer (ポインタのように振る舞う機能) を使用するアロケータのサポート
    • 例外が無効化された設定をサポート (BOOST_NO_EXCEPTIONS)
    • コンパイル時間を改善
  • 以下の機能を削除した:
    • C++03向けのBOOST_FUNCTIONAL_VALUE_FACTORY_MAX_ARITYによる引数の数に対する制限
    • BOOST_FUNCTIONAL_FACTORY_SUPPORT_NONE_Tによるvoidの代わりのboost::none_tの使用

GIL

  • 新機能
    • GitHub #309 GSoC 2019: 画像を縮小するLanczos resampling
    • GitHub #313 GSoC 2019: バイナリ閾値化 (binary thresholding)、逆バイナリ閾値化 (inverted binary thresholding)、切り詰め閾値化 (truncation thresholding) の機能を追加
    • GitHub #314 GSoC 2019: Otsu thresholding method
    • GitHub #315 Adaptive thresholdingに、周辺域のmeanもしくはgaussian-weighted sumを使用するようにした
    • GitHub #350 GSoC 2019: Harrisレスポンス計算 (non-maximum filteringをともなわないコーナー検出)
    • GitHub #364 GSoC 2019: Hessianコーナー検出
    • GitHub #361 GSoC 2019: 数値拡張に2Dカーネルの型として、kernel_2dkernel_2d_fixedを定義
    • GitHub #367 GSoC 2019: 2D convolutionの関数としてconvolve_2dを実装
    • GitHub #383 GSoC 2019: Box filteringとしてaverage filterを使用
    • GitHub #383 GSoC 2019: normalized mean filterをベースにしたブラー関数
    • GitHub #392 GSoC 2019: Sobel and Scharr operators
    • GitHub #393 GSoC 2019: 画像のノイズ除去のためのMedian filter
    • 継続的に新たなテストを追加し、全体的なテストカバレッジを大幅に改善
    • GitHub #287 cached_location_tの目的をドキュメント化
    • GitHub #347 数値拡張に、convolve_rowsconvolve_colsを便利に使うためのconvolve_1dを追加
    • GitHub #386 数値拡張に、画像境界の拡張 (image boundary extension) のためextend_boundary関数を追加
    • GitHub #404 プロジェクトのリリースノートとしてRELEASES.mdをメンテナンスした
  • 変更
    • GitHub #302 コア機能と拡張を含む全てのテストを/testディレクトリに移動
  • 削除
    • GitHub #274 Boost.MPLをBoost.MP11で置き換えた
    • GitHub #274 Boost.TypeTraitsの使用をやめた
    • GitHub #296 GCC <= 4.8のサポートをやめた
    • GitHub #403 未使用のinclude/boost/gil/version.hppファイルを削除
  • 修正
    • GitHub #273 デフォルト初期化されたchannelpixelオブジェクトの未初期化値を修正
    • GitHub #284 std::is_trivially_default_constructibleの特殊化による未定義動作を修正
    • GitHub #385 不正なヘッダをもつPNGを読むとクラッシュする問題を修正
    • 多くの型にRule of Threeを適用 (デストラクタ、コピーコンストラクタ、コピー代入演算子)
    • 非推奨だった、暗黙定義されるコピーコンストラクタとコピー代入演算子を削除

Histogram

  • 新機能
    • C++17コンパイラ向けに、axis型とhistogram型のよりよい推論ガイドを定義
    • インデックスを使用したコードのパフォーマンスを改善
    • 値のチャンクからのfillを加速するhistogram::fillメンバ関数を追加
    • boost/histogram/ostream.hppに、1Dヒストグラム向けにASCII棒グラフの出力を追加 (Przemyslaw Bartosik氏によるコントリビュート)
    • 不正なaxisオプションが渡された場合に、ユーザーフレンドリーなコンパイルエラーを出力するようにした
    • weight()sample()の間違った使い方をした場合に、ユーザーフレンドリーなコンパイルエラーを出力するようにした
    • 全てのhistogramがデフォルト値をもつ場合にtrueを返す、algorithm::empty関数 (Henry Schreiner氏によるコントリビュート)
    • shrink付きalgorithm::reduceは、値がbin edgeでない場合に、適格に定義されるようになった
    • axisが受け入れる値の数を返すaxis::traits::rank関数
    • axisが連続か離散かを判定するaxis::traits::is_continuous関数
    • axisが、入力可能なbinをもっているかを判定するaxis::traits::is_inclusive関数
    • mean accumulator向けに、限定的にweightをサポート
    • accumulators::weighted_mean::sum_of_weights_squaredメンバ関数を追加
  • 修正
    • clangでの-std=c++2a-stdlib=libc++のサポートを追加。gcc-9の互換性を修正
    • エラーをトリガーにすることなく、fill中にsampleの代わりにweightを渡せるようにした
    • algorithm::projectに大量のインデックスを渡したときのセグメンテーションフォルトを修正
    • indexed range generatorが、std::arrayベースのストレージで動作していなかった問題を修正
    • weighted_mean() + weighted_mean() != weighted_mean()だった問題を修正 (Henry Schreiner氏による問題発見と報告)
    • axis::option::test(...)が、テストマスクのいずれかのビットが立っている場合にtrueを返すよう修正 (これまでは、テストマスクの全てのビットが立っている場合にtrueを返していた)
    • minmaxの呼び出しをマクロ展開から保護
    • concepts.qbkの全てのcrlfをlfに置き換え
    • histogramに、ユーザーによって大量のaxisが渡された場合の、不足していたstd::invalid_argumentの例外送出を入れた
    • コンセプトセクションでの、シリアライズサポートに関するドキュメントを正した
    • いくつかのコンパイラバージョンの警告を解決
  • その他
    • Boost.Histogramのロゴを追加
    • 不足していたcopyright注記を追加
    • axis::category::valueが、スカラ型に対してコピーを返し、その他がconst参照を返すようにした
    • コードの膨張を防ぐために、例外のメッセージ生成にstd::ostringstreamを使用するのをやめた
    • ドキュメント改善
      • overviewセクションを再構成
      • 新機能を紹介するuser guideを更新
      • accumulatorの例を更新
      • Conceptsで、accumulatorがオプショナルにweightを受け入れる方法を記載
    • ベンチマークコードを更新
    • b2とcmakeビルドシステムの一貫性をチェックするテストを追加
    • ODR (One-Definition-Rule) をチェックするテストを追加 (非テンプレートな関数がinlineになっていなかったらテスト失敗)
    • シリアライズのコードをBoost.Serializationから分離
    • Boost.CallableTraitsへの依存を削除

Log

  • clang-winコンパイラとの互換性を改善

Math

  • 超幾何関数 (Hypergeometric functions) として、1F0、0F1、2F0、1F1、pFqを追加
  • ヤコビ多項式 (Jacobi polynomial) と導関数 (derivatives) の評価を追加
  • ゲーゲンバウアー多項式 (Gegenbauer polynomial) と導関数の評価を追加
  • カーディナルB-スプライン曲線 (Cardinal B-Splines) と導関数を多項式として追加
  • カーディナル三角補間 (Cardinal Trigonometric Interpolation) を追加
  • 小区分 (sub-section) の統計を追加
  • 1標本t検定 (One Sample Student's T Test) を追加
  • 正規性のために、アンダーソン–ダーリング検定 (Anderson Darling test) を追加
  • 自動訂正のために、リュング・ボックス検定 (Ljung Box test) を追加
  • ランダムなシーケンスのために、ラン検定 (Runs test) を追加
  • ヘッダboost/math/tools/univariate_statistics.hppboost/math/tools/bivariate_statistics.hppを非推奨化し、boost/math/statistics/univariate_statistics.hppboost/math/statistics/bivariate_statistics.hppを推奨
  • 経験累積分布 (Empirical CDF distribution) を追加
  • ランチョス近似 (Lanczos approximation) を通常の精度で使用するすべての関数に適用できるように、多精度ガンマ関数で使用されるスターリング近似 (Sterling approximation) を作り直した。また、Lanczos近似を10進数100桁精度まで拡張した

MPI

  • より明確にドキュメント化した
  • 明示的な入力バッファオフセットを使用した際のscattervのバグを修正
  • Intel MPI >= 2019.4で、MPI_Probeとその仲間の使用を有効にした
  • Windowsでのシンボル可視性を修正

Multiprecision

  • constexprで大きな更新をし、GCCとClang 9以降もしくはstd::is_constant_evaluated()を使用できるコンパイラで、cpp_intfloat128の算術演算を完全にconstexpr化した
  • GitHub #164 可変精度mpf_floatで、正しい精度を選択しようしとしてテールスピン (tailspin) に陥るバグを修正

Outcome

  • 強化
    • スタンドアローン版のOutcomeがmake installができるようになり、cmakeのfind_package()で見つけられるようになった。注意として、個別にインストールする必要があり、依存関係にあるquickcpplibをインストールしないとfind_package()が失敗する
    • スタンドアローン版のOutcomeでは依存ライブラリの管理にgit submoduleを使用していたが、代わりにcmake superbuildの依存関係メカニズムを使用するようにした。cmake configureをすることで、quickcpplibの内部コピーがgit cloneされ、(内部でfind_package()によって) ビルドディレクトリにインストールされる。これは、configureされていないOutcomeリポジトリにとって破壊的変更となり、以下のいずれかを実行する必要がある:
      • cmake buildのためのサブディレクトリとしてOutcomeを追加する
      • cmake superbuildを使用してビルドとインストールを行う
      • シングルヘッダ版を使用する
    • スタンドアローン版のOutcomeにおいて、C++ Conceptがコンパイラで使用可能かをチェックし、使用できるなら有効にするようにした。cmake変数CXX_CONCEPTS_FLAGSを空文字列に設定することで、この自動検出と有効化を防止できる
    • OUTCOME_TRYで、操作が成功する可能性が高いかをヒントとしてコンパイラに伝えられるようになった。「P1886 Error speed benchmarking」では、式が成功する可能性が高いかどうかをコンパイラに伝えることにより、非常に小さな関数にとってかなりの有益になることがわかった。OUTCOME_TRY_FAILURE_LIKELYは操作が失敗する可能性が高いことをコンパイラに伝える。ヒントのない以前の動作に戻したい場合は、OUTCOME_TRY_LIKELY(expr)の定義を(!!expr)とすればよい
    • GitHub #199 C++コルーチンのサポートを追加。これには2種類あり、まずTRY操作を行うOUTCOME_CO_TRY()がある。もうひとつは、outcome/coroutine_support.hppヘッダにeager<OutcomeType>lazy<OutcomeType>の実装があり、C++コルーチン内からbasic_resultbasic_outcomeをより自然で効率よく使える。具体的には、resultもしくはoutcomeが例外ポインタから構築される場合、コルーチン内から送出された例外は、コルーチンマシンを介して例外を送出するのではなく、送出された例外を保持するオブジェクトをコルーチンreturnする。earger<T>lazy<T>はどちらもTを受けられる。どちらもVisual Studio 2019およびClang 9でテストし、動作することを確認している
    • GitHub #210 make_error_code()make_exception_ptr()が、basic_result<>との互換性あるコピーとムーブの変換をさらに考慮するようになった。これにより、basic_result<T, E>からbasic_result<T, error_code>を構築できるようになった。ここでEは、ADLにより見つかった非メンバ関数error_code make_error_code(E)を実装したカスタム型である。そうでない場合、Eerror_codeとは関連性がないものとされる。同じ機能がexception_ptrにもあり、こちらはADLによりmake_exception_ptr()関数が探索される。basic_outcome<>はコンストラクタの数を維持するために、basic_result<>よりも小さなサポートとなり、basic_result<>failure_type<>からの変換を受けられる
  • バグ修正
    • GitHub #184 コンパイラの[[nodiscard]]サポートの検出が壊れていた

PolyCollection

メンテナンス上の修正

Preprocessor

  • 空 (emptiness) に関する議論をトピックとして追加
  • C++20 __VA_OPT__構築のサポートを追加
    • C++20レベルの__VA_OPT__がサポートされているかを判定するBOOST_PP_VARIADIC_HAS_OPT
    • C++20レベルの__VA_OPT__を使用して空かをテストするBOOST_PP_CHECK_EMPTY
    • C++20レベルの__VA_OPT__より柔軟な代替機能であるBOOST_PP_VA_OPT

Smart Pointers

  • スカラ型と配列型に対応したallocate_uniqueを実装 (Glen Fernandes氏)

Test

  • Boost.Test v3.12
  • 新機能
    • C++17 std::string_viewのサポートを追加
    • GitHub #234 boost::exceptionとRTTI無効化環境でのよりよい診断 (Mikhail Pilin氏に感謝)
  • バグ修正とPull Request
    • Issue
      • GitHub #206 コンパイル時に無効化されたテストが、JUNITのログで正しく処理されない問題を修正
      • GitHub #217 テンプレートタイプに複数のパラメータが含まれている場合に、名前によるフィルタテストができない問題を修正
      • GitHub #229 非推奨のstd::random_shuffleを使用しないよう修正
    • Pull Request
      • GitHub #227 report_errorに、printfフォーマットのチェック属性を追加
      • GitHub #231 OpenBSDにSI_ASYNCIOSI_MESGQがなかったので存在チェックを追加
      • GitHub #232 Windowsでのタイムアウトを修正
      • GitHub #234 boost::exceptionとRTTI無効化環境でのよりよい診断

VMD

  • C++20レベルの実装として100%の信頼がある場合に、BOOST_VMD_IS_EMPTY__VA_OPT__を使用するよう更新

テスト済みコンパイラ

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

  • Linux:
    • Clang: 3.0, 4.0.1, 6.0.1
    • Clang, C++0x: 3.0
    • Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0
    • Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, 6.0.1, 7.0.0, 8.0.0
    • Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0
    • GCC: 4.4.7, 4.5.3, 4.6.3, 5.4.0, 8.0.1
    • GCC, C++0x: 4.4.7
    • GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1
    • GCC, C++14: 5.4.0, 5.5.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1
    • GCC, C++17: 7.3.0, 8.0.1
    • Intel, C++14: 18.0
  • OS X:
    • Apple Clang: 9.0.0, 9.1.0, 10.0.0
    • Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0
    • Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0
    • Apple Clang, C++17: 9.1.0, 10.0.0
    • Apple Clang, C++1z: 9.0.0
    • Apple Clang, C++2a: 10.0.0
  • Windows:
    • GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4
    • GCC, C++0x: 4.6.4
    • GCC, C++11: 4.7.3, 4.8.1, 4.9.3
    • GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0
    • GCC, C++17: 7.1.0, 7.2.0, 7.3.0
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
  • FreeBSD:
    • Clang: 4.0.0
    • Clang, C++11: 4.0.0
    • Clang, C++14: 4.0.0
    • Clang, C++1z: 4.0.0

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

  • Linux:
    • Clang: 3.0, 3.8.1, 3.9.1, 4.0.1, 5.0.2, 6.0.1
    • Clang, C++0x: 3.0
    • Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0
    • Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, 6.0.1, 7.0.0, 8.0.0
    • Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0
    • GCC: 4.4.7, 4.5.3, 4.6.3, 4.9.4, 5.4.0, 5.5.0, 8.0.1
    • GCC, C++0x: 4.4.7
    • GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1
    • GCC, C++14: 5.4.0, 5.5.0, 6.3.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1, 8.1.0
    • GCC, C++17: 7.3.0, 8.0.1
    • Intel, C++14: 18.0
  • OS X:
    • Apple Clang: 9.0.0, 9.1.0, 10.0.0
    • Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0
    • Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0
    • Apple Clang, C++17: 9.1.0, 10.0.0
    • Apple Clang, C++1z: 9.0.0
    • Apple Clang, C++2a: 10.0.0
  • Windows:
    • GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4
    • GCC, C++0x: 4.6.4
    • GCC, C++11: 4.7.3, 4.8.1, 4.9.3
    • GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0
    • GCC, C++17: 7.1.0, 7.2.0, 7.3.0
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
  • FreeBSD:
    • Clang: 4.0.0
    • Clang, C++11: 4.0.0
    • Clang, C++14: 4.0.0
    • Clang, C++1z: 4.0.0

翻訳

Akira Takahashi