最終更新日時:
が更新

履歴 編集

Boost 1.78.0リリースノート

本家リリースノート:

リポジトリは以下:

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

新ライブラリ

なし

更新ライブラリ

更新ツール

Asio

  • ソケット、タイマー、posix descriptorを含むすべてのI/Oオブジェクトに、オプションとして使用できるio_uringバックエンドを追加
  • ストリーム指向ファイルとランダムアクセスファイルの新たなクラスによってファイルのサポートを追加。この機能は現在のところ、WindowsではI/O完了ポート、Linuxではio_uringをサポートしている
  • POSIXとWindowsでの汎用パイプのサポートを追加 (I/O完了ポートが使用可能な場合に使用できる)
  • io_uringバックエンド使用時に最適化されるregistered bufferのサポートを追加
  • 完了をメッセージとして送信もしくはキューに入れるために使用できるchannelを実験的にサポート

    // バッファスペースのないチャネルを作成
    channel<void(error_code, size_t)> ch{ctx};
    
    // バッファスペースがなく、待機中の受信操作がないため`try_send`は失敗する
    bool ok = ch.try_send(asio::error::eof, 123);
    assert(!ok);
    
    // async_sendは、受信操作がメッセージを消費するまでブロックする
    ch.async_send(asio::error::eof, 123, [](error_code ec) {
      // …
    });
    
    // async_receiveはメッセージを消費する。
    // async_send操作とasync_receive操作の両方が即座に完了する
    ch.async_receive([](error_code ec, size_t n) {
      // …
    });
    

  • experimental::coroの改善を実装

  • MSVCランタイムを使用した際のClangでのaligned_allocを無効化
  • ip::network_v4::canonical()に、より高速な実装を使用するよう変更
  • コンパイル時間を改善するために、一般用途のテンプレート特殊化を追加
  • io_context executorのサイズをポインタひとつになるよう縮小
  • execution::any_executorany_io_executorのsmall object bufferのサイズを増やした
  • 可変引数テンプレートが無効なときの、複数シグニチャでのハンドリング (multi-signature handling) を修正
  • GCCとClangの新バージョンの互換性を修正
  • Solarisでのコンパイルを修正
  • MSVCでビルドする際の、Qt定義のマクロに対する防御を修正
  • ssl機能によって発行されるエラーメッセージを改善
  • bind_executorの完了トークンとの互換性を修正
  • BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULTを定義した際のビルドエラーを修正
  • awaitable<>に不足していたムーブ代入演算子を追加
  • 確保されたメモリの不適切なアライメントによる、MSVCでコルーチンを使用した際のアクセス違反を修正
  • 並列操作がまだ保留されている状態でexecution contextがシャットダウンされた際に起きたexperimental::parallel_groupのクリーンアップの問題を修正
  • 並行性ヒント (concurrency hints) のドキュメントに説明を追加
  • C++20コルーチンのエラーハンドリング手法についてのドキュメントを追加
  • さまざまな警告を修正
  • 詳細はRevision Historyを参照

Assert

  • source_location::to_stringを追加

Atomic

  • Androidでの非IPCのwait/notify操作には、プロセスローカルのfutex操作を使用するようにした
  • riscv32などのようなSYS_futex_time64システムコールのみを定義するLinuxターゲットのサポートを追加
  • 32ビットx86ターゲットでのClang 8での64ビット型に対するstd::alignment_ofが誤った結果になる問題についてワークアラウンドを追加
  • Mac OS 10.12, iOS 10.0, tvOS 10.0, およびwatchOS 3.0以降のDarwinシステムでのwait/notify操作のために、ulockバックエンドを追加
  • Windows 8以降をターゲットとした場合に、atomic-type::always_has_native_wait_notifyと対応する機能テストマクロの間の不一致を修正。このライブラリはパブリックヘッダから直接WaitOnAddressと関連するAPIを使用するため、Windows 8以降もしくはBOOST_USE_WINAPI_VERSION, _WIN32_WINNT, 同様のマクロが定義されている場合、ユーザーはsynchronization.libをリンクする必要がある。このライブラリは自動リンクをサポートするコンパイラ (MSVCなど) では自動的にリンクする
  • padding bitをクリアする方法を提供するコンパイラにおいて、unionを除くpadding bitをもつ型のサポートを追加。この機能はGCC 11とMSVC 14.2 (コンパイラバージョン19.27) 以降、および同様の組み込み関数をサポートするほかのコンパイラでサポートされる。padding bitをクリアできないコンパイラでは、x86ターゲットの80ビットのlong doubleを除いて、padding付きの型は一般にサポートされない。新たな機能マクロBOOST_ATOMIC_NO_CLEAR_PADDINGが定義された場合、パディングのクリアがサポートされないことを示す
  • atomic_refおよびipc_atomic_refの初期化コンストラクタは、参照オブジェクトのpadding bitをクリアするためにアトミック命令を使用するのをやめた。これによりatomic refの構築コストが削減される
  • atomicおよびipc_atomicの初期化コンストラクタは、列挙型、クラス、浮動小数点数型に対してconstexprになった。クラスと浮動小数点数型の場合、コンパイラがconstexprstd::bit_castをサポートし、型にpadding bitがなく、ネイティブのアトミック操作を実装するためにpaddingが必要ない場合に、constexprになる
  • C++20に従って、atomicおよびipc_atomicのデフォルトコンストラクタは、含まれているオブジェクトの値初期化を実行するようにした。ユーザー定義のデフォルトコンストラクタがない場合、デフォルト構築されたアトミックオブジェクトはゼロで初期化されることを意味する
  • GitHub #50 アセンブラツールがnumeric labelをサポートしていないために発生するAIXでのコンパイルエラーのワークアラウンドを追加
  • GitHub #52 Visual Studio 2015 Update 3以前でのコンパイルエラーのワークアラウンドを追加
  • より詳細はchangelogを参照

