Skip to content

Latest commit

 

History

History
375 lines (291 loc) · 29.3 KB

1_87_0.md

File metadata and controls

375 lines (291 loc) · 29.3 KB

Boost 1.87.0リリースノート

本家リリースノート:

リポジトリは以下:

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

新ライブラリ

  • Parser
    • パーサー構築のフレームワーク。作者Zach Laine氏

更新ライブラリ

  • byte spanとそのシーケンスを、バッファシーケンスとして使用できるサポートを追加。これにより、async_readなどのI/O操作に直接渡すことができる
  • 非同期操作がエラーなしで完了したかどうかをテストできるgeneric dispositionのサポートを追加。これにはerror_codeexception_ptrが含まれるが、disposition_traitsクラステンプレートの特殊化によってユーザー定義の型に拡張できる。標準型のstd::error_codestd::exception_ptrがディスポジションとして認識される
  • boost::asio::use_future完了トークン、boost::asio::awaitable<>ベースのコルーチン、boost::asio::spawn()boost::asio::experimental::cancellation_conditionにディスポジションサポートを追加
  • execution_context::service_maker抽象基底クラスを追加。service_makerはexecution contextのコンストラクタに渡されるオブジェクトで、コンテキスト構築時にサービスを追加できる
  • boost::asio::configを追加。execution contextに関連する設定パラメータにアクセスできる。このクラスはAsioの内部、またはAsioの上に構築されるライブラリやユーザー提供の抽象化での使用を意図しており、特定の最適化の有効化/無効化などの動作を微調整するために使用される。boost::asio::config_from_envboost::asio::config_from_concurrency_hintboost::asio::config_from_stringなどの具体的な設定ソースをio_contextまたはthread_poolのコンストラクタに渡すことができる
  • Asioのio_contextthread_pool実装で認識される初期設定パラメータセットを追加
  • 以前に非推奨だった機能をいくつか削除
  • basic_io_objectdeadline_timerを非推奨化
  • associating binderに右辺値修飾のoperator()オーバーロードを追加。
  • モジュラービルド構造のサポートを追加
  • ムーブ専用型を返す関数のspawn()を修正
  • コンセプトサポートを必要としないようco_composedを修正
  • epollリアクターがfork後に通常のfile descriptorを再登録しないよう修正
  • ssl::detail::engineムーブ代入のリークを修正
  • BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLINGが定義されている場合のコンパイルエラーを修正
  • Clang 19を使用する際のコンパイルエラーを修正
  • thread_pool::join()を変更し、thread_pool::attach()で後に追加されるスレッドを確実に停止するようにした
  • ストリーム指向操作で使用されるio_uring_prep_write_fixedio_uring_prep_read_fixedに渡されるオフセットを修正
  • 詳細はRevision Historyを参照
  • GitHub #72 アトミック待機状態リストのメモリ再確保時の初期化を修正
  • APIの変更
    • basic_fields::insert()error_codeオーバーロードを追加
    • permessage-deflateの状態を照会するためのwebsocket::stream::get_statusのオーバーロードを追加
  • 修正
    • タイムアウト時にbad_executor例外を引き起こすhttp::basic_stream内のnet::dispatch呼び出しでのムーブ後使用を修正
    • 初期化関数内の変更操作を削除
    • teardown_tcp_opでのキャンセル処理を修正
    • on_finish_implを呼び出す前にbasic_parserstate_を設定
    • clamp関数からstatic指定子を削除
    • テストでの-Wattributes警告に対処
    • テストでの到達不能コード警告に対処
  • 改善
    • beast::http名前空間の型の前方宣言ヘッダーを追加
    • http::parsererror_codeオーバーロードを使用したbasic_fields::insert()を使用できるよう修正
    • http::basic_parserheader_limit_をトレーラーヘッダーに適用
    • http::basic_parserhttp::error::header_limitをより早く返すように改善
    • モジュラーBoostビルド構造のサポートを追加
  • 謝辞
    • Jackarain, Saleh Hatefinya, René Ferdinand Rivera Morell
  • __ibm128をlong double formatとして使用するPPC64LE アーキテクチャのサポートを修正
  • Windows ARM64プラットフォームでの組み込み関数の使用を修正
  • std::float128_tまたは__float128を使用した固定小数点の指定精度でのフォーマットを修正
  • get_executorで定数参照を返す要件を削除
  • 実験的/構成を追加
  • to_array.hppを追加(Ruben Perez Hidalgo氏の貢献)
  • static_vectorsmall_vectorstored_sizeオプションを追加
  • バグ/問題を修正:
    • GitHub #261 終端イテレータは参照できない問題を修正
    • GitHub #288 small_vectorでflat_map::extract_sequence`を使用する際のコンパイルエラーを修正
  • 1.84.0で発表されたように、Windows 10より前のバージョンはサポートされなくなった
  • GitHub #325 Windowsでは、canonicalGetFinalPathNameByHandleW WinAPI関数に基づくようになった。副次的効果として、ドライブ文字は大文字に変換され、結果のパスの相互運用性が向上した
  • [v4:] canonicalは、入力パスに末尾のディレクトリ区切り文字 (trailing directory separator)がある場合でも、結果のパスに末尾のディレクトリ区切り文字を生成しなくなった
  • GitHub #326 pathコンストラクタまたはメンバ関数が、pathに変換可能なユーザー定義型の引数と1つ以上のSource型で呼び出された場合、デフォルトでpathへの変換が選択されるようになった。これにより一部の引数変換のあいまいさが解消される可能性があるが、変換パスが最適でない場合もある。異なる変換パスが必要な場合、ユーザーには明示的な型キャストの使用を推奨される
  • GitHub #328 FreeBSD 9以前のdirfdがマクロである場合の回避策を追加
  • マルチスレッドシナリオで優れたパフォーマンスを提供する、Boost.Unorderedの並行コンテナに基づくconcurrent_factoryを追加
  • GitHub #15 以前に例外送出しないとドキュメントに記載されていたboost::flyweight操作にnoexceptを付与
  • 改善
    • コードの一部でtypedefの代わりにusingを使用
    • コードの一部でエイリアスを使用してメタ関数を現代化
    • モジュラービルド構造のサポートを追加
    • CMakeカバレッジの完全化(GitHub Actionsのcmakeテストを追加)
    • ドキュメントワークフローの改善
    • QtとWxWidgetsの例を更新
    • C++17と23に備えて列挙を追加
  • 重大な変更
    • 非推奨のリスケーリングコードを削除
  • 解決した問題
  • GitHub #85 function_output_iteratorstd::output_iteratorコンセプトに準拠するよう修正
  • Boostの依存関係を11から7に削減。
  • <boost/interprocess/containers/*.hpp>ヘッダーを非推奨にした。2011年にはBoost.Containerの元ソースを参照していたが、現在はメンテナンスされていない。長期的な移行として、Boost.Interprocessはこれらのヘッダーを互換性のために維持してきた。将来のBoostリリースで削除される
  • Cygwinのいくつかの回避策を追加。リグレッションテストがCygwin64で動作するようになった
  • ABI破壊的変更: segment_managerが、オーバーアラインされた型をサポートし、既存のバグを修正する新しい実装を使用。Boost 1.87より前のABIを取得するには、Boost.Interprocessヘッダーをインクルードする前にBOOST_INTERPROCESS_SEGMENT_MANAGER_ABI1として定義すること
  • バグを修正:
    • GitHub #152 shared_memory_objectEINTRを処理
    • GitHub #173 管理共有メモリセグメントの値が整列されていない
    • GitHub #192 managed_windows_shared_memoryが破壊時にクラッシュ
    • GitHub #199 char_wchar_holderの代入演算子でm_is_wideが不足/誤用
    • GitHub #210 boost::interprocess::ipcdetail::sync_handles::obtain_mutexのバグ
    • GitHub #215 SPARC 32ビットでboost/interprocess/segment_managerのアラインメント問題
    • GitHub #217 managed_map_filefind_or_constructがキャッシュアラインメントされたメモリを返さない
    • GitHub #230 MinGWでinterprocess::ipcdetail::intermodule_singletonが動作しない
    • GitHub #236 get_current_process_creation_timeの浮動小数点の不正確さによりintermodule_singletonの失敗
  • 直接的なシリアライズ
  • Boost.JSON型のGDBプリティプリンタを追加
  • 構造体への変換で不明なキーを無視
  • value_toの例外ラッピング動作を簡素化
  • 非推奨のinitializer listの動作を削除
  • 非推奨の型エイリアスを削除
  • MinGW ARM64での正確な64ビット乗算を使用
  • サイズの異なるタプルでのparse_intoの処理を修正
  • シーケンスの許容サイズより大きな入力サイズをチェック
  • GCC 14でのvalue_refのセグメンテーション違反を修正
  • Boost.Integerへの依存性を削除し、コンパイル時間を短縮
  • Boost.Threadの同期プリミティブをC++標準ライブラリの同等物と置き換えた。これにより、マルチスレッドのパフォーマンスが向上する可能性があるが、ユーザー側での影響もある
    • Boost.Threadのスレッド割り込み機能はサポートされなくなった。Boost.Logは、Boost.Threadによってスレッド割り込みを実装するために使用される thread_interrupted 例外に対して特別な処理を行わなくなった。この例外は他の任意の例外と同様に扱われる
      • とくに、ユーザー指定の例外ハンドラが thread_interrupted のペンディング例外で呼び出されることがある
    • timed wait操作について、タイムアウトは現在std::chronoの時間単位を使用している。これは、bounded_ordering_queue クラスと unbounded_ordering_queue クラスがサポートする ordering_window という名前付きパラメータが、Boost.DateTimeの boost::posix_time::time_duration ではなく std::chrono::duration の値を期待することを意味している
    • スレッド同期プリミティブによって示されるエラーの場合、Boost.Threadの例外型の代わりに std::system_error 例外が送出される
  • strictest_lock にC++標準ライブラリのlock型のサポートを追加
  • メジャーアップデート
  • 多数の特殊関数および分布が、CUDA(NVCCおよびNVRTC)およびSYCLをサポートするようになった
  • GitHub #1163 mapairy distribution、holtsmark distributionおよびsaspoint5 distributionを追加
  • GitHub #1159 landau distributionを追加した
  • GitHub #1169 beta quantileにおける予期しない例外を修正した
  • いくつかのバグを修正:
    • Git Issue #56 std型の前方宣言が、一部のプラットフォームでコンパイルエラーを引き起こす
  • mp_lambdaを追加(提供者:Joaquin M Lopez Munoz氏)
  • float128 をtrivially copyableにした
  • __float128 を非GNUモードでも浮動小数点型とみなすよう修正
  • 実験的なAPIへの破壊的変更:
    • connection_poolでのスレッドセーフティ機能が再設計され、ユーザーの経験によって見つかったいくつかの設計の欠陥を克服した
      • thread_safeというboolオプションがpool_paramsに追加され、デフォルトではfalseに設定されている。設定すると、一部のプール関数が挙動を変更して並行に安全に使用できるようになる。これは内部でstrandを作成し、必要なときにそれにディスパッチし、cancel signalを再配線することで機能する
      • pool_params::thread_safefalseの場合、通常のAsio executorのセマンティクスが適用され、オーバーヘッドはない
    • pool_executor_paramsは削除され、pool_params::connection_executorpool_params::thread_safeに置き換えられた
    • connection_pool::async_get_connectionの組み込みタイムアウト機能が完全に削除された。この関数は現在、個々の操作のキャンセルをサポートしており、同じ機能はasio::cancel_afterを使用することで達成できる
    • connection_poolの破棄をすると、ほかのAsio I/Oオブジェクトと同様に、未処理の非同期操作がキャンセルされる。これによりリソースのリークが防止される
    • 利用可能なコネクションがまだない状態でasync_get_connection操作がキャンセルされた場合、操作は現在、プールの状態に応じて一貫してclient_errc::pool_not_runningclient_errc::no_connection_available、またはclient_errc::pool_cancelledで失敗する
    • client_errc::timeoutclient_errc::cancelledが削除された
    • プールが実行中でない状態でasync_get_connectionを呼び出すとすぐには失敗せず、async_runの呼び出しを待つ
    • sequenceは所有型を返すようになった。これにより、with_paramsと共に遅延非同期操作で使用することが安全になった
    • sequenceは別のヘッダー、boost/mysql/sequence.hppに移動された
  • any_connection、クライアント側のSQLフォーマット(format_sqlおよびwith_paramsを含む)、およびconnection_poolを安定したAPIに昇格させた
  • connectionとそのエイリアスであるtcp_connectiontcp_ssl_connection、およびunix_connectionの代わりに使用する新規コードとして、any_connectionが推奨される
  • クエリテンプレート文字列とパラメータを包括する新しい ExecutionRequest である with_params を追加した
  • with_diagnosticsを追加した。これは同期的に例外を送出する関数の動作と一致するように、非同期関数によって送出される例外に diagnostics オブジェクトを含むアダプタ完了トークンである
  • with_diagnostics(asio::deferred)は現在、any_connectionconnection_poolのすべての操作のデフォルトの完了トークンである
  • connection_poolの非同期関数は現在、操作ごとのキャンセルをサポートしている
  • すべての非同期操作は現在、asio::cancel_afterasio::cancel_atおよび同様の完了トークンをサポートしている
  • connectionany_connectionは現在、即時の完全性をトークンの即時エグゼキュータ (immediate executor) を介してディスパッチする
  • 以前に接続されていないany_connectionを使用しようとするとクラッシュする問題を修正した
  • fieldの潜在的に例外送出可能なコンストラクタから間違ったnoexcept指定子を削除した
  • 設定されたバッファサイズの制限を超える可能性があった書き込みバッファサイズの問題を修正した
  • ドキュメントとサンプルコードを大幅に更新し、新しい推奨されるベストプラクティスを反映させるようにした
  • 破壊的変更 C++03のサポートを削除した。C++11以上を要求するようになった。少なくとも一部のC++11の機能が必要となる
  • Boost.Utilityへの依存関係を削除
  • Boost.Predefへの依存関係を削除
  • Boost.StaticAssertへの依存関係を削除
  • Boost.Moveへの依存関係を削除
  • 一部の関係演算の実装をわずかに高速化した
  • 警告 将来のリリースでは、std::ranges::range<optional<T>>trueになるように、optionalにRangeインターフェースを導入する予定。これは、std::ranges::rangeのような、述語に基づいて決定を下すプログラムのオーバーロード解決に影響を与える可能性がある
  • タグin_place_initin_place_init_ifinline constexprになり、その結果、実行ファイルのフットプリントが小さくなった。これはGitHub #103の問題を解決する
  • GitHub #171 boost::pfr::for_each_field_with_name関数が追加された (Lena氏に感謝)
  • GitHub #120 大きなサイズと小さなフィールド数を持つ構造体のコンパイル時間が大幅に改善された (Zachary Wassall氏に感謝)
  • pragmaディレクティブを修正
  • C++20モジュールへの初期サポートを追加した。詳細はドキュメントを参照
  • GitHub #183, GitHub #187 core_name14_disabled.hpp内の未使用変数の警告を修正 (Anarthal (Rubén Pérez)氏に感謝)
  • C++17における集成体内のフィールド数のデフォルト制限を100から200に引き上げた
  • GCCが-Wundefined-var-templateを認識していないことに関する警告を修正
  • 複数の軽微なコンパイル時間の改善
  • (v2) Windowsでのasync_waitのキャンセルを実装した
  • (v2) FORCE_DISABLE_CLOSE_RANGEを追加した
  • (v2) ext: BSDおよびSolarisの複数のext修正
  • (v2) 未使用の ext 関数が現在コンパイルされ、 operation_not_supported エラーが与えられるようになった(IOSを含む)
  • (v2) 複数のリンクを修正
  • (v2) リンクされたライブラリからfilesystemが削除された - 使用されるfilesystemライブラリの機能としては、ヘッダーファイルに実装があるもののみとなった
  • (v1) 1.88に対する非推奨通知を追加
  • C++03のサポートを終了し、C++11のコンパイラが必要となる。これにはGCC 4.8以降、またはMSVC 14.0以降が含まれる
  • マクロ BOOST_SP_ENABLE_DEBUG_HOOKSBOOST_SP_USE_STD_ALLOCATORBOOST_SP_USE_QUICK_ALLOCATORBOOST_AC_USE_SPINLOCKBOOST_AC_USE_PTHREADSBOOST_SP_USE_SPINLOCK、およびBOOST_SP_USE_PTHREADSにより有効化される機能は非推奨となり、将来のリリースでそのサポートは削除される
  • GitHub #189 boost::stacktrace_from_exceptionのCMakeターゲットが追加された (int mian氏に感謝)
  • GitHub #186 MSVCでの静的ビルド時にboost_stacktrace_impl_return_nullptrをエクスポートしないようにした (huangqinjin氏に感謝)
  • Windows OSでclangを使用した際の、ole32.libDbgeng.libの自動リンクを修正した
  • GitHub #181 ドキュメントで欠落していた名前空間を修正した (Mats Taraldsvik氏に感謝)
  • GitHub #178 std::exception のインクルード不足を修正した (Julien Schueller氏に感謝)
  • GitHub #175 GCCが報告した型の変換エラーを修正した (agent_J氏に感謝)
  • GitHub #194 CLIからB2のfrom_exception機能を使用できるようにした (Dmitry Arkhipov
  • GitHub #71 シーケンスコンテナ swap の誤って記録された要件を正しくした。期待される戻り値は bool ではなく void である
  • GitHub #65 view_adaptor.hppのアダプターのデータメンバーに [[no_unique_address]] を追加した
  • GitHub #68 ClangとMSVCの最近のバージョンで __cpp_explicit_this_parameter を介してサポートをアドバタイズしていない this の推論を可能にした
  • GitHub #348 ダミー条件に対するclang tidyのサポートを修正した
  • GitHub #431 clangでの動的リンクを修正した
  • メジャーアップデート
  • 並行ノードベースコンテナ boost::concurrent_node_mapboost::concurrent_node_set を追加
  • 並行コンテナに insert_and_visit(x, f1, f2) および類似の操作を追加した。これは、挿入直後に要素を訪問することを可能にする(対照的に、 insert_or_visit(x, f) は、挿入が行われなかった場合にのみ要素を訪問する)
  • GitHub #265 要素の安全な可変変更を可能にするため、特定の boost::concurrent_flat_set 操作内で訪問を排他的にロック
  • Visual Studio Natvisでは、任意のファンシーなポインタ型をサポートした。このことは、適切なNatvisカスタマイズポイント "Intrinsic" 関数がファンシーポインタ型自体に対して書かれている限り、任意のファンシーポインタ型に適用できる
  • すべてのコンテナとイテレータにGDBのプリティプリンタが追加されました。ファンシーポインタを使用するアロケータを持つコンテナに対しては、ファンシーポインタ型そのものに対して適切なプリティプリンタが書かれている場合にのみ、これらは機能する
  • GitHub #277 オープンアドレッシングコンテナに対する std::initializer_list への代入の問題を修正した
  • 接続コンテナの std::initializer_list オーバーロードの insert_{and|or}_[c]visit にコピー不可能なコールバックを渡すことができるようにした。これは内部的にコールバックの std::reference_wrapper をイテレーターペアのオーバーロードに渡す
  • GitHub #856 機能追加: set_paramsencoding_optsをサポート
  • GitHub #857 リファクタリング: APIから非推奨のvariant2エイリアスを除外
  • GitHub #864 リファクタリング: query_ruleに一貫した解釈
  • 1.86で間違って削除した constexpr uuid を構築する機能を復元
  • バグ修正:
    • GitHub #220:C++20と空の文字列化パラメータでのセグメンテーション違反を修正 (Lu HongYi氏に感謝)
    • GitHub #222:含まれるファイルの最初の行が空白の場合に行ディレクティブがない問題を修正 (Nick Nobles氏に感謝)
    • ビルドの改善(モジュールビルドのサポートを含む) (René Rivera氏に感謝)

テスト済みコンパイラ

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

  • 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