最終更新日時:
が更新

履歴 編集

Boost 1.92.0リリースノート

本家リリースノート:

リポジトリは以下:

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

全般的な注意事項

  • これまでのリリースでは、Windows の .dll ファイルは b2 install によってライブラリディレクトリ(デフォルトでは <PREFIX>/lib)にインストールされていた。ただし Cygwin では例外で、バイナリディレクトリ(デフォルトでは <PREFIX>/bin)にインストールされていた。これが変更され、.dll ファイルは一貫してバイナリディレクトリにインストールされるようになった。これはほとんどのユーザーが望む動作である。互換性のため、b2 install に新しいコマンドラインオプション --dlldir が追加され、ディレクトリをオーバーライドして必要であれば <PREFIX>/lib を指すようにできる
  • b2 install によってインストールされる CMake 設定ファイルが更新され、ヘッダオンリーのライブラリを find_package のコンポーネントとして要求できるようになった。つまり、find_package(Boost REQUIRED COMPONENTS mp11) のような記述が動作するようになった(ターゲット Boost::mp11 が定義される)。従来はコンパイル済みライブラリのみがコンポーネントとして扱われ、これは動作しなかった。これは CMake で Boost をビルドした際にインストールされる CMake 設定ファイルの動作と一致しており、Boost がどのようにビルド・インストールされたかにかかわらず同じ方法で利用できるようになる。この正規化の一環として、ほとんど使われていなかった COMPONENTS ALL を要求する機能は削除された。この機能は CMake による Boost ビルドではサポートされておらず、FindBoost でもサポートされていなかった

新ライブラリ

なし

更新ライブラリ

Assert

  • BOOST_ENABLE_ASSERT_HANDLERBOOST_ENABLE_ASSERT_DEBUG_HANDLER の両方が定義されているまれなケースにおける BOOST_VERIFY を修正

Beast

  • websocket::stream がクローズコード 1014(bad gateway)を受理するようになった
  • http::basic_parser がトレーラー内のコネクションおよびフレーミングフィールドを無視するようになった
  • http::parser がトレーラーで運ばれるフレーミングおよびコネクション制御フィールドを破棄するようになった
  • http::basic_parser が HTTP/1.0 リクエストにおけるチャンク転送エンコーディングを拒否するようになった
  • http::basic_parser がフィールドの順序にかかわらず Transfer-Encoding と併記された Content-Length を拒否するようになった
  • http::basic_parser が chunked で終わらない Transfer-Encoding を持つリクエストを拒否するようになった
  • http::basic_parser がチャンク拡張内の quoted-string を検証するようになった
  • http::message::prepare_payload がボディを持つ 1xx レスポンスを拒否するようになった
  • websocket::stream が最上位ビットが立った 64 ビットフレーム長を拒否するようになった
  • ファイル操作が成功時に error_code をクリアするようになった
  • server-flex-awaitable の例が、キャンセルをタスクの strand にディスパッチするようになった
  • Boost.Functional への依存を削除

Charconv

  • CUDA サポートを追加。整数に対する to_chars および from_chars の両方を CUDA カーネル内で使用可能になった
  • PPC64LE 上の Clang のサポートを修正。このプラットフォームでは long double__float128 が別個の型として維持されるが、従来は static_assert によって不正とみなされていた

Container

  • Joaquín M. López Muñoz氏が設計した新しい boost::container::hub コンテナを追加。詳細は Container ドキュメントの Hub Container の章を参照
  • バグ/問題の修正:
    • GitHub #334 P2363R5 の実装における誤ったオーバーロード解決の保護
    • GitHub #336 erasesmall_vector<std::string> でのコンパイルエラー
    • GitHub #338 uses_allocator_construction.hpp: #include .../config_end.hpp の不足
  • boost::container::vectorboost::container::static_vectorboost::container::small_vectorunchecked_emplace_back および unchecked_push_back を追加
  • C++23 P1518 の変更を実装: すべてのコンテナのアロケータ拡張コンストラクタを修正し、コンテナの推論ガイドが過剰に制約されないようにした

ContainerHash

  • 無効値状態 (valueless) の std::variant インスタンスのハッシュ化が例外をスローしなくなった

Conversion

  • GitHub #43 C++20 モジュール boost.conversion を実装。Fedor Osetrov氏の PR に感謝

Decimal

  • 初期の CUDA サポートを追加。decimal32_tdecimal64_tdecimal128_t を CUDA カーネル内で使用可能になった
  • decompose 関数を追加。正規化せず(すなわち現在のコホートのまま)、仮数部・指数部・符号を返す

DLL

  • GitHub #114 shared_library からの smart_library コンストラクタを修正。R. Savchenko氏の PR に感謝
  • GitHub #110, GitHub #111, GitHub #112 C++20 モジュール boost.dll を実装。Fedor Osetrov氏の PR に感謝

