本家リリースノート:
- https://github.com/boostorg/website-v2-docs/blob/develop/release-notes/boost_1_92_0.adoc
- https://www.boost.org/releases/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
- Beast
- Charconv
- Container
- ContainerHash
- Conversion
- Decimal
- DLL
- Filesystem
- Geometry
- Graph
- Hash2
- Heap
- ICL
- Interprocess
- Iterator
- LexicalCast
- Lockfree
- Math
- Mp11
- MSM
- MultiIndex
- Multiprecision
- MySQL
- PFR
- PolyCollection
- Redis
- Stacktrace
- System
- TypeIndex
- Unordered
- URL
- Wave
Assert
BOOST_ENABLE_ASSERT_HANDLERとBOOST_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
eraseとsmall_vector<std::string>でのコンパイルエラー - GitHub #338
uses_allocator_construction.hpp:#include .../config_end.hppの不足
boost::container::vector、boost::container::static_vector、boost::container::small_vectorにunchecked_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_t、decimal64_t、decimal128_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 プラットフォームにおいて、
opendir、readdirおよびその同等の関数から返されるEINTRエラーコードを処理するようになった。ドキュメント化されていないが、このエラーコードは Apple の OS や一部の BSD システムで返されることがあると報告されている
Geometry
- 改善 (
geometry):- GitHub #1458
varray実装を廃止し、Boost.Container のstatic_vectorを使用するようになった - GitHub #1459 種々の Boost 依存関係をリファクタリング/削減
- GitHub #1461 Andoyer 逆測地線計算の短距離での精度を改善
- GitHub #1458
- 解決した問題 (
geometry):- GitHub #1399 ユニットテスト
index_rtree_exceptions_rstが失敗する - GitHub #1452 GCC でのパフォーマンス低下
- GitHub #714 引用ガイドラインの不足
- GitHub #1471 ほぼ同一の 2 つの矩形に交差がない
- エラーおよび警告の各種修正
- GitHub #1399 ユニットテスト
Graph
- GitHub #453 モジュラリティに基づくクラスタリングのための Louvain コミュニティ検出アルゴリズムを追加
- GitHub #450 Boost.StaticAssert への依存を削除
- バグおよび正確性の問題の修正:
- GitHub #443
adjacency_listのシリアライズで使用される型を修正 - GitHub #505
adjacency_list.hppのedge_property_typeを初期化 - GitHub #504 誤ったアクセサの戻り値型を修正
- GitHub #443
- 型とコード品質のモダン化:
- GitHub #508 いくつかのヘッダで不足していた
const修飾子を追加し、typedefをusingに置換 - GitHub #497, GitHub #498, GitHub #499
random.hpp、bandwidth.hpp、king_ordering.hppの縮小変換を除去 - GitHub #513 非推奨の
std::random_shuffleをstd::shuffleに置換 - GitHub #510, GitHub #511, GitHub #512
-Wunused-*警告を抑制し、使用されていないテスト変数を削除 - GitHub #514 GCC の
-Wsign-compare警告を解消
- GitHub #508 いくつかのヘッダで不足していた
- ドキュメント: GitHub #469, GitHub #491, GitHub #509, GitHub #517, GitHub #519 ドキュメント全体を更新し、新しいビジュアルデザインに移行
Hash2
std::optionalの組み込みサポートを追加std::variant、std::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のロックが意図した範囲より多くのコードをカバーしていた
- GitHub #280 AIX ビルドの修正:
Iterator
- C++14 以降で、対応するイテレータ特性と等価な
is_*_iterator_v変数テンプレートを追加 - GitHub #96
distanceおよびadvanceアルゴリズムが、イテレータ引数に対してis_iteratorがtrueを返すことを要求するよう制約された
LexicalCast
- GitHub #96 C++20 モジュール
boost.lexical_castを実装。Fedor Osetrov氏の PR に感謝
Lockfree
- 本リリースは C++14 をサポートする最後のリリースである。将来のリリースでは C++17 が必要となる
- 新しい
boost::lockfree::mpsc_weak_queueを追加。マルチプロデューサー・シングルコンシューマーのキュー。pushとpopは個々には 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 #178 メモリフットプリント削減のため、
- 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.pfrがimport 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モジュール
- safe_dump インタフェースのための
- GitHub #231 C++20 モジュール
boost.stacktraceがimport 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_indexがimport 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_macroがtrueを返す場合に、定義済みマクロ(__FILE__、__LINE__、__INCLUDE_LEVEL__)が 2 回展開される
- GitHub #243
更新ツール
- B2: B2 バージョン 5.5.3 のリリースを含む
テスト済みコンパイラ
主要なテストコンパイラ:
- 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