最終更新日時:
が更新

履歴 編集

Boost 1.90.0リリースノート

本家リリースノート:

リポジトリは以下:

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

新ライブラリ

  • OpenMethod
    • C++17以上でのオープン (マルチ) メソッドのライブラリ。作者Jean-Louis Leroy氏

更新ライブラリ

Beast

  • http::parser が非標準トレーラーフィールドを拒否する挙動をデフォルトにした
  • http::basic_parser がトレーラーフィールド専用コールバックを使用するようにした
  • http::field 定数を更新
  • flat_buffer および multi_buffer におけるアロケータのムーブ/コピー代入を修正
  • 部分メッセージ消費時の websocket permessage-deflate エラーを修正
  • http::buffer_body が空チャンクを無視するよう修正
  • http::basic_fields::contains メンバ関数を追加
  • Boost.Preprocessor および Boost.StaticAssert への依存を削除

Bloom

  • パフォーマンス向上のため、バルクモードの挿入と検索を追加
  • blockfast_multiblock32fast_multiblock64 における分岐なしルックアップ実装によるパフォーマンス向上(とくに成功/失敗が混在する問い合わせに効果的)

Charconv

  • クロスコンパイル時の CMake における quadmath 検出を修正
  • 浮動小数点版の to_chars において、十分に大きいバッファが不足と誤判定される問題を修正

Compat

  • to_underlying.hpp を追加(Braden Ganetsky による貢献)

Container

  • deque を再実装。旧実装は SGI 由来のデータ構造(libstdc++ と類似)に基づくもの。主な変更点:
    • sizeof(deque) を 10 ワードから 4 ワードへ削減(おそらくもっとも軽量な実装)
    • sizeof(deque::iterator) を 4 ワードから 2 ワードへ削減(libc++ と MSVC に類似)
    • 分割構造を持つ deque の高速化のため、複数の内部アルゴリズムを再実装
    • デフォルト設定を微調整し、64bit プラットフォームではデフォルトブロックサイズを従来の SGI 512 バイトから 1024 バイトへ変更
    • 将来的な deque 系バリエーションや最適化を容易にする実装へ改善
  • バグ修正
    • GitHub #248: flat_map における Boost 1.80.0 以降の挿入速度低下を修正
    • GitHub #254: C++20 std::erase_if に対応
    • GitHub #293: UBSAN による非アラインアクセス警告の修正
    • GitHub #294: CMake におけるヘッダオンリー Boost.Container 使用オプションの追加
    • GitHub #300: Clang 20 ビルド時の警告を修正
    • GitHub #304: カスタムアロケータ使用時の small_vector の問題を修正
    • GitHub #305: -Wstrict-prototypes に関する警告を修正
    • GitHub #307: MSVC 警告 C4146(unsigned negation)全箇所の修正
    • GitHub #309: Boost 1.86 での static_vector パフォーマンス低下の修正
    • GitHub #306: __cpp_sized_deallocation 未定義によるエラーの修正
    • GitHub #310: flat_mapemplace / emplace_hint ドキュメントでの型の記載ミスを修正
    • GitHub #312: std::allocator::is_always_equal 非推奨への対応
    • GitHub #317: Issue #209 に対する変更の一部を都市消し(コンパイラ警告関連)
    • GitHub #321: devectorpmr アロケータで動作しない問題の修正

Conversion

  • Boost.SmartPtr への依存を削除

Core

  • GitHub #205 BOOST_TEST_THROWS および BOOST_TEST_NO_THROWboost/core/lightweight_test.hpp 内)の実装を変更し、ifelse ブロック内使用時に一部コンパイラで警告が出る問題を回避。これに伴う副作用として、マクロ呼び出し末尾のセミコロンが必須となった
  • GitHub #206 boost::data および boost::size を、コンパイラが提供する場合はそれぞれ std::datastd::size のエイリアスとして定義。boost::std:: の両候補が ADL により見える状況での曖昧性を解消

