最終更新日時:
が更新

履歴 編集

Boost 1.83.0リリースノート

本家リリースノート:

リポジトリは以下:

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

既知の問題

  • JSON
    • Windows ARM環境において、組み込み命令 (intrinsics) の欠如によりコンパイルが失敗する場合がある。GitHub #926GitHub #927、およびパッチを参照
  • Unordered
    • コピー代入演算子において、存在しない要素を誤って削除してしまう問題を修正。GitHub #205、およびパッチを参照

新ライブラリ

  • Compat
    • 後の標準C++に追加された標準コンポーネントをC++11実装した互換性ライブラリ (作者Peter Dimov氏とコントリビューターたち)

更新ライブラリ

更新ツール

Any

  • 新たなC++11クラスboost::anys::unique_anyを追加。held typeからのコピー or ムーブ構築を必要としないboost::any (std::any) の代替クラス
  • ドキュメントをQuickbookに移植し、Doxygenコメントをコードで使用するようにした

Atomic

  • GitHub #62 const修飾したatomic_refのコンパイルエラーを修正。const`修飾されたアトミックオブジェクトであっても、読み書き可能なメモリに存在しなければならないことに注意

Chrono

  • 非推奨となっていたBoost.Ratioの使用部分を削除

Compat

  • latch.hppを追加。std::latchの実装 (Christian Mazakas氏の貢献に感謝)
  • shared_lock.hppを追加。std::shared_lockの (部分的な) 実装 (Christian Mazakas氏の貢献に感謝)

Core

  • boost::core::type_nameに不完全型のサポートを追加
  • boost/core/bit.hppのビット操作関数を最新のMSVCでconstexprに対応 (VS2019 update 5以降)
  • boost/core/bit.hppboost::core::byteswap (C++23std::byteswapの実装) を追加
  • yieldのプリミティブsp_thread_pause, sp_thread_yield, sp_thread_sleepを、SmartPtrライブラリの実装詳細からboost/core/yield_primitives.hppに移動

DLL

Filesystem

  • パスで識別されるディレクトリエントリの内部キャッシュファイルの状態を更新する directory_entry::refresh メンバ関数を追加
  • [v4] directory_entry のコンストラクタや変更関数でパスを初期化したり変更したりすると、自動的に refresh が呼び出されるようになった。これにより、v3以前やv3ではファイルステータスのファイルシステムへの問い合わせが失敗した場合 (ファイルが存在しない場合など)、表示されなかったエラーが発生する可能性がある。この新しい動作はstd::filesystemに似ている
  • v4 file_status パラメータを受け取る directory_entry コンストラクタとメソッドが削除された。これらの引数を取り除き、 directory_entry が内部的に refresh を呼び出すようにすることを推奨する
  • std::filesystem と同様に、ファイルのファイルタイプをチェックするための directory_entry のメンバ関数を追加した
  • ファイルの状態を検査する関数を追加した: is_block_file, is_character_file, is_fifo, is_socket および is_reparse_file
  • GitHub #288 recursive_directory_iterator は、ファイルシステムのイテレート処理中に取得したファイルタイプに関する情報を再利用するようになった。これにより、パフォーマンスが向上する可能性がある
  • GitHub #280 標準ライブラリのファイルストリームがムーブ可能な場合、boost/filesystem/fstream.hpp で定義されたファイルストリームもムーブ可能になった
  • 最初の引数に path をとる移植可能な fopen オーバーロードを持つ新しいヘッダー boost/filesystem/cstdio.hpp を追加した。この関数は std::fopen と等価だが、Windows ではパスにネイティブのワイド文字エンコーディングを使用する
  • GitHub #285 汎用的な path 比較演算子がより制限されるようになり、ユーザーのコードに using namespace boost::filesystem; ディレクティブが含まれている場合に、潜在的な曖昧さを回避できるようになった
  • GitHub #287 イテレータからの path コンストラクタが std::initializer_list 引数を取る関数のオーバーロードと干渉する可能性があった問題を修正
  • GitHub #284, GitHub #286 Windows で、directory iteratorを作成する際に様々なファイルシステムから返されるエラーに対する回避策を追加
  • GitHub #290 Windows で、ファイル時間の照会に必要なアクセス権を緩和