Filesystem

  • テンプレート版の initial_path を非推奨とし、v4 から削除した。非テンプレート版を代わりに使用すること
  • GitHub #349 より多くの POSIX プラットフォームで readdir_r の代わりに readdir を使用するようになった。具体的には Mac OS およびその他の Apple の OS、FreeBSD、OpenBSD、DragonFly BSD、NetBSD、QNX 6.0 以降、Solaris 10 以降、Illumos ベースのシステム。gcc を使用する Solaris ユーザーは、Boost のビルド時にターゲットの Solaris バージョンに応じた __SunOS_5_x マクロ(例: __SunOS_5_11)を定義することが推奨される
  • スレッドセーフでない readdir を持つプラットフォームのサポートは非推奨となり、将来のリリースで削除される予定。POSIX.1-2024 までは必須ではないものの、モダンなシステムでは readdir は異なるスレッドで別個の DIR オブジェクトを使用する限りスレッドセーフであり、一部のシステムでは readdir_r が非推奨とマークされている。POSIX.1-2024 もこれに合わせて更新され、readdir_r を廃止予定 (obsolescent) とし、仕様の将来のバージョンで削除される計画である
  • POSIX プラットフォームにおいて、opendirreaddir およびその同等の関数から返される EINTR エラーコードを処理するようになった。ドキュメント化されていないが、このエラーコードは Apple の OS や一部の BSD システムで返されることがあると報告されている

Geometry

  • 改善 (geometry):
    • GitHub #1458 varray 実装を廃止し、Boost.Container の static_vector を使用するようになった
    • GitHub #1459 種々の Boost 依存関係をリファクタリング/削減
    • GitHub #1461 Andoyer 逆測地線計算の短距離での精度を改善
  • 解決した問題 (geometry):
    • GitHub #1399 ユニットテスト index_rtree_exceptions_rst が失敗する
    • GitHub #1452 GCC でのパフォーマンス低下
    • GitHub #714 引用ガイドラインの不足
    • GitHub #1471 ほぼ同一の 2 つの矩形に交差がない
    • エラーおよび警告の各種修正

Graph

  • GitHub #453 モジュラリティに基づくクラスタリングのための Louvain コミュニティ検出アルゴリズムを追加
  • GitHub #450 Boost.StaticAssert への依存を削除
  • バグおよび正確性の問題の修正:
    • GitHub #443 adjacency_list のシリアライズで使用される型を修正
    • GitHub #505 adjacency_list.hppedge_property_type を初期化
    • GitHub #504 誤ったアクセサの戻り値型を修正
  • 型とコード品質のモダン化:
  • ドキュメント: GitHub #469, GitHub #491, GitHub #509, GitHub #517, GitHub #519 ドキュメント全体を更新し、新しいビジュアルデザインに移行

Hash2

  • std::optional の組み込みサポートを追加
  • std::variantstd::monostate の組み込みサポートを追加

Heap

  • 本リリースは C++14 をサポートする最後のリリースである。将来のリリースでは C++17 が必要となる

ICL

  • GitHub #54, LWG4752 libc++ はバージョン 22 以降、連想コンテナの一部の検索アルゴリズムを ICL の前提と動作を壊す形で変更した。この問題を解決するためライブラリ内部をリファクタリングし、連想コンテナの非異種検索 (non-heterogeneous lookup) に関する C++ 委員会の将来の決定に対して ICL が堅牢であるようにした
  • GitHub #54 std::iter_value_t<element_iterator> と、GCC 10-12 の書き換えられた関係演算子の扱いに関する C++20 関連の問題を修正
  • GitHub #54 GCC 10-11 のコード生成バグを修正

Interprocess

  • バグ修正:
    • GitHub #280 AIX ビルドの修正: get_invalid_systemwide_thread_id の戻り値型を修正
    • GitHub #281 message_queue_t のロックが意図した範囲より多くのコードをカバーしていた

Iterator

  • C++14 以降で、対応するイテレータ特性と等価な is_*_iterator_v 変数テンプレートを追加
  • GitHub #96 distance および advance アルゴリズムが、イテレータ引数に対して is_iteratortrue を返すことを要求するよう制約された

LexicalCast

  • GitHub #96 C++20 モジュール boost.lexical_cast を実装。Fedor Osetrov氏の PR に感謝