Beast

  • 今回は小さなバグ修正とCI報告の更新を行うメンテナンスアップデートである
  • zlibのセキュリティ脆弱性CVE-2016-9840を修正
  • WebSocketのpermessage_deflateの実装を修正。これにより、Beast WebSocketを使用する際の圧縮のパフォーマンスが向上するだろう
  • テストストリームとテストフレームワークのRTTIへの依存をなくした。これにより、自身の便利なテストストリームを使用し、埋め込まれた非同期通信コードを確認できる
  • 完全な変更はRelease Notesを参照

Core

  • BOOST_CORE_USE_GENERIC_CMATHが定義されるか、もしくはプラットフォームが<cmath>に必要な機能を提供していない場合に有効になる汎用実装を<boost/core/cmath.hpp>に追加
  • 型の名前を文字列として返すユーティリティ関数boost::core::type_nameを追加
  • C++20のstd::spanのC++11実装であるboost::spanを追加 (Glen Fernandes氏に感謝)

Describe

  • has_describe_enumerators, has_describe_bases, has_describe_membersを追加
  • enum_to_string, enum_from_stringを追加
  • 関係演算子とストリーム入力演算子を追加
  • descriptor_by_name, descriptor_by_pointerを追加

DLL

  • GitHub #54 不足していた#includeを修正 (Denis Blank氏に感謝)
  • GitHub Action CIを優先し、Travis CIを削除

Filesystem

  • GitHub #193 v4 : パスがディレクトリが区切り文字でおわっている場合に、path::filenamepath::iteratorは暗黙の末尾ドット (".") を返さなくなった。その代わりに、C++17のstd::filesystemライブラリと同様に空のパスが返される。path::stem, path::compare, lexicographical_compareなどイテレータやファイル名で定義される関数にも影響する。例として、path("a/b/") == path("a/b/.")はもはやtrueにはならない
  • v4 : path::lexically_normalは末尾のドット (".") を生成しなくなり、正規化されたパスの末尾のドットx2 ("..") 要素のあとのディレクトリ区切り文字を省略するようになった
  • GitHub #214 v4 : pathのappend操作で、追加されたパスのルート名とルートディレクトリが考慮されるようになった。追加されたパスが絶対パスである場合、もしくはルート名が存在しソースパスと異なる場合、結果のパスは追加されたパスと等価 (equivalent) となる。ルートディレクトリが存在する場合、結果はソースパスのルート名に基づいてリベースされたルートディレクトリと相対パスとなる。それ以外の場合、動作はv3と同様となる
  • path::lexically_normalは、正規化されたパスのルート名内のディレクトリパスを推奨区切り文字 (preferred separator) に変換するようになった
  • path::assign, path::append, path::concatとそれらに対応する演算子オーバーロードを最適化し、不要なパスのコピーを回避し、コードの冗長性を減らした
  • POSIXシステムにおいて、パスpがルートディレクトリではじまる場合、ルート名としてbase.root_name()のパスを返すabsolute(p, base)を修正した。このような場合、pはすでに絶対パスであるため、そのまま返す必要がある
  • create_directories(".")もしくはcreate_directories("..")がエラーを報告しないようにした。実装は内部で再帰を使用しなくなったため、非常に長いパスでのスタックオーバーフローからより適切に保護される
  • GitHub #216 Windowsにおいて、removeが読み取り専用ファイルの削除をサポートするようになった。この操作は、削除のまえに読み取り専用属性をリセットするよう試みる。これにより、操作が失敗して属性の元の値が復元されない可能性があることに注意。これはremove_allにも影響する
  • remove_allは、C++17のstd::filesystemライブラリと同様に、エラーが発生した場合にstatic_cast< uintmax_t >(-1)を返すようになった
  • GitHub #215 ユーザーコードがboost/filesystem/path.hppをインクルードするがboost/container_hash/hash.hppはインクルードせず、コンパイラが未使用のインライン関数を保持する設定になっていた場合に、Boost.ContainerHashの関数への未解決参照のリンクエラーが発生する問題を修正
  • GitHub #217 リリースビルドでのパスのグローバルクリーンアップを排除するMSVCとその互換コンパイラに対してのワークアラウンドを追加。Boost.Fielsystemの共有ライブラリがプロセスで繰り返しロード、アンロードされた場合に、メモリリークにつながる可能性があった

