最終更新日時:
が更新

履歴 編集

Boost 1.91.0リリースノート

本家リリースノート:

リポジトリは以下:

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

全般的な注意事項

  • Boost.StaticAssertBoost.Config にマージされた。コード、テスト、ドキュメントが対象となる。後方互換性のため、StaticAssert の git submodule、CMake、b2 のターゲットは引き続き利用可能であり、これらのターゲットは単に Config への依存を導入するものとなっている。最終的には、この submodule およびターゲットは削除される予定である。ユーザーは StaticAssert への依存を Config に置き換えるよう更新することが推奨される。C++ コードの修正は不要である。ほとんどの Boost ライブラリはこれに合わせて更新済みである

新ライブラリ

  • Decimal
    • IEEE754 10進浮動小数点数の実装。作者Matt Borland氏、Christopher Kormanyos氏

更新ライブラリ

Any

  • CMake における import std の検出を修正
  • boost::anys::basic_any の実装を簡素化

Asio

  • インライン名前空間によるオプションのバイナリバージョニングを追加。同一プロセス内で複数の Asio バージョンがシンボル衝突なく共存できるようになった
  • Windows のデフォルトのミューテックス実装を CRITICAL_SECTION から SRWLOCK に変更
  • std::atomic に基づくslimミューテックス実装を追加。これによってstrand、ソケット、その他のディスクリプタの状態サイズを削減
  • Cygwin64 でのコンパイルをサポート(__USE_W32_SOCKETS なしを含む)
  • Asio ヘッダのインクルード前に BOOST_ASIO_DECL をオーバーライドできるようにした
  • NetBSD における MSG_NOSIGNAL の扱いを修正
  • boost_system へのリンクをサポートしなくなった最近の Boost バージョンにおけるビルドを修正
  • 古い Android 上の musl libc との互換性を修正
  • 古い Apple プラットフォームでの std::aligned_alloc の検出を修正
  • MSVC における serial_port_base::character_size::store の警告を修正
  • ドキュメントにおいて ip::multicast::outbound_interface の IPv4 と IPv6 のセマンティクスを明確化
  • TLS v1.3 のコンテキスト初期化を更新し、LibreSSL サポートを正しく検出するよう変更
  • X509const 性に関する最近の OpenSSL API 変更との互換性を修正
  • 詳細は 改訂履歴 を参照

Atomic

  • GitHub #79 Apple コンパイラ使用時の PowerPC における thread_pause のコンパイルを修正

Beast

  • inflate_with_eb における型キャスト警告を修正
  • チャンクヘッダに8KBのサニティ制限を適用
  • テストにおけるOpenSSLの依存をオプション化
  • Boost.StaticAssertへの依存を削除
  • HTTP フィールド列挙型に HTTP2-Settings を追加

Charconv

  • 絶対値が 2^64 未満の負の 128 ビット整数に対する to_chars のオーバーフローを修正

Core

  • GitHub #90 ヘッダ boost/is_placeholder.hpp を Bind から Core へ移動

Describe

  • C++20 において、囲むクラスがまだ不完全な場合でも、記述されたネストされた列挙型が動作するようになった(Julien Blanc氏の貢献)
  • enum_to_stringconstexpr 化(Julien Blanc氏の貢献)

DynamicBitset

  • operator-( const bit_iterator_base< Iter > & lhs, const bit_iterator_base< Iter > & rhs ) に対する不足していた friend 宣言を追加
  • 生ポインタをイテレータとして使用する標準ライブラリ実装でのコンパイルを修正
  • from_block_range() がビットセットの未使用部分にビットを設定しないよう修正

Exception

  • カスタマイズ可能なシリアライゼーション API を追加。Boost.JSON および nlohmann/json の組み込みサポート付き