DLL

  • GitHub #106 std::error_codeboost::system::error_code& に渡される場合の問題を修正(Thomas Klausner氏 による修正)
  • GitHub #103 CMake によるインストール問題を修正(Yury Bura氏 による修正)
  • size 変数のシャドウイングを修正

DynamicBitset

  • C++20 イテレータを追加
  • 基礎となるコンテナ型の選択を可能にした
  • C++20 以降での constexpr 対応を追加
  • push_back()pop_back()lowest_bit() を高速化
  • basic_string からのコンストラクタを explicit に変更
  • いくつかの依存関係を削除
  • push_front()pop_front()find_first_off()find_next_off() を追加。また C 文字列および basic_string_view(C++17 以降)からのコンストラクタを追加
  • ストリーム挿入子が出力中に例外発生した場合、badbit を設定するよう変更
  • ストリーム抽出演算子が内部 vector 由来の例外を再送出するよう変更
  • ドキュメントを MrDocs と Antora に移行

Filesystem

  • GitHub #338 permissions 操作の成功時に渡された error_code をクリアするよう修正
  • GitHub #334 Windows において、Samba 3.0.2 の共有で SMB 署名が必須の場合に directory_iterator のコンストラクタが “Invalid Signature” エラーで失敗する問題へ回避策を追加

Flyweight

Geometry

主な改善

  • GitHub #1409: polyhedral surfacesに対する is_valid アルゴリズムを実装

改善点

解決した問題

  • GitHub #1006: bg::projections::detail::epsg_to_parameters による過剰なコンパイル時間の問題を修正
  • その他、複数のエラーおよび警告の修正

GIL

  • 改善
    • GitHub #773: ドキュメントの改善(ヒストグラムおよび誤字)、最新 Sphinx 版でのビルドを修正
  • 解決した問題

Interprocess

  • ドキュメントの細かな修正
  • バグ修正
    • GitHub #245: UBSan による実行時エラー(boost::interprocess::mode_t のロード)を修正
    • GitHub #269: ドキュメントの軽微な修正およびテンプレートパラメータ名を変更

JSON

  • Boost.Align と Boost.StaticAssert への依存を削除
  • より高速なハッシュアルゴリズムへ切り替え

LexicalCast

  • 浮動小数点の特殊値から整数・bool への変換に対するテストと修正を追加。float から bool への lexical_cast 時に発生する警告 C4804 を修正
  • GitHub #87 Boost.TypeTraits への依存を削除。主要部分を実装した Romain Geissler 氏に感謝。
  • GitHub #85 暗黙変換から明示的変換への切り替えによるコンパイラ警告を回避。この修正を行った bmagistro 氏に感謝。
  • GitHub #86 ドキュメントの誤りを修正。この修正を行った ivanpanch 氏に感謝。
  • unsigned short から wstring への変換において wchar_t 組み込み型が存在しない場合の退行を修正

Locale

  • GitHub #266 B2 ビルドファイルを修正し、静的ライブラリのみ要求された場合に動的版 Boost ライブラリをビルドしないよう変更
  • ISO8859-1/ISO8859-8 エンコーディング要求時、対応する Windows ロケールが ISO8859 をサポートしない場合に "C" ロケールではなく Windows コードページ 1252/1255 を利用可能に変更
  • Cygwin の stdlib が一部長い UTF-8 シーケンスを UTF-16 へ変換する際の問題に対する回避策を有効化

Log

  • value_ref のvisit処理における最適化漏れを修正
  • GitHub #252 text_file_backend におけるログファイルローテーションの無駄な長いループを修正。ファイル名パターンにカウンタが含まれず、rotation_size を超えた場合に毎回同じファイルを開き続ける問題
  • text_file_backend におけるファイルサイズチェックの整数オーバーフロー耐性を強化

