本家リリースノート:
- https://github.com/boostorg/website/blob/master/feed/history/boost_1_88_0.qbk
- http://www.boost.org/users/history/version_1_88_0.html
リポジトリは以下:
リポジトリからのビルド方法は、egtraさんのブログを参照:
新ライブラリ
- Hash2
- 拡張性の高いハッシュ計算フレームワーク。作者Peter Dimov、Christian Mazakas
- MQTT5
- Boost.Asio上に作られたMQTT5クライアント。作者Ivica Siladić、Bruno Iljazović、Korina Šimičević
更新ライブラリ
- Array
- Asio
- Assert
- Beast
- Conversion
- DLL
- Geometry
- Graph
- Locale
- Lockfree
- Log
- Mp11
- MySQL
- Nowide
- PolyCollection
- SmartPtr
- Stacktreace
- TypeIndex
- Unordered
- Variant2
Array
- ドキュメントをAsciiDocに変換した(Christian Mazakas氏)
- 必要な場合に
noexceptとconstexprを追加した - 廃止された関数を非推奨とした
- 廃止されたコンパイラワークアラウンドを削除した
array<T, 0>::begin(),cbegin(),end(),cend()をnullptrを返すように変更し、constexprを有効にした。これはstd::arrayの挙動と一致する- ローカルの
hash_valueオーバーロードを削除した。boost::hashは配列のような型をネイティブにサポートする array<T, 0>は現在、={}で初期化することができるoperator<=>を追加したto_arrayを追加した
Asio
local::basic_endpointメンバ関数のいくつかにnoexcept修飾子を追加し、ip::basic_endpointと整合性を持たせたboost::asio::configクラスの整数値の処理を修正したexperimental::ranged_parallel_groupでの「ムーブ後の使用エラー (use-after-move error)」を修正したexperimental::promiseの実装における誤ったデフォルトテンプレート引数を修正したio_uring実装を修正し、フォーク後に内部descriptorをリアクターに再登録しようとすることがないようにしたthread_poolのデフォルトコンストラクタで初期化されていないメンバを修正したstd::spanをboost::asio::buffer関数に渡した際に生じた曖昧なオーバーロード問題を修正した- 非推奨のbuffer機能の削除後に残っていた一部の偽のマクロ定義を削除した
- ファイルオープン時の
file_base::flagsの使用について明確化するドキュメントを追加した - 利用可能なランタイム設定オプションについての概要ドキュメントを追加した
- 完了トークンとして
deferredがデフォルトで使用されるように、概要ドキュメントを更新した async_resultのドキュメントを更新し、現在の型要件がトレイトの特殊化部分に置かれていることを反映した
Assert
BOOST_ASSERT_HANDLER_IS_NORETURNが定義されている場合、boost::assertion_failedとboost::assertion_failed_msgはBOOST_NORETURNとして宣言される
Beast
- 修正
iequals関数での範囲外アクセスを修正
- 改善点
- SSLの例をアップデートし、ピア証明書のホスト名を検証するよう修正
- CMakeListsをリファクタリング
- 例からBoost.Scopeへの依存関係を削除
- WebSocketのピアへのpingがアクティビティとしてカウントされるよう修正
- ドキュメンテーション
- Unixドメインソケットの新しい例を追加
- ドキュメントにSSL/TLS証明書セクションを追加
websocket::stream::async_closeのドキュメントを改善
- 謝辞
- Morten M. Neergaard氏
Conversion
- サンプルコードとライブラリコードに、現代的なC++を使用するようにした
DLL
- GitHub #82
boost::dll::shared_libraryへのnative_handle_tからのコンストラクタを追加 (Tiago Matos氏に感謝) - Spirit, SmartPtr, Move, TypeTraits, Functionなど他のBoostライブラリへの依存関係を排除で、DLLのコンパイルが軽量化した
- APIでの
std::error_code&がboost::system::error_code&の代わりに使われるようになった。boost::system::error_codeはstd::error_code&に変換可能なため破壊的な変更ではない boost::dll:import_*関数がstd::shared_ptrを返すように変更。古い挙動を復元するためにBOOST_DLL_USE_BOOST_SHARED_PTRを定義した。ただし、このマクロは今後のリリースで削除される予定- サンプルとライブラリコードで現代的なC++を使用
boost::dll::library_infoが壊れたバイナリの場合は常に例外を送出するよう修正。ドキュメントを更新してテストを追加RTLD_NODELETEが欠けている理由と.release()メソッドがない理由をFAQで説明を追加。可能なワークアラウンドを提供する- ライブラリのビルドと使用に関する情報を更新。CMakeターゲットはプラットフォームに必要な場合に「
-ldl」でリンクすること - Windows OSの長いパスに対する
detail::path_from_handle実装を修正 - ドキュメントで
boost/dll/smart_*部分が実験的で未完成であることを強調 boost/dll/smart_*部分の多数のマングリング問題を修正
Geometry
- 改善点
- GitHub #1370 球面正規化の半周期チェックを緩和
- GitHub #1368 rtreeのspatial述語でのumbrella戦略をパス
- GitHub #1367 横断の改善
- GitHub #1361 整数座標を持つランダムグリッド上での集合操作をテスト
- 複数のテストケースを追加
- コードの一部でtypedefの代わりにusingを使用するよう修正
- 問題の解決
- GitHub #1364 複数の戦略を修正 (getterの追加、コンパイルエラーと警告の修正)
- GitHub #629 座標変換と未使用パラメータの警告を避ける
- エラーと警告の各種修正
Graph
- バグ修正
maximum_weighted_matchingの実装を置換し、複数の問題を解決named_graphが使用される前に初期化されているよう事前条件を設定is_straight_line_drawingのカスタムジオメトリコードをBoost.Geometryに置換し、非常に小さい角度での結果が正しくなるように修正undirected_dfsでのfinish_edgeへの不正なコールバックを修正
- パフォーマンス向上
adjacency_list:vectorベースのストレージ内のadd_vertexからresize/reserveへの不必要な呼び出しを削除。速度計測では、グラフ構築の時間が10%改善したlengauer_tarjan_dominator_tree:std::dequeをstd::vectorに置換し、大きなグラフでは約40%の改善を達成
- 一般的な改良点
- いくつかのBoostユーティリティの使用をC++14言語機能で置き換え
- 例をC++14言語特性で現代化
- ドキュメンテーションとビルドシステムのさまざまな修正
vertex_by_propertyがミュータブルなグラフを必要としなくなったcycle_cancelingとClang 19のコンパイル問題を修正
Locale
- 必要なICUバージョンを4.8.1以上に引き上げ
- ICU 50.1のサポートを終了
- GitHub #241 浮動小数点形式の入力文字列での整数のパースを修正
- GitHub #246 ICUバックエンドでの
uint64_t値のパースとフォーマットをサポート - より広いプラットフォームでの
char8_tサポート
Lockfree
- 新たな
spsc_valueを追加、トリプルバッファに基づくロックフリーのsingle-producer / single-consumer値
Log
- C++20以降のモードで
std::codecvt<char16_t>とstd::codecvt<char32_t>のロケールのファセットの使用を無効化、これらはC++20で非推奨となったため、これはchar16_tとchar32_tへの・からの文字コード変換がC++20以降で利用できなくなることを意味する - GitHub #241 CMakeとMinGW-w64を使用した時のビルド問題を修正
- GitHub #245
text_file_backendが既存のファイルに追記するように設定された場合、アクティブに書き込まれたファイル名パターンにカウンタプレースホルダーがなく、ターゲットファイル名パターンにはあった場合、およびログファイルが直接ターゲットストレージに書き込まれた場合に使用された不正なファイルカウンタを修正
Mp11
- 非整数値に対する
mp_from_sequenceを修正 (1.83.0でオフセットサポートの影響で誤って壊れていた)
MySQL
- GitHub #395
connection_poolは、セッション確立中の多くの接続が存在する場合でも、正しくリサイズするようになった。古いアルゴリズムでは、特定の条件下でプールが期待通りにリサイズされない可能性があった - GitHub #408
any_connection::connection_idを追加。この関数は接続のIDを取得し、その後、KILLSQLステートメントでクエリをキャンセルするために使用できる。この関数は公式のC APIのmysql_thread_idと等価である - GitHub #405 別の操作が進行中の
connectionまたはany_connectionで非同期操作を開始しようとすると、未定義の動作を引き起こすことがなくなった。代わりにclient_errc::operation_in_progressで失敗する - GitHub #448
connectionまたはany_connectionがマルチファンクション操作に従事している間に操作を開始しようとすると、潜在的に危険なパケットの不一致が発生することがなくなった。代わりにclient_errc::engaged_in_multi_functionで失敗する - GitHub #450 セッションが確立していない接続を使用しようとするときの診断を改善。操作は
client_errc::not_connectedで失敗する - GitHub #199
connectionとany_connectionの操作ごとのキャンセルに関する競争条件を修正。以前のバージョンでは、中間の非同期操作が完了した後、しかしそのハンドラが呼び出される前にキャンセル信号が発生した場合、信号は無視されていた。これはもはやそうではなくなった fieldのコンストラクタとstd::string_viewからの代入は、C++20ではなくC++17で利用可能になった。これらの関数は、C++20でのみ利用可能な標準の機能テストマクロによってガードされていました。これらはBoost.Configと同等のものに置き換えられた- C++20のコルーチンを用いたHTTPサーバーの例を追加
- 同期コードと非同期コードのインターフェイスに関するドキュメントページを追加。これはレースコンディションを含んだ同期接続プールのスニペットを置き換える
- 他のいくつかの例とドキュメントページを改善
Nowide
- GitHub #191
getenvをスレッドセーフにした
PolyCollection
boost::variant_collectionを追加、std::vector<std::variant<...>>と似た振る舞いをする閉じた多態コレクション
SmartPtr
- ワイドストリーム用の
operator<<を修正 (偶然1.87.0で壊れてしまっていた)
Stacktrace
- GitHub #198 MSVC実装で完全なモジュールパスを決定するために
GetModuleNamesを使用するよう修正 (Daniel Krügler氏に多大なる感謝) - GitHub #200 ベースアドレスを知らなくても後でアドレスをデコードできるように、相対アドレスを印字した。このロジックは
BOOST_STACKTRACE_DISABLE_OFFSET_ADDR_BASEを定義することで無効化できる (Maciej Czarnecki氏に多大なる感謝) - GitHub #202 すべてのstacktraceライブラリをB2機能として公開。ビルドの制御をより良くし、どのライブラリがビルドされるかの明確な情報を提供。詳細は「Configuration and Build」セクションを参照 (Uilian Ries氏に多大なる感謝)
- MinGWでの
stacktrace_from_exceptionビルドを修正 (crhilton氏に感謝)
TypeIndex
- 1.84で導入され、ライブラリをclang-20でビルドできないようにしたUBを修正
Unordered
- ドキュメンテーションをAntoraを使用したマルチページフォーマットに移行
Variant2
- インデックスに適切な最小の符号なし型を使用
テスト済みコンパイラ
主要なテストコンパイラ:
- 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