最終更新日時:
が更新

履歴 編集

Boost 1.75.0リリースノート

本家リリースノート:

リポジトリは以下:

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

新ライブラリ

  • JSON C++11でのJSONの解析、シリアライズ、DOMのライブラリ (作者Vinnie FalcoとKrystian Stasiowski)
    • C++11のみを要求する高速なコンパイル
    • アロケータサポートをともなう、かんたんで現代的なAPI
    • Boostを必要としないコンパイルのためのBOOST_JSON_STANDALONE定義
    • オプションとしてライブラリのリンクを必要としないヘッダオンリーモード
  • LEAF C++11での軽量なエラーハンドリングライブラリ (作者Emil Dotchevski)
  • PFR ユーザー定義型に対するマクロやボイラープレートコードを必要としないリフレクションのライブラリ (作者Antony Polukhin)

更新ライブラリ

Atomic

  • 内部のロックプールで使用するアドレス探索アルゴリズムのSSE2とSSE4.1版を実装した。これにより、競合が激しいケースでの待機 (wait) と通知 (notify) の操作がパフォーマンス向上する可能性がある
  • GitHub #41 即値定数をともなうビット (論理) 操作で間違った命令列が生成されるためにAArch64ターゲットでコンパイルエラーになる可能性があった問題を修正

Beast

  • 修正
    • detect_ssl内での未使用パラメータの警告を抑制
    • Websocketのサンプルコードを、TLS接続でSNIを設定するよう更新
    • GitHub #2023 websocketasync_shutdownが、ベースとなるTLS転送をシャットダウンするよう修正
    • GitHub #2011 append_existingフラグをつけたファイルを開く操作が、POSIX環境で正しく動作するよう修正
    • GitHub #2039 Windowsのビルドで、Filesystemライブラリの要求に従ってbcryptライブラリをリンクするようにした
    • GitHub #2063 advanced_server_flexサンプルコードでのロジックエラーを修正
    • GitHub #1582 MSVCでの到達しないコードによるエラーを修正
    • GitHub #2070 body_limitが空のときのhttp bodyの振る舞いを修正
    • GitHub #2065 ゼロ幅書き込みが要求された際のbasic_streamの振る舞いを修正
    • GitHub #2080 Sec-* HTTPヘッダのenum表現を追加
    • GitHub #2085 fields::set()に対するnullptrの暗黙キャストを修正
    • GitHub #2029 basic_streamのC++20でのテストを修正
  • その他
    • Boost.Beast内でAsioのハンドラトラッキングを有効にするためのマクロBOOST_ASIO_ENABLE_HANDLER_TRACKINGを定義。詳細はasio handler trackingを参照
    • Bishop-Fox 2020セキュリティアセットを追加

Container

  • 新たなdevectorコンテナを追加。double-ended (両端) なvectorの実装であり、後方だけでなく前方にもcapacityがあり、先頭に償却定数時間で要素の挿入ができる
  • バグ修正
    • GitHub #152 ツリーベースのコンテナで、ムーブのみできる要素型のムーブ操作がコンパイルできない問題を修正
    • GitHub #156 vectorにもたせるアロケータとして16ビットのdifference_typeを設定するとコンパイルできない問題を修正
    • GitHub #157 不足していたインクルードを追加
    • GitHub #159 pmr::monotonic_buffer_resourceで一度に大きなメモリアロケートを行うとクラッシュする問題を修正
    • GitHub #160 uses_allocatorにはremove_cvref_tした型を渡す必要があった
    • GitHub #162 x86のMSVCでsmall_vectorを値渡しするとクラッシュする問題を修正
    • GitHUb #161 コンストラクタpolymorphic_allocator(memory_resource*)にヌルポインタを渡すとデフォルトのメモリリソースが使われる非標準の拡張を削除
    • GitHub #163 small_vectorcontainer_rebindできなかった問題を修正
    • GitHub #165 memory_resourceのインラインメンバが共有ライブラリでリンクエラーになる問題を修正
    • GitHub #166 ヘッダに記載されているcopyrightの文字エンコーディングを修正
    • GitHub #167 GCC 4.4で起きていた"error: the address of 'msg' will always evaluate as 'true' warning"という警告を修正
    • GitHub #169 clang11でdlmalloc_ext_2_8_6.cをビルドするとfloodで警告がでる問題を修正

endian

  • endian_arithmeticendian_bufferを継承しないようにした
  • BOOST_ENDIAN_NO_CTORSが定義された際、アライメントされていないendian_bufferendian_arithmeticはC++03のPODとなり、__attribute__((packed))が有効になる