Math

  • 新サブライブラリ「逆モード自動微分(Reverse-Mode Automatic Differentiation)」を追加
  • 新定数 log_pi を追加
  • logitlogistic_sigmoidlogistic 分布に適切なプロモーションポリシーを追加
  • 特殊関数に対する多数の修正およびエッジケース対応

Mp11

  • 固定サイズリストで mp_reverse_fold が動作するよう更新

MQTT5

  • Boost.Spirit への依存を削除
  • GitHub #38 自動再接続が限定的なホワイトリストではなく 任意のトランスポート層エラー を契機に発動するよう変更
  • Logger インタフェースに at_transport_error コールバックを追加

MSM

  • ドキュメントを刷新し、Antora を使用するようにした
  • 新バックエンド backmp11 を追加。大幅なコンパイル時間短縮、API の再設計、新機能の追加。{cpp}17 が必要(詳細はドキュメントに記載)
  • GitHub #87: boost::any が Kleene イベントとして動作しなくなった問題を修正

Multiprecision

  • 新しい cpp_double_fp_backend のテストとカバレッジを大幅に強化

MySQL

  • Clang 4.0 未満のサポートを非推奨化。これらのコンパイラは動作する可能性はあるが、CI ではテストされない方針へ変更
  • MySQL 9.x との互換性を保証するテストを追加
  • Clang 20 まで、GCC 15 までの互換性を保証するテストを追加

Parser

  • GitHub #284 ムーブ専用 Callable をクロージャと併用した際の不正状態を修正
  • GitHub #250 GlobalState のパーサテンプレートパラメータにおける const 不整合を修正
  • GitHub #268 permutation parser使用時の一部ケースでの不正状態を修正
  • GitHub #279 シーケンスパース時に、後続パーサが前の属性を上書きしてしまう問題を修正
  • GitHub #279, GitHub #285 opt パーサが失敗しても std::optional に値が残る可能性があった問題を修正
  • GitHub #245, GitHub #254, GitHub #255, GitHub #256 多数の実行時最適化
  • GitHub #250 コンパイル時間とコードサイズの適度な削減
  • GitHub #275 transformconstexpr
  • GitHub #272 moveforward の扱いに関する警告緩和
  • GitHub #278 if_ ディレクティブの属性型に関するドキュメント誤記を修正
  • GitHub #271 多数のドキュメント誤字修正

PFR

  • GitHub #194 C++26 の分解束縛をパックに展開する新実装を追加。
    • 既知の制限の大半を解消し、テンプレートインスタンス過多を回避
    • 新実装は BOOST_PFR_USE_CPP26 マクロで有効/無効を切替可能
    • PR を提出してくれた Jean-Michaël Celerier 氏に感謝
  • CMake に関する複数の修正。PR を提出してくれた Alexander Grund 氏に感謝

Random

  • xoshiro 系生成器の SeedSeq からの構築に関する問題を修正

Redis

重要な変更(キャンセル動作)

  • GitHub #310, GitHub #226 async_exec() における操作単位のキャンセルサポートを改善
    • asio::cancel_after をサポートし、任意タイミングでキャンセル可能になった
    • キャンセルが他のリクエストへ干渉しない設計へ変更
  • GitHub #329, GitHub #334 request::config 内の以下のフラグを非推奨化
    • cancel_on_connection_lost
    • cancel_if_not_connected
    • 代替として asio::cancel_after の利用を推奨
      • cancel_on_connection_lost のデフォルトを false に変更
  • GitHub #321 canceloperation::resolve, connect, ssl_handshake, reconnection, health_check を渡す方法を非推奨化。今後は cancel(operation::run) を使用すること
  • GitHub #319 async_run() に操作単位のキャンセルを追加