Filesystem

  • Boost.Filesystem が独自のプラットフォームマクロ BOOST_FILESYSTEM_POSIX_API および BOOST_FILESYSTEM_WINDOWS_API を定義・使用するようになった。従来の BOOST_POSIX_API および BOOST_WINDOWS_API マクロは引き続き Boost.System が定義する。Boost.Filesystem は2つのマクロセットが一致しているかをチェックし、デフォルトでは一致しない場合にコンパイルを失敗させる。BOOST_FILESYSTEM_ALLOW_SYSTEM_API_MISMATCH1 に定義することでコンパイルエラーを警告に軽減でき、2 に定義することで完全に無効化できる。ただしこの場合、Boost.Filesystem が返すエラーコードの値はエラーカテゴリと一致しない点に注意
  • openat および関連 API をサポートしない POSIX プラットフォームにおいて、recursive_directory_iterator のインクリメント時、シンボリックリンク追跡が無効な状態で破損したシンボリックリンクに遭遇した際に報告されるエラーを修正
  • Cygwin ユーザー向けの破壊的変更: ライブラリが Cygwin を POSIX プラットフォームとして扱うようになった。これにはユーザー視点でいくつかの影響がある。特に以下の通り:
    • path::value_type 型が wchar_t から char に変更された。他の POSIX プラットフォームと同様に、ワイド文字パスは path::imbue で設定されたロケールを用いてナロー文字エンコーディングに変換される。Cygwin は Windows 上で動作するため、内部的にも文字コード変換を行う点に注意。Cygwin 環境のロケールが正しく設定されていることが重要である
    • パス構文が POSIX 規約に従うようになり、Windows 固有のパス(UNC パス、ドライブ名、パスプレフィックスなど)はサポートされない
    • API の Windows 固有部分の一部にアクセスできなくなる。リパースポイントは Windows 専用機能であるため、file_type::reparse_file はファイルに対して報告されなくなる。リパースポイントの処理は Cygwin ランタイムの動作に依存する
    • Cygwin は独自のシンボリックリンク実装を持ち、Windows ネイティブのシンボリックリンクとは互換性がない。Boost.Filesystem は Cygwin のシンボリックリンクを作成・操作するようになる
    • Boost.Filesystem が返すエラーコードは POSIX errno 値を使用するようになる
  • DragonFly BSD、NetBSD、Solaris において、Boost.Filesystem のデフォルトパスロケールがパス文字エンコーディングに UTF-8 を使用するようになった
  • Linux において、従来ブラックリストに登録されていたファイルシステムに加えて、configfs、securityfs、cgroup、cgroup2 ファイルシステムに対しても copy_file および copyread/write ループ実装を使用するようになった

JSON

  • std::initializer_list からの value の構築を value_from を使用するよう変更

LEAF

  • カスタマイズ可能なシリアライゼーション API を追加。Boost.JSON および nlohmann/json の組み込みサポート付き
  • Windows 上で DLL 境界を越えた LEAF エラーオブジェクトの使用をサポート(デフォルトでは無効)
  • 内部 TLS API の改善(例: Win32、組み込み)
  • 診断システムおよび on_error 実装の改善
  • 実装品質の改善(例: noexcept のより正確な使用)
  • 非推奨の verbose_diagnostic_info を削除(diagnostic_details に置換済み)

LexicalCast

  • C++20 モジュール boost.lexical_cast の初期バージョンを実装

Log

  • Cygwin におけるプロセス間通信サポートのビルドをデフォルトで有効化

Math

  • non_central_f_distribution に対するパラメータ探索関数 find_non_centrality を追加
  • non_central_t_distribution に対するパラメータ探索関数を追加
  • 不完全ガンマ関数の対数を求める関数 lgamma_q を追加
  • 下側不完全ガンマ関数の対数を求める関数 lgamma_p を追加
  • pchipdomain() 関数を追加
  • ロジスティック分布で壊れていた CUDA サポートを修正
  • Windows on ARM64 における不正な浮動小数点 traits を修正
  • 大きな引数に対する ibeta の不正な結果を修正
  • phi 引数が N * PI / 2 のときの ellint_2 の不正な結果を修正
  • NVCC の存在に基づいて CUDA を想定するのではなく、ユーザーに対して CUDA の明示的な有効化を要求するよう変更