Flyweight

  • boost::flyweightにスマートポインタ構文 (元の値への間接参照を行うoperator*operator->) を追加
  • GitHub #12 simple_lockingで使われるミューテックスが再帰的でなかったのを修正

Geometry

  • 改善
    • GitHub #1140 依存関係を削除し、いくつかの箇所で boost を std に置き換えた
    • GitHub #1154 不足していたヘッダを追加し、すべてのヘッダがBoostのポリシーに従って独立してコンパイルできるようにした
    • GitHub #1157 calculate_point_orderconst Ringのコンセプトをチェックする
  • 解決済みの問題

Iterator

  • is_iterator 型特性を追加し、その型がイテレータ型として適格かどうかをテストできるようになった
  • GitHub #79 filter_iterator は、適応されたイテレータと関数オブジェクトのムーブ構築をサポートするようになった

JSON

  • このライブラリはメモリ割り当てに失敗した場合を除き、system_errorを例外送出するようにした。ただし、メモリ割り当てに失敗した場合は std::bad_alloc が送出される
  • シリアライズの動作を serialize_options で変更できるようになった
  • 文脈変換
  • より正確な数値解析を行うためのパーサーオプション
  • ストリーム operator<<parse_options をサポートした
  • JSON リテラルの InfinityNaN を許可するパーサーオプション
  • 数値のパースではなく、数値の検証のみを行うパーサーモード
  • 指数が INT_MAX より大きい数値はパーサーに受け入れられ、無限大として扱われる
  • objectメンバ関数を強い保証をするよう修正した
  • boost/range.hppがインクルードされている場合の end 呼び出しのあいまいさを修正した
  • ASan の失敗を修正した
  • error::size_mismatch のエラーメッセージを修正した
  • const 要素を持つタプルへの変換を修正した

Locale

  • GNU gettextの動作にマッチするメッセージカタログファイルにおいて、ビット演算子/バイナリ演算子(左/右シフト、バイナリand/or/xor/not)がサポートされなくなった
  • Windows の Std バックエンドは、要求されたロケールが存在しない場合、システムロケールの代わりにクラシックロケールを使用するようになった
  • localization_backend_manager::getは非推奨。代わりにジェネレーターを使用すること
  • to_utf/from_utf/between に代わる新しいコンバータークラスを追加した
  • フォーマット文字列の無効なインデックスに関する未定義動作を修正した
  • ICU のない Windows で iso-2022-jp などへの UTF 変換を修正した
  • 複数形翻訳のカウントパラメーターとして long long を使用するようにした
  • いくつかのクラスのムーブと例外指定を修正した

Log

  • GitHub #209 text_file_backend で、フォーマットされたログレコードのサイズが rotation_size の制限を超えた場合に無限ループになる可能性があった問題を修正

Math

  • GitHub #921 Daubechiesスケーリング関数のフーリエ変換の数値評価を追加
  • GitHub #946 統計分布に logcdf 関数を追加した
  • GitHub #978 C++23 の <stdfloat> 型のサポートを追加した
  • 様々な -Wmaybe-uninitialized 警告を修正した
  • GitHub #968 表現不可能な数値の roundtrunc 関数を修正した
  • GitHub #976 F 分布の最頻値の計算を修正した
  • GitHub #977 ベータ分布のオーバーフローを修正した
  • GitHub #987 超幾何分布のオーバーフローを修正
  • GitHub #997 中央値が 0 でない場合の絶対偏差の中央値の計算を修正した

Mp11

  • mp_from_sequence, mp_iota, mp_iota_c に offset/from パラメータを追加
  • mp_value, mp_list_v, mp_rename_v, mp_is_value_list を追加
  • <<boost/mp11/list.hpp>のプリミティブに値リストのサポートを追加
  • 値リストのサポートを mp_repeatmp_fillmp_atmp_backmp_takemp_pop_backmp_dropmp_insertmp_erase に追加

Multi-index

  • GitHub #68 non-unique ordered indicesのRange版 insert を更新し、等価な要素の挿入順序を保持するようにした
  • シリアライズで multi_index_container のサイズの保存と読み込みに unsigned long ではなく std::size_t を使用するようになった (LLP64 データモデルでは unsigned longstd::size_t より小さい)。この変更にともない、 multi_index_container のシリアライズバージョンが 3 から 4 に変更された