Geometry

  • 改善
    • GitHub #894 rtreeのクエリ操作を最適化・リファクタ
    • GitHub #913 DynamicGeometryとGeometryCollectionにさまざまなアルゴリズムのサポートを追加 (現在はアンドキュメント)
    • GitHub #922 DynamicGeometryとGeometryCollectionにdistanceのサポートを追加 (現在はアンドキュメント)
  • 解決した問題
    • GitHUb #867 big kに近いpredicateをもつrtreeのクエリ操作が遅い
    • GitHub #870 boost::geometry::self_turnsでのコンパイルエラーを修正
    • GitHub #896 BOOST_GEOMETRY_NO_ROBUSTNESSを定義した際にget_turnsでアサーション失敗が発生する問題を修正
  • バグ修正
    • GitHub #906 macos-11のclang-12でbufferが不正な結果となる問題を修正
    • GitHub #921 複数コンパイラのC++20モードとGCC 5でのコンパイルエラーを修正
    • 集合操作とbufferにさまざまを修正行った

JSON

  • このライブラリのスタンドアローンモードを非推奨化
  • 外部ライブラリでのvalue_tovalue_fromの先行宣言を許可
  • 数値をパースする際の、符号付き整数のオーバーフローを修正
  • MSVCの/Zc:implicitNoexcept-をサポート

Lambda2

  • std::cout << _1を許可するために、特殊ケースとして最初の引数がストリームでoperator<<もしくはoperator>>を使用した場合に対応
  • operator->*を追加
  • first, secondを追加

Log

  • 全体的な変更
    • GitHub #59 C++17以降との互換性のため、std::codecvtchar16_tchar32_t特殊化の検出を更新
    • プロセス間メッセージキューのreceive関数にC++17 std::byteのサポートを追加
    • Windows 8以降でこのライブラリをビルドする際に、バージョン名前空間でnt62タグを使用してターゲットOSのABIを示すようにした。例として、バージョン名前空間にはv2_mt_nt62という名前をつけることができる。この名前は、ライブラリによってエクスポートされるシンボルの一部となる。Boostと自身のコードをビルドする際は、BOOST_USE_WINAPI_VERSIONを一貫して使用し、Windowsの最小ターゲットバージョンを要求する
    • dumpストリームマニピュレータのSSSE3とAVX2向け実装のパフォーマンスを改善
    • CMakeビルドシステムのサポートを追加。現時点ではライブラリのビルドのみがサポートされており、テスト実行には引き続きBoost.Buildが使用される
  • バグ修正
    • GitHub #162 reliable_message_queue::open_or_createおよびそれと等価なコンストラクタの、POSIXシステムでの競合状態を修正した。同じキューからの送受信と同時にopen_or_createを呼び出す複数のスレッドまたはプロセスは、キューの内容を破壊し、プロセスをクラッシュさせる可能性があった
    • GitHub #164 BOOST_LOG_WITHOUT_SETTINGS_PARSERSが定義されている場合、boost_log_setupが欠落しているためにWindowsでb2 installが失敗する問題に対するワークアラウンドを追加
  • 詳細はchangelogを参照