MultiIndex

  • 破壊的変更: ライブラリが受け入れまたは提供するすべての型リスト(indexed_bytag、ネストされた typedef index_specifier_type_listindex_type_listiterator_type_listconst_iterator_type_list)が Boost.MPL ベースではなくなり、Boost.Mp11 リストに変更された。これにより、Boost.MultiIndex は Boost.MPL に依存しなくなった。ほとんどのユーザーコードには影響しないと考えられるが、マクロ BOOST_MULTI_INDEX_ENABLE_MPL_SUPPORT をグローバルに定義することで従来の動作を復元可能。Boost.MPL のレガシーサポートは将来的に非推奨化および削除される可能性がある
  • 破壊的変更: composite_key および関連クラステンプレート(composite_key_equal_tocomposite_key_comparecomposite_key_hash)が可変引数テンプレートに変更された(従来はテンプレート引数の最大数が BOOST_MULTI_INDEX_LIMIT_COMPOSITE_KEY_SIZE で制限されていた)。この変更はユーザーに対して透過的であるべきだが、composite_key::key_extractorsboost::tuple ではなく std::tuple を返すようになった点が例外である(影響を受ける他のクラステンプレートも同様)
  • C++11 以前のコンパイラをサポートするための内部回避策とフォールバックを削除

MSM

  • 新機能 (backmp11):
    • GitHub #173: 階層的ステートマシンにおける deferred_events プロパティのサポートを改善
    • GitHub #155: deferred_events プロパティによる条件付き遅延をサポート
    • GitHub #175: 関数オブジェクトのシグネチャを簡素化
    • GitHub #168: キューイングされたイベントと遅延イベントを単一のイベントプールに統合
    • GitHub #172: イベントプール内のイベントに対する小オブジェクト最適化
    • GitHub #180: flat_fold ディスパッチ戦略による実行時パフォーマンスの改善
    • バージョン 1.90 と比較して、最大 25% のコンパイル時間短縮と RAM 消費量の削減をさらに最適化
  • バグ修正 (backmp11):
    • GitHub #167: on_entry(...) および on_exit(...) 呼び出し時の不正な FSM 型を修正
    • GitHub #166: 完了イベントが過剰に発火する問題を修正
    • GitHub #200: 階層的ステートマシンにおける遷移が正しく選択されない問題を修正 (favor_compile_time)
    • GitHub #205: state_machine がムーブできない問題を修正
  • 破壊的変更 (backmp11): イベントプールへの直接アクセスを public から protected に変更。ライブラリコード外からの操作は未定義動作を引き起こす可能性があるため

OpenMethod

  • boost::intrusive_ptr との相互運用

Optional

  • 完全な C++11 サポート(「制限なし共用体 (unrestricted unions)」と参照修飾子を含む)を持つコンパイラにおいて、実装をaligned storageからunion storageに変更。これにより段階的な constexpr サポートが可能になった:
    • C++11 では、一定の制約を満たす型に対し、一部のコンストラクタおよび const 修飾付きアクセッサがコンパイル時コンテキストで使用可能になった(コア定数式)
    • C++14 では、一部の変更操作もコア定数式になった(optional の状態を「値なし」から「値あり」に変更する操作を除く)。これは協調型に対して適用される
    • C++17 では、すべてのコンストラクタ(コピーおよびムーブを含む)が協調型に対してコア定数式になった
    • これは GitHub #132 および GitHub #143 に対応する
  • 破壊的変更: swap のカスタマイズ機構を廃止。このメカニズムはほとんど知られておらず、ドキュメント化もされていなかった
  • std::optional のインタフェースに近づけるための小さな変更:
    • optional オブジェクトを「値なし」状態にするための構文 o = {} を有効化
    • デフォルト構築された T を使用する構文 o.value_or({}) を有効化
    • o = u (ooptional<T> 型、uT に変換可能な U 型) の構築において一時的な T を生成しないよう変更
  • GitHub #142 optional<T>& から optional<T&> への変換を追加
  • none_tstd::equality_comparable になり、none_toptional<T>std::equality_comparable_with コンセプトをモデル化するようになった(std::equality_comparableT に対して)。これにより、optional オブジェクトの範囲に対して std::ranges::find(rng, boost::none) が使用可能になった
  • 警告: 将来のリリースで optional にRangeインタフェースを導入する予定であり、std::ranges::range<optional<T>>true になる。これは std::ranges::range などの述語に基づいて判断するプログラムのオーバーロード解決に影響する
    template <typename T>
    void serialize(T const& v)
    {
      if constexpr (std::ranges::range<T>)
        serialize_as_range(v);
      else if constexpr (custom::is_optional_like<T>)
        serialize_as_optional(v);
      else
        serialize_as_value(v);
    }
    