Multiprecision

  • GitHub #542 rational adapter divisionのバグを修正
  • GitHub #552 マルチスレッド環境でのグローバルプレッションの変更の処理を修正
  • GitHub #555 cpp_int::eval_convert_to の `noexcept 指定を修正

MySQL

  • メジャーアップデート
  • データを生成する SELECT ステートメントと OUT パラメータを持つプロシージャを含むストアドプロシージャが完全にサポートされた。これにより、セミコロンで区切られた複数のステートメントを 1 回の呼び出しで実行できるようになった
  • 静的に型付けされたインターフェースが追加され、Boost.Describe構造体とタプルを使用して、クエリ結果をユーザーが提供した型に解析できるようになった
  • テキストクエリとプリペアドステートメントは、新しい connection::execute 関数と connection::start_execution 関数(とその非同期関数)を使って実行できるようになった。これらは connection::queryconnection::execute_statementconnection::start_queryconnection::start_statement_execution の上位関数である。新しい関数により、静的インターフェースのような新しい機能にアクセスできるようになった
  • ビルド時間を短縮するために、独立したコンパイルモードが追加された。ソースは boost/mysql/src.hpp に含まれており、正確に1つの翻訳ユニットに含める必要がある
  • statement::bindconnection::execute を使用して、イテレータペアでパラメータを指定してプリペアドステートメントを実行できるようになった。これにより、コンパイル時にパラメータの数や型がわからない場合に使用できるようになった
  • bool 型、std::optional 型、boost::optional 型のパラメータを使用できるようになった
  • エラーコードを追加し、MySQL v8.0.33 および MariaDB v11.0 との互換性を確認した
  • Windows の min()max() マクロの潜在的な問題を修正した
  • すべてのアサーションが Boost.Assert を使用するようになった。
  • すべての例外は Boost.ThrowException によってスローされるようになった
  • 即時完了が I/O object executorを通して正しくディスパッチされるようになった

Ratio

  • デフォルトの BOOST_RATIO_VERSION を 2 に変更した
  • BOOST_RATIO_EXTENSIONS のサポートは非推奨となり、Boost.Ratio が標準の <ratio> ヘッダとして実装されたときに削除される予定

Test

  • CIシステムに古いプラットフォームを追加した
  • GitHub #353 uintptr_t の取り扱いを修正し、32 ビットシステムでも移植できるようにした
  • GitHub #375 Wdeprecated-copy-dtor-Wdeprecated-copy-with-user-provided-dtor の警告を修正した
  • GitHub #382 C++23 <stdfloat> 型の check_is_close の処理を修正した

Timer

  • Boost.Chrono、Boost.Systemなどへの依存を削除
  • BOOST_TIMER_ENABLE_DEPRECATED が定義されていない限り、非推奨のヘッダーを無効にするようにした

Unordered

  • メジャーアップデート
  • オープンアドレッシングに基づく高速でスレッドセーフなハッシュマップ boost::concurrent_flat_map を追加した
  • オープンアドレッシングコンテナのイテレート処理を高速化
  • オープンアドレッシングコンテナにおいて、以前はなにも返さなかった erase(iterator) が、次の要素へのイテレータに変換可能なプロキシオブジェクトを返すようになった。これにより、返されたプロキシが使用されない場合に、パフォーマンス上のペナルティを負うことなく、典型的な it = c.erase(it) イディオムを使用できるようになった

URL

  • GitHub #757 parse_querystring_viewを作り直さないよう修正
  • GitHub #756 url_view/string_viewのコンストラクタが、url_view_baseを要求するようにした
  • GitHub #711 IP-literalIPv6addrzになれるようにした

UUID

  • GitHub #138 AVX ターゲット用に生成される x86 コードを改善。SSE3 ターゲットでの lddqu 命令の使用を削除した。これは Intel NetBurst CPU ではパフォーマンスが低下するが、Skylake 以降の CPU では最適である

Variant2

  • uses_double_storage()を追加

Build

  • B2 version 4.10.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