最終更新日時:
が更新

履歴 編集

Boost 1.79.0リリースノート

本家リリースノート:

リポジトリは以下:

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

新ライブラリ

なし

更新ライブラリ

更新ツール

Assert

  • source_location().file_name()source_location().function_name()が、"(unknown)"の代わりに""を返すようになった
  • source_locationに、std::source_locationからの変換コンストラクタを追加
  • BOOST_CURRENT_LOCATIONを変更し、トップレベルで使用したり、関数のデフォルト引数として使用したりした場合に、std::source_location::current()とより厳密に動作を一致させた

Asio

  • bind_allocatorを追加
  • file_base::sync_all_on_writeフラグを追加
  • basic_file::release()の不足していた実装を追加
  • signal setの各操作にキャンセルのサポートを追加
  • recycling_allocatorをpublicインタフェースの一部として公開
  • いくつかの関数にnodiscard属性を追加
  • OpenSSL 3.0との互換性を追加
  • 既存のSSL*ssl::stream<>にアダプトするサポートを追加
  • すべてのビルド構成でexecutor_work_guard<>を有効化
  • Clangでmovable socket iostreamを有効化
  • bind_cancellation_slotbind_executorの、古い完了トークンとの互換性を修正
  • experimental::appendexperimental::prependに対するassociatorの特殊化を修正
  • associated_allocatorのプライマリテンプレートを修正
  • socketのasync_receive_fromとファイルのwrite_some_atのio_uring実装を修正
  • io_uring機能の検出を修正
  • experimental::coroの各操作のキャンセルを修正
  • experimental::promiseの型消去された完了ハンドラのメモリ管理を修正
  • ssl::streamのムーブ代入演算子の実装を修正
  • BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULTBOOST_ASIO_SEPARATE_COMPILATIONの両方が定義された際のany_io_executorの実装を正しく動作するよう修正
  • sockatmark()システムコールを使用する際のbasic_socket::at_mark()の実装を修正
  • recycling allocatorのメモリ確保のデフォルトアライメントを、最小アライメントを使用するよう変更
  • Apple clangでのコルーチンコード生成で判明したバグのワークアラウンドを追加
  • Windowsにおいて、fopen()で同じ共有モードを使用してファイルを開くようファイルサポートを変更
  • Linuxにおいて、UNIX domain socketの実装を修正し、EAGAINが正しく処理されるようにした
  • experimental::basic_channel::reset()experimental::basic_concurrent_channel::reset()の実装を修正
  • experimental::promise内の潜在的な未定義動作を修正
  • いくつかの状況において、executorを介してキャンセルのシグナルをdispatchするようco_spawnの実装を修正
  • さまざまなヘッダのインクルード問題を修正
  • さまざまな警告を修正
  • いくつかのドキュメント強化:
    • Asio非同期モデルの概要 (overview of Asio's asynchronous model) を追加
    • 非同期モデルに関するリファレンスと要件のドキュメントを作り直した
    • dispatch(), post(), defer()のドキュメントを更新
    • シリアルポートの各操作のキャンセルをドキュメント化
    • アロケータの「非同期実行性の保証 (non-concurrency guarantees)」を明記
    • io_contextのリファレンスドキュメントを、executor_work_guardを使用するよう修正
    • make_strand(), make_work_guard(), ip::address_v4, ip::address_v6, experimental::basic_channel, experimental::basic_concurrent_channelのドキュメントをより詳細にした
    • 最近追加された機能をカバーするために、概要ドキュメントを再配置・拡張した
  • local socketを通過するfile descriptorのC++11サンプルコードを追加
  • 非同期操作のコールバックベースAPIをラップするC++14サンプルコードを追加
  • 詳細はRevision Historyを参照

Atomic

  • GitHub #54 Universal Windows Platform (UWP) でのコンパイルを修正
  • GitHub #55 設定マクロBOOST_ATOMIC_NO_DARWIN_ULOCKを追加。このマクロはDarwinシステムでのコンパイルに影響を与え、wait/notify操作のulockベースの実装を無効にする。これはApple App Storeの要件に準拠するために役立つ場合がある

Beast

  • file_bodyのテストに不足していたインクルードを追加
  • 失敗していたWebSocketハンドシェイクのレスポンスを修正
  • file_posixfile_win32の追記オープンモードを修正
  • Windowsでのappend/append_existingフラグ付きでファイルを開く操作を修正
  • file_win32file_stdioのclang-cl UTF-8ハンドリングを修正
  • drone CIでのARM64ビルドを追加
  • async_baseドキュメントのリンクを修正
  • append/append_existingモードでファイルを開くテストを追加
  • gcc 11, clang 12, msvc 14.3を含めるようCIを更新
  • CMakeワークフローでの個別テストを追加
  • 完全な変更はRelease Notesを参照

Core

  • LWG3545に対応し、boost::pointer_traitsをSFINAEフレンドリーにした (Glen Fernandes氏に感謝)
  • 個別のアロケータ特性にアクセスするboost::allocator_traitsを追加。この実装はC++03以降をサポートする (Glen Fernandes氏に感謝)
  • C++03でほとんどのC++11アロケータモデルをサポートするよう、アロケータのアクセス特性を更新 (Glen Fernandes氏に感謝)
  • boost/iterator.hppは非推奨となり、将来のリリースで削除される予定。このヘッダはboost::iteratorを定義し、それは<iterator>std::iteratorと等価である。しかしこの機能はC++17で非推奨となっているため、ユーザーにはこれらの使用をやめることを勧める
  • boost::core::verbose_terminate_handlerを追加。これは、捕捉されなかった例外をstderrに出力する、std::set_terminate関数に渡すことを目的としたユーティリティ関数である

Describe

  • BOOST_DESCRIBE_STRUCTでのunionを有効にし、std::is_union<T>をチェックするようサンプルコードを更新
  • fmtlibのクラスフォーマッタを定義するサンプルコードを追加
  • fmtlibのenumフォーマッタを定義するサンプルコードを追加
  • メンバへのポインタを出力するサンプルコードを追加

Filesystem

  • v3のpath::replace_extensionは、v4ではなくv3のpath::extensionの定義に関して機能するようになった
  • GitHub #223 pathまたは変換可能な文字列型を引数にするパスの追加と連結の演算子のコンパイルを修正
  • GitHub #224 fdopendirO_NOFOLLOWをサポートするPOSIXシステムとWindowsでは、remove_allCVE-2022-21658から保護されるようになった。この脆弱性は、サードパーティのプロセスがremove_allによって同時に処理されるディレクトリをディレクトリシンボリックリンクに置き換え、remove_allがシンボリックリンクをたどり、シンボリックリンクを削除する代わりにリンクされたディレクトリ内のファイルを削除することを可能にする競合状態である
  • GitHub #216 Windowsのremoveremove_allの実装で、OSでサポートされている場合に (Windows 10 1709以降)、ファイルの削除にPOSIXセマンティクスを使用する。POSIXセマンティクスがサポートされている場合、ファイルがまだ開かれていて使用中であっても、ファイルに削除マークがつけられてすぐに、ファイル名はファイルシステム名前空間から削除される。従来のWindowsセマンティクスでは、ファイルへの最後のファイルハンドルが閉じられるまで、ファイル名はファイルシステム名前空間に存在し続ける。これにより、削除のマークが付けられたファイルを開くことができ、同じ名前の新しいファイルが作成されなくなる
  • Windowsにおいて、removeremove_allで読み取り専用ディレクトリの削除をサポートした。読み取り専用の非ディレクトリファイルの削除サポートは、以前から追加されていた
  • Windowsにおいて、directory_iteratorの内部実装を作り直し、最新のWindows APIを有効に活用できるようになった。これにより、シンボリックリンク処理中のパフォーマンスが向上する可能性がある
  • Windowsにおいて、可能であれば内部のWinAPIの関数ポインタを早期に初期化し、Boost.Filesystemの操作をグローバルコンストラクタで呼び出せるようにした。これは、MSVC、GCC、Clang、およびそれらと互換性のあるコンパイラでのみサポートされる
  • Windowsにおいて、開かれているファイルに対してresize_fileした際に、エラーにならないようにした
  • GitHub #229 Androidの11.0 (APIバージョン30) より前での、statxシステムコールの使用を無効にした。そのシステムコールはseccompによってブラックリストに登録されており、実行時にプロセスが終了してしまう
  • 非推奨化 : boost/filesystem/string_file.hppは非推奨となり、将来のリリースから削除される。このヘッダはデフォルトではboost/filesystem.hppに含まれなくなった。ユーザーは、この機能を自身で実装するか、他の実装に移行することを勧める
  • 非推奨化 : Windows CEのサポートは非推奨となり、将来のリリースから削除される。Windows CEは長年テストされておらず、機能していない可能性がある

Geometry

  • 大きな変更
    • GitHub #977 再スケーリングをデフォルトでオフにした。これにより、集合操作とバッファに関連する多くのバグが回避される
  • 改善
    • GitHub #923 cartesian point/geometry向けにclosest_pointsアルゴリズムを追加
    • GitHub #939 closest_pointsアルゴリズムに他の座標系や剛体の組み合わせ (boxなど) を追加
    • GitHub #961 Webメルトカル図法 (Web Mercator projection) を追加
    • GitHub #966 simplifyで使用されるcartesian distanceをより効率的にした
  • 解決したissue
    • GitHub #956 誤ったclosureをともなうsimplifyアルゴリズムの結果を修正
    • GitHub #962 load factorによるR-treeのデシリアライズ時の実行時エラーを修正
    • GitHub #971 ARMプラットフォームでlong doubleを使用した際に影響を受けるR-treeの挿入時間を修正
  • バグ修正
    • GitHub #936 極 (pole) を含むpolygonのenvelopeを修正
    • GitHub #948 meridian segments付近のspherical/geometric envelopeを修正
    • GitHub #974 NaN座標の回転楕円体正規化ユーティリティ (spheroidal normalization utilities) を修正
    • 集合操作とバッファのさまざまなバグを修正

Integer

  • GitHub #31 内部でビット演算を使用するようinteger_log2の実装を最適化した。これにより、最新のCPUで利用可能なビット命令を使用できる

IO

  • ヌルストリームバッファであるboost::io::basic_nullbufと、ヌル出力ストリームであるboost::basic_onullstreamを追加 (Glen Fernandes氏に感謝)

Iterator

  • counting_iteratorに、GCCとClangおよびそれらと互換性のある一部のターゲットプラットフォームでサポートされる組み込みの128ビット整数型のサポートを追加
  • counting_iteratorでの、非推奨の暗黙のコピー代入演算子に関するGCCの警告を黙らせた

JSON

  • このライブラリのスタンドアロンモードを削除。スタンドアロンのJSONライブラリを使用したい場合は、the C++ Alliance forkを使用すること
  • std::error_codeのオーバーロードを追加
  • error_codesboost::source_locationを追加
  • JSON Pointerのサポートを追加
  • シリアライズ中に文字列を自然に伸長させるようにした

LEAF

  • FreeRTOSとその他の組み込みプラットフォームをサポート
  • 診断情報を改善
  • 設定マクロを改善
  • __GNUC__環境下では、BOOST_LEAF_CHECKはstatement expressionを使用するようにした
  • シンボルのデマングルバグを修正

Log

  • 全体的な変更
    • text_file_backendにおいて、ファイルローテーションが使用され、ログファイル名がファイルカウンタを使用する場合に、以前に書き込まれたログファイルに追記するためのサポートを追加
    • 破壊的変更 file_collectorのインタフェースを以下のように変更:
      • scan_for_filesメンバ関数は、スキャン中に収集された情報を含むscan_result構造体を返す
      • パスがターゲットストレージディレクトリ内のファイルを参照しているかどうかをテストするために、is_in_storageメンバ関数を追加
    • ユーザーの関数をストリーム出力式に挿入するために使用できる新たなinvoke_manipストリームマニピュレータを追加
  • バグ修正
    • GitHub #179 ユーザーがtext_file_backend::scan_for_filesを複数回呼び出し、2回目以降の呼び出しで新しいファイルが見つからない場合に、ファイルカウンタがゼロに設定される問題を修正
  • 詳細はchangelogを参照

Multi-index

  • ranked indicesのcount操作の効率を、O(log(n) + count)からO(log(n))に改善 (Damian Sawicki氏による貢献)
  • メンテナンス作業

Nowide

  • いくつかのプラットフォームでのコンパイル問題を修正 (例として、MinGW-w64やCygwinのGCC 11)
  • BOOST_USE_WINDOWS_HWIN32_LEAN_AND_MEANを使用した際の不足していたインクルードを修正
  • boost::nowide::stat_tをともなうboost::nowide::statを使用した際のサニティチェックを追加

Optional

  • GitHub #98 std::optional<bool>との相互運用がうまくいっていなかったところを修正
  • GitHub #92 BOOST_NO_IOSTREAMのサポートを追加
  • 未定義動作を避けるためにaligned storageにcharの代わりにunsigned charを使用するよう修正
  • 未定義動作を避けるために、placement newでCV修飾されたvalue_typeを使用するよう修正

Predef

  • Version 1.14.0
  • LoongArchの検出を追加 (Zhang Na氏に感謝)

QVM

  • C++17のconstexprを追加
  • シングルヘッダの配布を改善

Smart Pointers

  • boost::allocate_uniqueの結果からアロケータへのポインタを取得するために、boost::get_allocator_pointerを追加 (Glen Fernandes氏に感謝)

System

  • throw_exception_from_errorboost::source_locationパラメータを追加
  • throw_exception_from_errorに、errc::errc_t, std::error_code, std::errc, std::exception_ptrのオーバーロードを追加
  • result <T> :: valueは、デフォルトの引数を介してBOOST_CURRENT_LOCATIONthrow_exception_from_errorに自動的に供給するようになった
  • errc::make_error_codeに、source locationを引数にとるオーバーロードを追加

ThrowException

  • Boost.Exceptionを使用しないプログラムのために、BOOST_THROW_EXCEPTIONの軽量な代替手段であるboost::throw_with_locationを追加

Unordered

  • すべてのコンテナが、異種混合 (heterogeneous) のcountequal_rangefindを持つよう更新した
  • すべてのコンテナにcontainsメンバ関数を実装
  • すべてのコンテナで使用できるerase_ifを実装
  • すべてのコンテナが、異種混合のeraseextractを持つよう更新した
  • reserveが早期にアロケートするよう振る舞いを修正
  • テストスイートのさまざまな警告を修正
  • 内部でboost::allocator_traitsを使用するよう更新
  • Fibonacci hashingに切り替え
  • ドキュメントをQuickBookからAsciiDocに置き換え

Variant2

  • monostate用のoperator<<を追加

Wave

  • WaveのビルドにC++11を要求するようになった
  • バグ修正
    • GitHub #135 C++20で非推奨になった配列の添字演算子中のカンマ演算子の使用を修正
    • GitHub #137 C++11以降のモードでEOF前の改行を要求しないよう修正
    • GitHub #138 空のifdefブロックが空白を入れない限り行ディレクティブを発行しない問題を修正
    • GitHub #143 __has_include()のあとにトークン (空白含む) があるとパースに失敗する問題を修正
    • GitHub #145 reset_version()内でのsanitizerのエラーを修正
    • GitHub #147 異なる列挙型同士のビット演算がC++20で非推奨になったことによる警告を修正

Build

  • B2 version 4.8.2をリリース

テスト済みコンパイラ

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

  • Linux:
    • Clang: 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 12.0.0
    • Clang, C++11: 3.4, 11.0.0
    • Clang, C++14: 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 5.0, 12.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
    • Clang, C++20: 11.0.0, 12.0.0, 13.0.0
    • GCC: 4.6.3, 11
    • GCC, C++11: 4.7.3, 4.8.5, 11
    • GCC, C++14: 5.4.0, 6.4.0, 7.3.0, 8.0.1, 9.1.0, 11
    • GCC, C++17: 7.3.0, 8.0.1, 9.1.0, 11
    • GCC, C++20: 8.0.1, 9.1.0, 10, 11
  • OS X:
    • Apple Clang: 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

翻訳

Akira Takahashi