PFR

  • 実験的な C++26 リフレクションベースの実装を追加。有効にするにはマクロ BOOST_PFR_USE_CPP26_REFLECTION1 に定義する
  • boost::pfr::for_each_field*() 関数が状態をもつビジターで正しく動作するようになった

Random

  • binomial_distribution において符号なし整数型が意図せずサポートされていなかった問題を修正

Redis

  • GitHub #345, GitHub #391, GitHub #237 Sentinel デプロイメントの組み込みサポートを追加。config::sentinel を使用して設定可能。ライブラリがマスター/レプリカの検出、エラー検出、再接続を自動的に処理する
  • GitHub #340, GitHub #356, GitHub #358, GitHub #378, GitHub #383, GitHub #263 generic_flat_response を追加。flat_response の高性能な代替であり、連続メモリを使用し定常状態ではアロケーションがゼロになる。Nikolai Vladimirov氏のPRに感謝
  • サーバープッシュ処理の全般的な改善:
    • GitHub #375, GitHub #367 サブスクリプション追跡のサポートを追加。再接続のたびにアクティブなサブスクリプションを復元する。request::subscriberequest::psubscriberequest::unsubscriberequest::punsubscribe を使用してアクセス可能
    • GitHub #390, GitHub #349 push_parser を追加。PubSub関連メッセージのパースを容易にするビュー
    • GitHub #381, GitHub #340, GitHub #331 connection::async_receive および connection::receive非推奨化。より高速なバッチ処理が可能な async_receive2 の使用を推奨
    • consume_one非推奨化。代わりに generic_flat_response::clear の使用を推奨。詳細は PubSub の例を参照
    • ドキュメントと例を改善
  • GitHub #392 config::usernameconfig::passwordconfig::client_nameconfig::database_index非推奨化。代わりに config::setup の使用を推奨。セットアップリクエストの構成を簡素化する request::hello および request::hello_setname を追加
  • GitHub #389, GitHub #395 ログメッセージのレベルをより適切に調整: 設定およびネットワークエラーに level::error、接続成功に level::info、詳細出力に level::debug
  • GitHub #342, GitHub #341 request::append() を追加。リクエストオブジェクトを連結する
  • GitHub #363, GitHub #360 std::tuple 要素を持つ範囲を渡した場合に request::push_range が不正なコマンドを生成する問題を修正
  • GitHub #364, GitHub #361 パブリックヘッダから <ostream> を削除し軽量化

Stacktrace

  • 互換性のないランタイムに対するコンパイル時チェックを削除。これにより誤検知がなくなり、from_exception 機能がそのまま動作するようになった。互換性のない/リークするランタイムのまれなケースはランタイムで報告されるようになった
  • GitHub #219 cygwin で from_exception を無効化。David McFarland氏の PR に感謝
  • has_addr2line の C++ 標準ライブラリとのリンクを削除し、システムデフォルトでない libstdc++.so でのビルドを簡素化