Lockfree

  • 本リリースは C++14 をサポートする最後のリリースである。将来のリリースでは C++17 が必要となる
  • 新しい boost::lockfree::mpsc_weak_queue を追加。マルチプロデューサー・シングルコンシューマーのキュー。pushpop は個々には wait-free だが、キューは線形化可能 (linearizable) ではなく、テールの交換とノードのリンクの間で停止したプロデューサーがキューを恒久的に破壊しうるため、厳密には lock-free ではない
  • 新しい boost::lockfree::bounded_ticket_queue を追加。リングバッファベースの有界 MPMC キュー。シングルプロデューサー・シングルコンシューマー構成では線形化可能かつ wait-free である。マルチプロデューサーまたはマルチコンシューマー構成では、スロットを確保したまま停止したスレッドが進行を妨げうるため、厳密には lock-free ではない

Math

  • スチューデントの t 分布および非心 F 分布に自由度の探索機能を追加
  • CUDA コンパイルにおいて、ホスト関数がコンパイル中に不正にデバイス関数としてマークされていた問題を修正
  • 分布のテストカバレッジを増加し、いくつかのオーバーフローを修正

Mp11

  • 多くのアルゴリズムのパフォーマンスを改善(Jonathan Poelen氏の貢献)

MSM

  • 新機能 (backmp11):
    • GitHub #220 ロギングサポートのためのオブザーバー API を提供
    • GitHub #229 Kleene イベントを変換なしでアクションおよびガードに転送
    • GitHub #221 基本例外保証を保証し、例外を呼び出し元に伝播
    • GitHub #197 リフレクション API と、Boost.Serialization、Boost.JSON、nlohmann/json 向けのシリアライズサポートを提供
    • GitHub #244 terminate および interrupt 状態の処理を刷新し、machine_state 列挙型を提供
    • GitHub #239 設定可能なイベントプールとインライン記憶域
    • API リファレンスと例が利用可能になった
  • バグ修正 (backmp11):
    • GitHub #198 実行中でないにもかかわらずステートマシンがイベントを処理する
  • 破壊的変更 (backmp11):
    • GitHub #178 メモリフットプリント削減のため、process_event(...) のイベントは自動的にはエンキューされなくなった。アクション内では enqueue_event(...) を使用すること
    • GitHub #232 バックエンドはコンストラクタ引数をフロントエンドに転送しなくなった。フロントエンドはデフォルト構築可能でなければならない。カスタムコンストラクタを使用する場合は、バックエンドで定義すること
    • 非推奨 API の process_queued_events() および process_single_queued_event() は削除された。代わりに process_event_pool(...) を使用すること
    • GitHub #222 デフォルトのアクティブ状態切り替えポリシーが、UML 仕様に準拠して「ソースの exit 後」に設定された。その他のオプションは UML 非準拠であり、削除される予定
    • GitHub #242 バックエンドは back 名前空間の列挙型のエイリアスではなく、新しい列挙値を持つ独自の process_result 型を使用するようになった。旧列挙値は非推奨であり、削除される予定
  • GitHub #184 fix(back, back11): 直交領域におけるイベント遅延での無限再帰(1.78 からのリグレッション)

MultiIndex

  • ファンシーポインタのサポートが拡張され、multi_index_container のイテレータが要素への参照をアロケータのポインタ型を通じて格納するようになった。特に、Boost.Interprocess のアロケータを使用してイテレータを共有メモリに配置できるようになった
  • GitHub #94 非常に大きなコンテナサイズでリハッシュする際のハッシュインデックスのパフォーマンス問題を修正。Daniel Král氏の貢献

Multiprecision

  • ライブラリの他の部分に合わせて、float128 に data() メンバ関数を追加
  • Clang で constexpr expression templates のコンパイルを妨げていた問題を修正

MySQL

  • GitHub #511 サーバーがデフォルトで使用する文字セットを設定する方法を追加し、文字セットの追跡をより賢くした。冗長な SET NAMES 文の回避に使用できる。pool_params::charset_strategy および connect_params::server_default_charset を参照
  • GitHub #512 pool_params::ping_interval のデフォルト値を 1 時間から 10 秒に短縮。切断された接続の検出が改善される
  • GitHub #501 不完全なメッセージを受信した際のデータ回転の頻度を減らすことで読み取りバッファを最適化。@vsoulgard氏の貢献
  • GitHub #505 CI テスト用の TLS 証明書がリポジトリにコミットされる代わりに動的に生成されるようになった。脆弱性スキャナーが報告する問題を解消する

PFR

  • GitHub #233 C++20 モジュール boost.pfrimport std の有無両方でテストされるようになった。Fedor Osetrov氏の PR に感謝

PolyCollection

  • WG21 の提案文書 P2944R3 に従い、variant_collection_value_type_impl<Ts...> の関係演算子が、対応する関係演算子がすべての Ts... で利用可能な場合にのみ利用可能となるようにした
  • GitHub #34 libc++ v21 以降との非互換性の問題を修正