Math

  • cubic root (立方根) のサポートを追加
  • さまざまな標準ライブラリの数学ルーチンのconstexpr版のサポートを追加
  • Bezier polynomialsのサポートを追加
  • tanh-sinh integrationの最悪ケースのパフォーマンスを改善
  • integrationルーチンでの整数型の不注意な使用を無効化
  • 結果が1の2ulpとなるerf近似のマイナーアップデート
  • Bernoulliコードをアトミック変数のないプラットフォームで使用できるようにした
  • 非心モードのカイ二乗分布 (non-central Chi Squared distribution) を改善
  • GitHub #507 <cstdfloat>の複素数値の初等関数の特定のエッジケースを改善

Multi-index

  • GitHub #35 キーベースのindicesにcontainsを追加
  • キーベースのindicesにmerge操作を追加。この機能は、いくつかの点で (非順序) 連想コンテナの標準仕様を超えている:
    • ソースのインデックスは、非キーベースのindicesを含むどの型でもよい
    • 部分マージ (partial merge) を提供する。例として、x.merge(y,first,last)yの要素のうち[first, last)の範囲のみをマージする
  • sequenced indicesとrandom access indicesのこれまでのspliceは破壊的だった。つまり、要素は挿入先にコピー挿入され、ソースからは削除されていた。現在のspliceはキーベースのindicesのmergeと同様にノード転送に基づいており、それらと同様になるよう拡張され、任意の型のインデックスを受け入れる。実際、spliceはキーベースのindicesのmerge機能のフロントエンドを見なすことができる。下位互換性の理由から、コンテナ間でアロケータが異なる場合にspliceの破壊的動作は維持される
  • インデックスのイテレータ型はnode_typeとそのmulti_index_container内のインデックス位置にのみ依存するという事実がドキュメント化される (一意的 (uniqueness) か非一意的 (non-uniqueness) かに関わらずハッシュのindicesを除く)。これは、mergespliceによって転送された要素に対するイテレータの有効性に影響する。C++標準のメーリングリストではSCARY iteratorsと呼ばれるものと同種である。SCARYnessは現在 (2021年8月)、標準コンテナには義務付けられていない
  • イテレータのSCARYnessはsafe modeでも保持される

Multiprecision

  • rational_adaptorの再作業により、Boost.Rationalへの依存性を削除し、パフォーマンスを改善した
  • GitHub #383 Clangでのtype traitsの問題を修正
  • GitHub #370 バグのあったLehmerのGCDルーチンを修正
  • mpc_complexのコンストラクタでの精度を落とす変換がexplicitになるよう修正
  • 雑多なconfigurationの問題を修正 (Intelの組み込み関数の使い方やApple Clang)
  • unsigned char型のためにいくつかのiostream演算子を修正
  • GitHub #342 mpq_rationalから整数型への変換を修正

PFR

  • std::addressofのために不足していたインクルード<memory>を追加
  • 空の集成体で起きていた-Wzero-length-arrayの警告を修正
  • MSVCコンパイラ<= 1920でのコンパイルを修正 (Alexey Romanov @alexey-romanov氏に感謝)
  • 基本的なCMakeLists.txtのサポートを追加 (Peter Dimov @pdimov氏に感謝)
  • https://github.com/apolukhin/pfr_non_boost へのリンク追加を含む、ドキュメントの複数の改善
  • boost::BOOST_プレフィックスを削除するmisc/strip_boost_namespace.shスクリプトを追加

Predef

  • バージョン1.13.1
  • "epoch"のつづりを修正
  • sparc.h内での欠落していたカッコを追加 (tkoecker氏に感謝)
  • ドキュメントを更新し、RougeコードスタイルとAmber汎用スタイルを使用するようにした

Regex

  • 破壊的変更 Perlの動作に従って、\B\bの反対になるよう変更
  • w32_regex_traits.hppwindows.hをインクルードしないよう変更
  • 以下の問題を修正
    • GitHub #151 大文字・小文字変更グループの繰り返しを、アサーション失敗からエラーに変更
    • GitHub #152 GitHub #156 (*SKIP)で見る際の再帰内のスタック巻き戻しを正しく修正
    • GitHub #153 boost::regex_matchのメモリリークを修正

System

  • error_codeのsource locationサポートを追加
  • error_code::to_string, error_condition::to_string, error_code::whatを追加
  • source locationをもつ場合にsystem_error::what()にその情報が含まれるようにした
  • <boost/system/result.hpp>に、値かエラーのいずれかを保持するresult<T, E = error_code>クラスを追加

Utility

  • GitHub #79 ライブラリドキュメントをQuickBookに変換 (Alan de Freitas氏に感謝)

Variant2

  • <boost/variant2.hpp>を追加
  • unsafe_get<I>を追加
  • visit_by_indexを追加
  • operator<<を追加

Build

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