System

  • operator|(result<T&>, U) の戻り値型を非参照に変更
  • r & f でメンバへのポインタをサポート(boost::compat::invoke を使用)
  • ライブラリがヘッダオンリーであるにもかかわらず、CMake config ファイルをインストールするようになった。これは find_package(Boost COMPONENTS system ...) を含むサードパーティの CMakeLists.txt ファイルの破壊を回避するため
  • C++20 以降で error_code がさらに constexpr
  • resultunsafe_value を追加
  • result<>::operator* および result<>::operator->!has_value() の場合に例外をスローするよう変更(従来は事前条件)。従来の動作は unsafe_value() で記述
  • boost/system/unwrap_and_invoke.hpp を追加

Test

  • GCC 10 未満における std::optional の適切な比較のためのフレンド演算子を追加

TypeIndex

  • C++20 以降の CTTI 型比較を最適化
  • ctti_type_index::name() が C++14 以降のモダンな C++ 標準でデフォルトで整形された値を返すよう変更。ライブラリバイナリのサイズを削減

Unordered

  • GitHub #344 並行コンテナにおける範囲挿入の戻り値を修正

URL

  • 機能追加:
    • GitHub #976 すべてのパース関数が C++20 で constexpr になり、コンパイル時の URL パースおよび検証が可能になった
    • GitHub #953 クエリコンテナに get_or を追加。キーが存在しない場合にデフォルト値を返す
    • GitHub #952 スタンドアロンの decode および decoded_size フリー関数を追加
    • GitHub #950 grammar::range に対するユーザー提供の RangeRule サポートを追加。カスタム文法規則を利用可能
    • GitHub #966 すべてのビュー型に対して std::ranges::enable_borrowed_range を特殊化
    • GitHub #964 token_rule_t に EBO およびデフォルト構築を追加
    • GitHub #962 セグメント用の natvis ビジュアライザーを追加
  • パフォーマンス:
    • GitHub #969 内部 URL オフセットを size_t から uint32_t に変更。64 ビットプラットフォームでのオブジェクトサイズを削減
  • 修正:
    • GitHub #986 ..解決による normalize_path のあいまいさを修正
    • GitHub #949 空の string_view 入力に対する parse_query のガード追加
    • GitHub #978 = を含む値に対する params_iter_impl::decrement() のデコード後サイズを修正
    • GitHub #978 decode_view::remove_prefix / remove_suffix のアサーションを修正
    • GitHub #963 pct_string_view::operator*() に対する decode_view の完全性を修正
    • GitHub #959 サンプルのルーターをムーブ専用に変更
    • GitHub #981 tuple_rule における GCC の偽陽性 -Wmaybe-uninitialized を修正
    • GitHub #982, GitHub #988 Laurel Lye Systems Engineering によるセキュリティレビュー: 3 ラウンドの評価、21 件の確認済み修正、パブリックインタフェース境界テストおよび fuzz テストを追加
  • ドキュメント:
    • GitHub #987 設計根拠のページを追加
    • GitHub #970 プラススキーム規約をドキュメント化
    • レガシーの QuickBook ドキュメントを削除

UUID

  • boost/uuid/uuid_io.hppfrom_chars を追加
  • string_generatornoexceptoperator() オーバーロードを追加
  • string_generatorcharwchar_t に加えて Unicode 文字型をサポート
  • C++14 以降かつ最近のコンパイラにおいて、ほとんどの uuid アクセサ・操作・to_chars が可能な限り constexpr になった
  • to_chars の SIMD 実装を追加。UUID のフォーマットで最大 5.5 倍のパフォーマンス改善(Andrey Semashev氏)
  • from_chars の SIMD 実装を追加。UUID のパースで最大 13 倍のパフォーマンス改善(Andrey Semashev氏)
  • boost/uuid/uuid_io.hppuuid_from_string を追加
  • 後方互換性のために std::runtime_error から派生した専用の invalid_uuid 例外クラスを追加

Variant2

  • holds_alternative<T> および get<T> が、T が代替型のリストに正確に1回出現する必要がなくなり、少なくとも1回出現すればよいよう緩和された

テスト済みコンパイラ

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

  • 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