Skip to content

Latest commit

 

History

History
449 lines (356 loc) · 36.3 KB

1_70_0.md

File metadata and controls

449 lines (356 loc) · 36.3 KB

Boost 1.70.0リリースノート

本家リリースノート:

リポジトリは以下:

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

既知の問題

新ライブラリ

  • Outcome
    • C++の例外処理を (直接的に) 使用することが適切ではない状況のための、関数の失敗をハンドリングし、報告するためのツールセット。作者Niall Douglas
  • Histogram
    • C++14向けの、便利なインタフェースを持つ高速で拡張可能な多次元ヒストグラム。作者Hans Dembinski

更新ライブラリ

このリリースは、多くの新機能、バグ修正、パフォーマンス向上、ドキュメントの改善が含まれる。主な変更点は以下の通り:

  • (ソケットとかの) I/Oオブジェクトで、カスタムのI/O executorを使用する機能を追加
  • initiate静的メンバ関数に、async_resultを使用する形式を追加
  • Coroutines TSのサポートを更新し、asio名前空間に昇格させた
  • CopyConstructibleな新たなコンセプトDynamicBuffer_v2を追加
  • ユーザー定義の非同期操作を実装するのを簡単にするasync_compose関数を追加
  • ヘルパ関数make_strandを追加
  • completion condition typeの要件を緩和し、コピー構築可能ではなくムーブ構築可能だけ要求するようにした
  • local::basic_endpointクラスのコンストラクタに、string_viewをとるオーバーロードを追加
  • さまざまな関数にnoexcept修飾を追加
  • コンフィグレーションの#defineとしてBOOST_ASIO_DISABLE_VISIBILITYを追加
  • polymorphic executorで関数オブジェクトを型消去 (type erase) する際に使用するメモリをリサイクルするようにした
  • データグラム指向ソケット (datagram-oriented socket) で切り詰め (truncation) (error::message_size) が発生したときに、receive関数が転送されたバイト数を正しく返すよう変更
  • バックエンドがpthread_cond_timedwaitを使用する場合の、絶対アウトの計算を修正
  • EndpointSequenceイテレータ型を推論するよう範囲ベースの非同期接続操作を変更
  • 暗黙の変換を防ぐようbuffer_sequence_beginbuffer_sequence_endを修正
  • ローカル操作が完了する前にSSLハンドシェイクのエラーがピアに伝播されることを保証
  • SSLシャットダウン時のeofエラーは実際には成功しているので、エラーを抑制
  • OpenSSLが関連するエラーなしにSSL_ERROR_SYSCALLを出力する際のフォールバッグエラーコードを追加
  • readとwriteの合成非同期操作がbuffer sequence objectsをムーブするよう変更
  • macOS固有でのOSMemoryBarrierが非推奨になったことによる警告を修正
  • MSVC 11.0での、readとwriteの合成操作を使用した際に発生するコンパイルエラーを修正
  • dispatchpostdeferのドキュメントを改善
  • system_executorを使用した際の、Windows固有のメモリリークの可能性があったところを修正