Filesystem

  • GitHub #134 新機能 ファイルの生成日時を取得するcreation_time操作を追加
  • last_write_time(p, ec)操作が失敗した際の戻り値を、-1の代わりにstd::time_tが表現できる最小値に変更
  • hard_link_count(p, ec)操作が失敗した際の戻り値を、0の代わりにstatic_cast<uintmax_t>(-1)に変更
  • POSIXシステムで、file_sizeに指定したパスが非通常ファイル (non-regular file) に解決された場合、エラーコードとしてerrc::function_not_supportedを提示するようにした。これまではerrc::operation_not_permittedが報告されていた
  • Linuxにおいて、多くの操作内で可能な場合はstatxシステムコールを使用するようにした。これにより、ファイルシステムから照会される情報量を減らし、パフォーマンスを向上できる。statxシステムコールはLinux 4.11カーネルで導入された
  • GitHub #160 pathクラスの一部のメンバ関数の戻り値型から、const修飾を削除した。これまではこの問題により、呼び出し側でムーブ構築とムーブ代入が妨げられる可能性があった
  • OpenBSD 4.4以降で、ファイルシステムの容量 (space) を取得するためにstatvfsシステムコールを使用するようにした (GitHub #162によって考えついた)

GIL

  • 破壊的変更 次のリリースでGCC 5のサポートを終了する予定。サポートするC++の下限バージョンもC++11からC++14に変更する

Histogram

  • 修正
    • axis::variable{{0, 1, inf}}.value(1)がNaNではなく1を返すよう修正
    • axis::variableのコンストラクタは、ひとつの値がNaNである場合にstd::invalid_argument例外を送出するようにした
    • <boost/histogram/axis/traits.hpp>の前に<boost/type_traits.hpp>をインクルードした場合に発生するGCCのバグ (gcc-10.xのupstreamで修正される) に対するワークアラウンドを実装
    • 最新コンパイラバージョンでのいくつかの警告を修正
    • C++20標準でコンパイルした際に発生する警告を修正
  • ドキュメント
    • accumulator::meanaccumulator::weighted_meanの値 (value) と分散 (variance) を要求されたがaccumulatorにそれらを計算するための十分なエントリがない場合の、未定義動作をドキュメント化
    • axisのメタデータをなぜ等値比較でチェックするのかの論理的根拠の説明を追加

Interprocess

  • GitHub #127 1.74.0のbasic_managed_shared_memoryが静的アサーションで失敗する問題を修正

Intrusive

  • バグ修正
    • GitHub #48 MSVCでの条件分岐付きの代入の警告を修正
    • GitHub #49 空の制御文による警告を修正
    • GitHub #52 BOOST_INTRUSIVE_BSR_INTRINSICでの不正なキャストを修正

Log

  • バグ修正
    • GitHub #125 ログファイルのローテーションでの、(set_target_file_name_pattern()メンバ関数で設定したパターンに基づく) ターゲットファイル名を生成する際のtext_file_backendバックエンドで使用されるカウンターを修正
    • GitHub #128 volatilebasic_sink_frontendのバージョンカウンタをatomicに置き換え
    • GitHub #131 asynchronous_sinkフロントエンドで、フロントエンドによるrunの呼び出しが内部の専用スレッドではなくユーザースレッドから行われた場合に発生する可能性のあった、flushrunの間での競合を解決
  • 詳細はChangelogを参照

Move

  • バグ修正
    • GitHub #30 未使用変数の警告を抑制するために、voidへのキャストは汎用的な方法ではなかった

Mp11

  • mp_pairwise_foldを追加 (Barry Revzin氏による推奨)
  • 破壊的変更 mp_invokeを削除。代わりにmp_invoke_qを使用すること

Optional

  • boost::noneconstexpr宣言
  • GitHub #78 C++20でoptional<std::filesystem::path>が壊れていた問題を修正

Outcome

  • アナウンス
    • 来年、Boostの3リリース後がv2.1ブランチの最終リリースとなる。Boost 1.76以降、v2.2ブランチがデフォルトになる。このブランチでは、v2.1に対するいくつかの大きな破壊的変更がある。詳細はドキュメントを参照
  • 強化
    • ADL検出のイベントフックを、ポリシー指定のイベントフックに置き換えた。これは脆弱性 (だれかがなにか変更した際に、フックが静かに自己無効化する)、コンパイラのバグ (コンパイラ設定の違いによるフックの間違いや、一部のフックだけが検出されるなど)、およびエンドユーザーが使用することがむずかしいなどが理由。ポリシー指定のイベントフックは、下位互換性のためにデフォルトでADL検出フックにできる。そのためには、OUTCOME_ENABLE_LEGACY_SUPPORT_FORマクロの値を2020未満に設定する
    • OUTCOME_GCC6_CONCEPT_BOOL設定を改善。古いGCCはboolベースのコンセプト構文をもっていたが、新しいGCCは標準に準拠する。しかし、レガシー構文と準拠構文がどのようなときに使用できるのか十分に理解できていなかったために、GCCに指定するオプションによってコンパイルに失敗していた。新しいロジックでは、GCC 8以前は常にレガシー構文を使用する。それ以外の場合、GCCがC++20モード以降である場合に限り、準拠構文を使用する。これにより、GCCでのコーナーケースのビルド失敗が解決されることを期待している
  • バグ修正
    • Boost.Outcomeは現在、BOOST_NO_EXCEPTIONSが定義された状態でもコンパイルに成功するはずである。Boost.ExceptionのメンテナであるEmilのおかげで、グローバルにC++に例外が無効にされてもコンパイルできるようになった。ただしその場合、boost::exception_ptrを使用することはできない
    • GitHub #236 コルーチンのサポートでは、C++20標準で要求されているにも関わらず、final_suspend()noexceptではなかった。これは修正されたが、コンパイラがnoop_coroutineを実装している場合に限る。さらに、noop_coroutineが使用可能な場合は、はるかに効率的なコルーチンハンドルを使用してawait_suspend()の変種を返す。これによりコード生成とコンテキストスイッチのパフォーマンスが大幅に向上する

Polygon

  • C++20対応のために、event_comparison_type, vertex_equality_predicate_type, voronoi_predicatesを修正 (Glen Fernandes氏)

Preprocessor

  • __VA_OPT__をもつC++20モードでの可変引数データで、可変引数サイズが正しく0になるようサポート
    • これは、このC++20モードでは空の配列、空のリスト、空の可変引数の間での変換が有効になったことも意味する
    • エンドユーザーは、このライブラリでの空の可変引数データの詳細について、「variadic macros (可変引数マクロ)」トピックの「C++20 Support For Variadic Macros (可変引数マクロのC++20サポート)」パートで読むことができる
  • config/limits.hppで定義されるいくつかの制限を、翻訳単位 (TU, Translation Unit) でより高い値に変更できるようにした。エンドユーザーは「limitations (制限)」トピックを読んで、どの制限を変更できるかを理解する必要がある
  • あらゆるコンパイラで可変引数マクロが動作することを想定するよう更新した。表面上では、これがC++11以上を要求するようになったように思えるだろうが、GCC、Clang、VC++を含むほとんどの主要コンパイラは、C++98 / C++03に厳密には準拠しないが、C++98 / C++03モードでの可変引数マクロもサポートする

System

  • プラットフォーム固有のヘッダwindows_error.hpp, linux_error.hpp, cygwin_error.hppを非推奨化。将来のリリースで削除する予定
  • generic_category()system_category()の古い名前 (get_generic_category(), get_posix_category(), posix_category(), errno_ecat(), get_system_category(), native_ecat()) を非推奨化。将来のリリースで削除する予定
  • error_condition::failedを非推奨化。将来のリリースで削除する予定
    • error_conditionoperator bool()を以前のvalue() != 0の意味に戻した。次のリリースでは<system_error>標準ヘッダとの相互運用性がさらに向上する予定なので、この変更はstd::error_conditionとの互換性のために行われる。ただしこの変更はerror_code::failedには影響せず、それはいまだ健在である
  • 同じ理由で、バッファをとるバージョンのerror_condition::message()のオーバーロードを非推奨化。error_code::message()には影響しない

VMD

  • VMDでの数値の構文解析が更新され、エンドユーザーがプリプロセッサライブラリの数値の制限 (最大値) を変更できるようにした。BOOST_PP_LIMIT_MAGによって最大値を指定できる
  • BOOST_VMD_IS_GENERAL_IDENTIFIERマクロが追加され、識別子 (identifier) を固有識別子 (specific identifier) として登録しなくても、VMD識別子構文にマッチするプリプロセッサトークンを表す入力の構文解析のサポートを追加

Wave

  • 宇宙船演算子<=>を含むC++20トークンを追加
  • バグ修正
    • GitHub #94 再スキャン時の__LINE____FILE__の間違った振る舞いを修正

テスト済みコンパイラ

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

  • Linux:
    • Clang:
    • GCC:
    • Intel:
    • QCC:
  • OS X:
    • Apple Clang:
    • GCC:
    • Intel:
  • Windows:
    • GCC, mingw:
    • Visual C++:
  • FreeBSD:
    • GCC:
  • QNX:
    • QCC:

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

  • Linux:
    • Clang:
    • GCC:
    • GCC, C++11:
    • GCC, C++14:
    • Intel:
    • Intel, C++11:
  • OS X:
    • Apple Clang:
    • Apple Clang, C++11:
    • Apple Clang, C++14:
    • Clang:
    • Clang, C++11:
    • GCC:
    • Intel:
  • Windows:
    • GCC, mingw:
    • Visual C++:
  • FreeBSD:
    • GCC:
  • QNX:
    • QCC:

翻訳

Akira Takahashi