その他の機能追加/変更

  • GitHub #302, GitHub #303 config::setup によるカスタムセットアップリクエストをサポート
    • ライブラリ生成の HELLO を任意のリクエストに置換可能
  • GitHub #305 request::config::hello_with_priority を非推奨化
    • 代替として config::setup を推奨
  • GitHub #296 Valkey との長期互換性を保証
  • GitHub #341 request::append() を追加(リクエスト連結機能)
  • GitHub #104 ヘルスチェッカのアルゴリズムを改善
    • 高負荷時の誤検知を回避
    • PING はアイドル時のみ発行
  • GitHub #283 config::read_buffer_append_size を追加(読み込みバッファ拡張制御)
  • GitHub #311 usage::bytes_rotated を追加(サーバー読み取り時のコピー量測定)

バグ修正

  • GitHub #287 中間でエラーを含むレスポンスを generic_response にパースした際の例外発生を修正
  • GitHub #318 connection および basic_connectioncancel() における競合状態を修正
    • キャンセルが無視される可能性を解消
  • GitHub #298 空パスワード+非デフォルトユーザー使用時の認証問題を修正

  • GitHub #290 HELLO エラー後の再接続時に HELLO が失敗し続ける問題を修正

  • GitHub #297 HELLO エラーが正しくログ出力されない問題を修正

SmartPtr

  • 以下の非推奨マクロを削除
    • BOOST_SP_ENABLE_DEBUG_HOOKS
    • BOOST_SP_USE_STD_ALLOCATOR
    • BOOST_SP_USE_QUICK_ALLOCATOR
  • <boost/smart_ptr/detail/quick_allocator.hpp> を非推奨化し、将来のリリースで削除予定
  • BOOST_NO_CXX11_HDR_ATOMIC を定義する構成を非サポート化
    • C++11 準拠の <atomic> を必須化
  • 以下の非推奨マクロを無効化
    • BOOST_AC_USE_SPINLOCK
    • BOOST_AC_USE_PTHREADS
    • BOOST_SP_USE_SPINLOCK
    • BOOST_SP_USE_PTHREADS
  • atomic_countsp_counted_basespinlock のプラットフォーム別実装を削除
  • BOOST_NO_CXX11_HDR_MUTEX を定義する構成を非サポート化
    • C++11 準拠の <mutex> を必須化
  • boost/smart_ptr/detail/ 内の未使用ヘッダを削除

Stacktrace

  • include 漏れを修正。修正を行った Orgad Shaneh 氏に感謝
  • libbacktrace_impls.hpp の URL を修正。Jonathan Wakely 氏に感謝

StaticString

  • to_static_[w]string() を C++26 の std::to_[w]string() と整合化
  • to_static_[w]string() 内の追加バッファ使用を削除
  • resize_and_overwrite() を追加

STLInterfaces

  • GitHub #80 GCC 14 で発生する不正状態を修正
  • move 専用 Callable をクロージャと併用した際の不正状態を修正

Test

  • Windows Clang におけるいくつかの警告を修正

TypeIndex

  • Boost.Core への依存を削除
  • CMake でもすべてのテストを実行。修正と支援をしてくれた Alexander Grund 氏に感謝

URL

  • segments_view および segments_encoded_view に定数時間のイテレータベース subview コンストラクタを追加
  • zone-id セッタを追加(例: IPv6 link-local アドレス)
  • host セッタが zone-id を受け取り、伝播するよう変更
  • GitHub #920 resolve が参照元フラグメントを常に正しく反映するよう修正
  • encoded_host_address のアサーションが zone-id を考慮するよう修正
  • GitGitHub #934 BOOST_STATIC_ASSERTBOOST_CORE_STATIC_ASSERT に置換
  • GitHub #939 セグメント subview の 絶対意味論を保持するようリファクタリング

Uuid

  • string_generator を C++14 以上で constexpr
  • boost/uuid/constants.hpp を追加
  • boost/uuid/uuid_generators.hppboost/uuid/generators.hpp に改名
    • 旧名も互換性のため維持

Variant2

  • より多くの関数を constexpr 化し、~variant も対象に追加
    • C++20 以前では影響はなかったが、C++20 以降では意味を持つ変更

テスト済みコンパイラ

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

  • 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