Redis

  • GitHub #428 完了したがハンドラがまだ呼び出されていないリクエストをキャンセルしようとした際の、connection 内の未定義動作を修正。これは std::deque に対する誤った erase-remove の使用によって発生していた。@L0rentz氏の貢献
  • GitHub #415 単一のネットワークパケットで多数の小さなメッセージが到着した際の CPU 消費を削減するため、バッファ回転を最適化
  • GitHub #424 config 構造体のすべてのメンバに初期化子を追加。指示付き初期化子 (designated initializers) を使用して config オブジェクトを作成できるようになった
  • GitHub #409 CMake からスタンドアロンワークフローを削除。これは内部開発向けの、ドキュメント化されていない Boost.Redis の CMake 利用方法だった

Stacktrace

  • GitHub #230, GitHub #227 C++20 モジュールを実装。Fedor Osetrov氏の PR に感謝
    • safe_dump インタフェースのための boost.stacktrace_dump モジュール
    • 各 unwind/収集実装方式のための boost.stacktrace_<backend> モジュール
    • 利用可能な最良のバックエンド実装を公開する boost.stacktrace モジュール
  • GitHub #231 C++20 モジュール boost.stacktraceimport std の有無両方でテストされるようになった。Fedor Osetrov氏の PR に感謝
  • GitHub #225 MinGW における Boost::from_exception のリンクを修正。Orgad Shaneh氏の PR に感謝

System

  • void を返す関数に対する unwrap_and_invoke を修正

TypeIndex

  • GitHub #47 C++20 モジュール boost.type_indeximport std の有無両方でテストされるようになった。Fedor Osetrov氏の PR に感謝

Unordered

  • ライブラリのすべてのコンテナに C++20 レンジとの相互運用性を追加: insert_range(並行コンテナには加えて insert_range_(or|and)_[c]visit)、std::from_range 構築、および関連する CTAD 推論ガイド。C++23 の std::from_range の代替として、またはそれが利用できない場合のために、boost::unordered::from_range 構築タグが提供される
  • GitHub #348 非常に大きなコンテナサイズでリハッシュする際の、closed-addressing コンテナのパフォーマンス問題を修正。Daniel Král氏の貢献

URL

  • GitHub #995 正規化されたパスが // で始まる、authority を持たない URL に対する normalize_path のヒープバッファオーバーフローを修正
  • GitHub #994 埋め込まれた IPv4 アドレスの前に h16 がない場合(例: https://[::.)の ipv6_address_rule における未初期化読み取りを修正
  • GitHub #994 大文字小文字を区別しない比較、ハッシュ化、format における符号なし整数オーバーフローのサニタイザー検出を修正
  • GitHub #990 url_base::edit_params におけるデコード後のクエリサイズの追跡を修正
  • GitHub #988 第 3 ラウンドのセキュリティレビューによる修正: null ソースからの url_view のコピー、2 つの誤った noexcept 指定子、セグメントを逆順にイテレートする際のデコード後の長さの追跡

Wave

  • 桁区切り文字(C++14)、module キーワード(C++20)、size_t リテラル(C++23)を導入
  • バグ修正:
    • GitHub #243 find_include_file がディレクトリをインクルードファイルとして誤って受理する
    • GitHub #246 expanding_object_like_macrotrue を返す場合に、定義済みマクロ(__FILE____LINE____INCLUDE_LEVEL__)が 2 回展開される

更新ツール

テスト済みコンパイラ

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

  • Linux:
    • Clang, C++03: 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 12.0.0, 13.0.0, 14.0.0, 15.0.0
    • Clang, C++11: 3.4, 11.0.0, 13.0.0, 14.0.0, 15.0.0
    • Clang, C++14: 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 5.0, 12.0.0, 13.0.0, 14.0.0, 15.0.0
    • Clang, C++17: 6.0.1, 7.0.0, 8.0.0, 9.0.0, 10.0.0, 11.0.0, 12.0.0, 13.0.0, 14.0.0, 15.0.0
    • Clang, C++20: 11.0.0, 12.0.0, 13.0.0, 14.0.0, 15.0.0
    • GCC, C++03: 4.6.3, 11, 12
    • GCC, C++11: 4.7.3, 4.8.5, 11, 12
    • GCC, C++14: 5.4.0, 6.4.0, 7.3.0, 8.0.1, 9.1.0, 11, 12
    • GCC, C++17: 7.3.0, 8.0.1, 9.1.0, 11, 12
    • GCC, C++20: 8.0.1, 9.1.0, 10, 11, 12
  • OS X:
    • Apple Clang, C++03: 11.0.3
    • Apple Clang, C++11: 11.0.3
    • Apple Clang, C++14: 11.0.3
    • Apple Clang, C++17: 11.0.3
    • Apple Clang, C++20: 11.0.3
  • Windows:
    • Visual C++: 10.0, 11.0, 12.0, 14.0, 14.1, 14.2, 14.3

翻訳

Akira Takahashi