より詳細な変更は、Revision Historyを参照

  • GitHub #28 pthread_cancelでクラッシュしないようにした
  • GitHub #91 ucontextの生成に失敗したときに、スタックをクリーンアップするようにした
  • GitHub #97 stack_contextに不足していたBOST_CONTEXT_DECLを追加
  • GitHub #98 jump_i386_sysv_machoでx87 control wordにゴミを書き込んでいたのを修正
  • GitHub #21 新たなマクロBOOST_DLL_USE_STD_FSを追加。これを値1でdefineすると、C++17標準のstd::filesystem::pathstd::system_errorstd::error_codeを使用するようになる。例外の型がboost::system::system_errorからstd::system_errorに変わるので、catch節を必ず更新すること
  • GitHub #23 動的読み込み可能かの検出と装飾ロジック (decoration logic) を大幅に書き直した。これにより、読み込み失敗した際により正確なエラーが報告されるようになった。プラットフォームに関連したクエリや検出を行わず、ライブラリへの修飾パス (decorated path) を返すshared_library::decorate()関数を追加した。より良い結果を得るためには、shared_library::load()関数と、shared_libraryクラスのコンストラクタを使用することを推奨する (作業してくれたLoïc Touraine氏に多大な感謝)
  • CI強化、ドキュメント更新、誤字修正、移植性に関する多くの修正と整理
  • GitHub #33, GitHub #35 古いCPUで未定義動作が起きたため、MSVCではハードウェア支援のあるpopcountを無効にした
  • GitHub #191 未使用変数の警告を無視
  • Github #196 remote_ready_splk_がロック取得の高い競争状態にあったのを修正
  • pathクラスの実装での、std::string::end()を間接参照しているいくつかの箇所を修正
  • GitHub #58 (recursive_)directory_iteratorのコンストラクタと、error_codeへの参照をとる操作において、メモリ不足状態でプログラムが強制終了してしまう問題を修正
  • Trac #12759 pathクラスの静的メンバ変数の定義が不足していたことにより発生していたリンクエラーを修正
  • Linux上のdirectory iteratorのインクリメントで、未初期化データが使用される可能性があったのを修正
  • directory iteratorにムーブサポートを追加
  • GitHub #55 directory_entryクラス用の、file statusを問い合わせるオーバーロードを追加。これによって、directory iteratorを間接参照した結果からfile statusを問い合わせる際に、比較的負荷の高いOSクエリを回避できる
  • ファイルシステムが壊れたり改ざんされたりしたときに起こり得るメモリ枯渇を避けるために、current_path()read_symlink()を実装を見直した。これらの関数には、OSが受け付けるパスサイズに内部的な制限があり、現在が16MiBである
  • copy_file()関数が使用する内部バッファのサイズを増やした
  • 改善
    • GitHub #526 line_interpolate()アルゴリズム (線形補間) を追加
  • 解決した問題
    • GitHub #450 geodesic direct formulasでの負の距離をサポート
    • GitHub #466 spherical/geographicでのdisjoint(box, polygon)が誤った結果を出力する問題を修正
    • GitHub #547 zip_iteratorでのrtreeの構築で未定義動作が起こる問題を修正
    • GitHUb #560 karney_direct formulaが不正確だった問題を修正
    • GitHub #577 interprocessアロケータと組み合わせたrtreeがClangでコンパイルエラーになる問題を修正
    • GitHub #579 spherical/geographicでのdisjoint(segment, box)が誤った結果になる問題を修正
  • バグ修正
    • GitHub #538 msvc-12での配列初期化の欠陥に対するワークアラウンドを追加
    • GitHub #553 回転楕円体 (spheroid) が地理的 (geometric) な比較戦略で正しく動作するよう修正した
    • GitHub #570 spherical/geographicでのジオメトリ間の距離の計算を修正
    • GitHub #571 geographicの距離の計算でNaNが出力されることがあった問題を修正
    • gcc-4.6、msvc-10, 11, 12でのrtreeのコンパイルエラーに対するワークアラウンドを追加
  • 動作の変更
    • いくつかのジオメトリの組み合わせのenvelopeで、strategyによって期待される結果が異なるようになる
  • GitHub #11 拡張ユークリッドの互除法 (Extended Euclidean Algorithm) と、モジュラ逆数関数 (Modular Multiplicative Inverse function) を追加 (Nick Thompson氏)
  • text file sink backendでファイルを収集するまえに別のログファイル名を生成する機能をサポートした。これによって既存のログファイルのファイル名にタイムスタンプやファイルカウンタを付加することができ、その結果として汎用的なファイルコレクションを可能にする
    • この機能を有効にするには、text file sink backendに対象ファイルのname patternを設定する必要がある。名前付きパラメータtarget_file_nameを使用して、text_file_backend::set_target_file_name_pattern()メンバ関数を呼び出すか、settingsでTargetFileName sinkパラメータを使用する
    • このname patternは、ファイルへの書き込みが終了して収集する際に、新しいファイル名を生成するために使用する。例として、元のファイル名としてapp.logを付けた場合、収集してrotateできるようにするため"app-2019-01-05.log"のようなタイムスタンプやファイルカウンタを付加した衝突しない名前にできる
  • 新機能
    • Lanczos smoothing derivatives (ランチョスのスムージング導関数) を追加
    • numerical_differentiation.hppboost/math/tools/からboost/math/differentiation/finite_difference.hppに移動
    • mean (平均)、variance (分散)、skewness (歪度)、kurtosis (尖度)、median (中央値)、Gini coefficient (ジニ係数)、median absolute deviation (MAD、中央値絶対誤差) をtools/univariate_statistics.hppに追加
    • correlation coefficients (相関係数) とcovariance (共分散) をtools/bivariate_statistics.hppに追加
    • absolute Gini coefficient (絶対ジニ係数)、Hoyer sparsity (ホイヤーのスパース性)、oracle SNR、M2M4 SNR estimatorをtools/signal_statistics.hppに追加
    • total variation (TV)、l0、l1、l2、sup norms (supノルム)、それと同様に対応するdistance (距離) 関数をtools/norms.hppに追加
    • polynomials向けにムーブコンストラクタを追加、complex coefficients (複素係数)、.prime().integrate()メンバ関数を追加
    • quadratic_rootstools/roots.hppに追加
    • roots.hppのニュートン法に、complex値の関数を追加
    • Catmull-Rom interpolator (Catmull-Rom補間器) を追加
  • 破壊的変更mp_invokemp_invoke_qに名称変更
  • mp_similarを追加。型リストが全て同じ型であればmp_true、そうでなければmp_false
  • mp_set_unionmp_set_intersectionmp_set_differenceを追加
  • mp_not_fnを追加
  • mp_transform_firstmp_transform_secondmp_transform_thirdを追加。それぞれ、型リストの先頭要素、その次の要素、さらにその次の要素に変換メタ関数を適用する
  • mp_filterを追加
  • mp_eval_if_notmp_eval_ormp_valid_qを追加
  • mp_backmp_pop_backを追加
  • アロケータメンバの同名の型としてsize_typedifference_typeを定義した。これは多くの状況ではなにも変わりはないが、アロケータの定義によってコンテナの内部構造をある程度制御できるようになった
    • 本件の動機については、GitHub #17を参照。現時点でこの変更は、リファレンスには記載しておらず、準公式の扱いになっている
  • メンテナンス作業
  • Boost.Optionalとの互換性チェックでの、traitsクラスのさまざまな変換問題を修正
  • GitHub #98 変換可能性をチェックする際、古い型ではstd::numeric_limitsのインスタンス化が起こらないようにした
  • GitHub #103 任意精度整数を考慮して、可変精度コードを更新
  • XML serialization archivesのサポートを追加
  • GitHub #113 mpf_floatmpfr_floatの、iostreamの固定精度フォーマットしたときのバグを修正
  • ネイティブのMPFRをよりハンドリングしやすくするため、特殊関数 (コンストラクタとか) にオーバーロードを追加
  • 常に失敗する可能性があった、ジェネリックなexp関数のバグを修正
  • GitHub #110 浮動小数点数から整数へのジェネリックな変換で、未定義動作を回避
  • Billy O'Neal氏によって、rooted_allocatorの機能不足 (比較演算子とis_always_equal) が報告された (GitHub #9) 後、状態を持つアロケータ (stateful allocators) と、アロケータの状態伝搬トレイト (allocator propagation traits) のハンドリングを改善
  • 内部のキャッシュ構造での、潜在的な重大バグを修正
  • GitHub #432 非推奨ヘッダboost/detail/iterator.hppの使用をやめた
  • X3
    • GitHub #429 整数パーサーがユーザー定義型を扱えるようにした
      • 注: check_overflowトレイトのデフォルト実装で、boost::integer_traits<T>::is_integralの代わりにstd::numeric_limits<T>::is_boundedを使用するようにした
    • GitHub #439 plain parsing内のシーケンスを削除した。これによってコンパイルエラーは発生するが、代わりにシーケンスを (静かに) パースでき、最後の値 (last value) をとれる
    • BOOST_SPIRIT_INSTANTIATEによるparse_ruleの以下の状況でのインスタンス化を修正:
    • GitHub #444, GitHub #449, GitHub #452 rule内の、属性の不要な統合 (synthesization) と、変換なし属性の参照渡しを修正
    • GitHub #415, GitHub #458, Trac #8699 壊れていた1.0#INFパーサーを削除。あまりドキュメント化されておらず、動作もしていなかった。
    • GitHub #460 アンドキュメントだったmake_attributeトレイトは、バグ (GitHub #449) があったのと、属性変換をシンプルにするために削除した
      • 属性変換のためにこの機能を使用していたのであれば、このリリースからはもう必要ないはず
    • GitHub #469 整数パーサーがstd::numeric_limits<T>::digits10値を考慮するようにした
    • GitHub #469 (Min % Base) == 0コーナーケースでのアンダーフローチェックを修正
    • GitHub #470 IgnoreOverflowDigits=trueな整数パーサーでの出力値のオーバーフローを修正
    • GitHub #472 コンテナ属性要素 (Container attribute elements) がコピーはされていたが、ムーブされていなかった
    • GitHub #480 transform_attributeでの特殊な参照ハンドリングを削除
  • V2
    • GitHub #349, GitHub #482 Boost.Endianとのマクロ名と名前空間の衝突を修正
    • utree
      • GtiHub #423 負の値の左シフトによるタグ取得での未定義動作を修正
      • GitHub #462 double conversionを修正 (spirit::string -> std::string -> spirit::string)
    • Qi
      • GitHub #427 rule skipper型問題のためにstatic assertを追加
      • GitHub #429 check_overflowトレイトのデフォルト実装で、boost::integer_traits<T>::is_integralの代わりにstd::numeric_limits<T>::is_boundedを使用するようにした
      • GitHub #429 整数パーサーがユーザー定義型を扱えるようにした
      • GitHub #415, GitHub #458, Trac #8699 壊れていた1.0#INFパーサーを削除。あまりドキュメント化されておらず、動作もしていなかった。
      • GitHub #460 アンドキュメントだったmake_attributeトレイトは、バグ (GitHub #449) があったのと、属性変換をシンプルにするために削除した
      • GitHub #467 pre/post/failの変換トレイトを直接使用するようにしたので、ユーティリティ関数pre_transformpost_transformfail_transformを削除
      • GitHub #469 整数パーサーがstd::numeric_limits<T>::digits10値を考慮するようにした
      • GitHub #469 (Min % Base) == 0コーナーケースでのアンダーフローチェックを修正
      • GitHub #470 IgnoreOverflowDigits=trueな整数パーサーでの出力値のオーバーフローを修正
      • GitHub #480 transform_attributeでの特殊な参照ハンドリングを削除
    • Lex
      • GitHub #420 ユーザー指定のトークン型をともなうlexerのデフォルトコンストラクタでの未定義動作を修正
  • Classic
    • GitHub #422, Trac #9737 元となるイテレータ (underlying iterator) の間接参照演算子が非const参照型を返すときに、position_iteratorがローカル変数への参照を形成してしまう問題を修正
  • iOS 32-bit ARM向けのビルドを修正 (修正を提供してくれたIvan Ponomarev氏に感謝 GitHub #70)
  • ドキュメントの誤字修正、警告修正、更新
  • Boost.Test v3.10
  • 詳細な変更はChang Logを参照
  • 破壊的変更
    • Boost.Test minimal.hppで、非推奨警告を表示するようにした
    • 浮動小数点数の比較を変更したので、このリリースより前の浮動小数点数比較を使用したテストが失敗する可能性がある
    • 内部的なAPI unit_test_log_formatterを変更。詳細はライブラリ個別のchange logを参照
  • 新機能
    • 浮動小数点数の比較を拡張し、非浮動小数点数と算術オペランドをとれるようにした。BOOST_TEST(3.0001 == 3)このように使用できる (浮動小数点数と整数の比較、かつ演算子を直接指定できる)
    • カスタムデータセットの宣言で、sample型フィールドの指定が必須ではなくなった
    • テンプレートテストケースを、std::tupleによって可変引数定義できるよう拡張した
    • 時間テストのためにWindowsサポート
    • テストスイートに対する時間テスト
    • Boost.Timerに対する依存を削除
    • スコープ付きのコンテキスト宣言のために新たなマクロBOOST_TEST_INFO_SCOPEを追加
    • BOOST_TEST_CONTEXTの構文を改善
  • バグ修正とPull Request
    • Trac
      • #7397 1.48.0で非推奨化されたBoost.Timerの機能を使用していた問題を修正
      • #9434 異なる種類のシンボルでboost::timer名前空間を再宣言してコンパイルエラーになっていた
      • #13106 libs/test/tools/console_test_runnerのコンパイルに失敗していた
      • #13418 BOOST_AUTO_TEST_CASE_TEMPLATE()に可変引数を許可したい
    • GitHub Issues
      • #133 Windowsでテストのタイムアウトを指定するとスキップされてしまう
      • #138 BOOST_DATA_TEST_CASEexpected_failuresが動作しない
      • #141 Boost.Mp11とBoost.Hanaの型リストをサポート
      • #157 テスト名のCV修飾
      • #160 GCC 8.2.0で最適化を有効にした際の-Wformat-overflowでの警告を修正
      • #174 GCC 8でのみ、終了時にUBSANで問題が検出される
      • #176 snippet_dataset1_3が壊れている
      • #177 文字配列の等値比較テストがLLVMで失敗する
      • #180 MSVCで到達しないコードによる警告がでていたので修正
      • #181 doc_example22(と23)が失敗していた
      • #194 master_test_suiteの二重宣言を修正
      • #196 JUnitレポートで、エラーが失敗として報告される
      • #198 b2とcmakeでの定義から動的リンクを作れるよう認識させた
      • #199 1.69.0にアップグレードしたあと、type_mismatch実行時エラーが出力される
      • #202 非推奨となっていたboost/timer.hppの使用をやめた
      • #203 データセットとフィクスチャの両方をともなうテストケースが柔軟なインタフェースを持っていない。BOOST_DATA_TEST_CASE_Fにフィクスチャを指定したときにsetup()teardown()が呼び出されなかった
      • #204 データセットを伴うテストケースでタイムアウトを扱いたい
    • GitHub Pull Request
      • #171 テストランナーが出力するライブラリ名を正しくした。s/Boost.test/Boost.Test/
      • #172 NDEBUG定義時の未使用変数の警告を修正
      • #182 C++17でもコンパイルできるように、直接std::bind1st()を使用していたところを修正
      • #183 不要なセミコロンを削除
      • #184 未使用変数の警告を修正
      • #190 cygwinのGCC 7.3でのmaster_test_suiteでの警告を修正
      • #195 MinGW GCC 5.3でのコンパイル問題を修正
      • #197 BOOST_TEST_CONTEXTがスコープを導入するのがわかりにくかったので、波カッコ構文でスコープを導入できるようにした
      • #205 MinGW環境でvsnprintfがないためコンパイルエラーが起きていた問題を修正
  • Github #28 GHS C++コンパイラのサポートを追加 (パッチを提供してくれたBrandon Castellano氏に多大な感謝)
  • GitHub #23 文字列と型の比較を最適化 (パッチを提供してくれたAndrey Semashev氏に多大な感謝)
  • GitHub #25 clang-winでのコンパイルを修正 (パッチを提供してくれたPeter Dimov氏に多大な感謝)
  • CIを強化
  • 要素数が判明している配列型かを判定するstd::is_bounded_array、要素数が不明な配列型かを判定するstd::unbounded_arrayを追加
  • 指定した型から目的の型に参照の情報をコピーするcopy_referenceと、CV修飾と参照をコピーするcopy_cv_refを追加
    • copy_reference<int, char&>::type == int&
    • copy_cv_ref<int, const char&>::type == const int&
  • /clrオプション付きMSVCのサポートを改善
  • コンパイラ互換の雑多な修正
  • GitHub #65 C++17以上で使用できるテンソルフレームワークを追加 (Cem Bassoy氏に多大な感謝)
  • GitHub #69 基礎的なOpenCLサポートを追加 (Fady Essam氏に多大な感謝)
  • GitHub #57 基礎的なベンチマークスイートを統合 (Stefan Seefeld氏に多大な感謝)
  • CIインテグレーションと強化

テスト済みコンパイラ

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

  • 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