最終更新日時:
が更新

履歴 編集

Boost 1.66.0リリースノート

本家リリースノート:

リポジトリは以下:

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

Visual Studio新バージョンリリースについて

Visual Studio 2017 Update 5がリリースされた直後にBoostのリリースが行われたため、そのバージョンのVisual Studioでのテストは間に合わなかった。

新ライブラリ

  • Beast
    • C++11以降限定のポータブルなHTTP、WebSocket、その他ネットワーク操作のライブラリ。作者Vinnie Falco氏
  • CallableTraits
    • Boost.FunctionTypesの精神的な後継ライブラリ。C++11以降限定のライブラリで、callable (関数呼び出し可能) に関する全ての型検査と型操作を提供する。作者Barrett Adair氏
  • Mp11
    • C++11のメタプログラミングライブラリ。作者Peter Dimov氏

更新ライブラリ

Asio

  • Networking TSによるインタフェース変更を反映させた (N4546)
    • Networking TSによって置き換えられた関数とクラスは非推奨となった
    • サービステンプレートパラメータと対応するクラスは、デフォルトで無効となった。例としてbasic_socket<Protocol, SocketService>の代わりにシンプルなbasic_socket<Protocol>がある。古いインタフェースを有効にする場合は、BOOST_ASIO_ENABLE_OLD_SERVICESマクロをdefineすること
  • 以前から非推奨だった関数を削除
  • ハンドラトラッキングのカスタマイズをサポート
  • ハンドラトラッキングのためにreactor関係のイベントを追加 (ディスクリプタの準備ができた、とか)
  • io_context単位でロックを無効化するために使用する、特殊な「並行性のヒント (concurrency hint)」を追加
  • ssl::stream<>の最初のコンストラクタ引数の完全転送を可能にした
  • 低レイヤーネイティブソケット (underlying native socket) の所有権を手放す機能を追加した (この機能を使用するには、Windows 8.1以降のI/O完了ポートバックエンドが必要)
  • Networking TSによるインタフェース変更のリストは以下:
    • io_serviceio_contextに変更。io_serviceはtypedefとして残る
    • io_service::dispatch()を非メンバ関数のdispatch()に変更。任意のExecutor/Contextで実行できるようにするため
    • io_service::post()を非メンバ関数のpost()に変更。任意のExecutor/Contextで実行できるようにするため
    • asio_handler_is_continuationフック付きのio_service::post()を非メンバ関数defer()に変更
    • error_code&をとるio_service::poll()io_context::poll()に変更
    • error_code&をとるio_service::poll_one()io_context::poll_one()に変更
    • error_code&をとるio_service::run()io_context::run()に変更
    • error_code&をとるio_service::run_one()io_context::run_one()に変更
    • 時間制限付き実行の機能として、io_context::run_for()io_context::run_until()io_context::run_one_for()io_context::run_one_until()を追加
    • io_service::reset()io_context::restart()に変更
    • io_serviceexecution_contextに変更。io_service::serviceexecution_context::serviceに変更。io_service::idexecution_context::idに変更。サービス関係の機能はexecution_context基本クラスに移動となった
    • make_service()add_service()に変更
    • io_service::strandstrandに変更。あらゆるExecutorで動作するようにした
    • io_service::workexecutor_work_guardmake_work_guard()に変更。あらゆるExecutorで動作するようにした
    • io_service::wrapio_service::strand::wrapexecutor_binderbind_executorに変更。あらゆるExecutorで動作するようにした
    • asio_handler_invokeフックをassociated_executorget_associated_executorに変更
    • asio_handler_allocateフックとasio_handler_deallocateフックを、associated_allocatorget_associated_allocatorに変更
    • buffer_cast()const_buffer::data()mutable_buffer::data()に変更
    • 単一バッファ用のbuffer_size()const_buffer::size()mutable_buffer::size()に変更
    • const_buffers_1const_bufferに変更
    • mutable_buffers_1mutable_bufferに変更
    • basic_io_object::get_io_service()basic_socket::get_executor()に変更。タイマーやシリアルポート関係の同様のメンバ関数も同じ
    • socket_base::max_connections()socket_base::max_listen_connections()に変更
    • basic_socket::wait()basic_socket::async_wait()basic_socket_acceptor::wait()basic_socket_acceptor::async_wait()socket_base::wait_typeに変更
    • basic_socket_acceptor::accept()がソケットの参照をパラメータでとっていたが、ソケットを戻り値で返すよう変更。これはC++11以降でムーブサポートされている場合のみ使用できる
    • basic_socket_acceptor::async_accept()がソケットの参照をパラメータでとっていたが、ハンドラに渡されるよう変更。これはC++11以降でムーブサポートされている場合のみ使用できる
    • connect()async_connect()がイテレータをひとつだけとっていたが、イテレータ範囲をとるよう変更
    • basic_socket_streambuf::duration_typebasic_socket_streambuf::durationに変更
    • basic_socket_streambuf::time_typebasic_socket_streambuf::time_pointに変更
    • basic_socket_streambuf::expires_at()basic_socket_streambuf::expires_from_now()のゲッターをbasic_socket_streambuf::expiry()に変更
    • basic_socket_streambuf::expires_from_now()のセッターをbasic_socket_streambuf::expires_after()に変更
    • basic_socket_streambuf::puberrorbasic_socket_streambuf::errorに変更
    • basic_socket_iostream::duration_typebasic_socket_iostream::durationに変更
    • basic_socket_iostream::time_typebasic_socket_iostream::time_pointに変更
    • basic_socket_iostream::expires_at()basic_socket_iostream::expires_from_now()のゲッターをbasic_socket_iostream::expiry()に変更
    • basic_socket_iostream::expires_from_now()のセッターをbasic_socket_iostream::expires_after()に変更
    • error_code&をとるbasic_waitable_timer::cancel()basic_waitable_timer::cancel()に変更
    • error_code&をとるbasic_waitable_timer::expires_at()のセッターをbasic_waitable_timer::expires_at()に変更
    • basic_waitable_timer::expires_atbasic_waitable_timer::expires_from_now()のゲッターをbasic_waitable_timer::expiry()に変更
    • basic_waitable_timer::expires_from_now()のセッターをbasic_waitable_timer::expires_after()に変更
    • ip::address::from_string()ip::make_address()に変更
    • ip::address_v4::from_string()ip::address_v6::to_v4()ip::make_address_v4()に変更
    • ip::address_v6::from_string()ip::address_v6::v4_mapped()ip::make_address_v6()に変更
    • error_code&をとるip::address::to_string()ip::address::to_string()に変更
    • error_code&をとるip::address_v4::to_string()ip::address_v4::to_string()に変更
    • error_code&をとるip::address_v6::to_string()ip::address_v6::to_string()に変更
    • ip::address_v6::v4_compatible()ip::address_v6::is_v4_compatible()に変更
    • ip::address_v4::broadcastip::address_v4::is_class_aip::address_v4::is_class_bip::address_v4::is_class_cip::address_v4::netmaskを、ip::network_v4に変更。このクラスはCIDR notationを使用してIPv4ネットワークの計算を行う機能をもつ
    • ip::network_v6を追加。このクラスはCIDR notationを使用してIPv6ネットワークの計算を行う機能をもつ
    • ip::address_v4_iteratorip::address_v4_rangeを追加。これらはIPv4アドレスのサブセットをイテレートする機能をもつ
    • ip::address_v6_iteratorip::address_v6_rangeを追加。これらはIPv6アドレスのサブセットをイテレートする機能をもつ
    • ip::basic_resolver::iteratorip::basic_resolver::results_typeに変更。単一イテレータではなく範囲を返すようになった
    • ip::basic_resolver::queryを引数にとるip::basic_resolver::resolve()を、ホスト名とサービスを引数にとるよう変更
    • ip::basic_resolver::resolve()が単一イテレータではなく範囲を返すよう変更
    • ip::basic_resolver::queryを引数にとるip::basic_resolver::async_resolve()を、ホスト名とサービスを引数にとるよう変更
    • ip::basic_resolver::async_resolve()の完了がンドラに単一イテレータではなく範囲が渡されるよう変更

Atomic

  • 整数型の拡張アトミック命令を実験的に実装
    • fetch_negatefetch_complementはアトミックに符号反転(2の補数)、もしくは1の補数(ビット反転)へ置換え、もとの値を返す
    • opaque_<op>は対応するfetch_<op>に等しいが、値を返さない
    • <op>_and_test<op>をアトミックに行い、結果が0であるならばtrueを返す
      • 注意 : この操作は、1.67.0では反対の結果となる。これらの関数を使用したコードは更新する必要がある
    • bit_test_and_setbit_test_and_resetおよびbit_test_and_complementはアトミックに指定したビットを1にする(set)、0にする(reset)もしくはビット反転(complement)し、そのビットのもとの値を返す
      • 訳者註: 原文ではそのビットのもとの値を返すとなっているが、戻り値の型はbool型であることに注意
  • P0558R1で提案、C++17に採択されたポインターを介した整数演算の削除に追従。それらはもう提供されなくなった
  • C++17で追加されたatomic<T>::value_typeatomic<T>::difference_typeにも追従し、ユーザコードで使用可能となった
  • GCC 7へのサポートを改善し、x86-64環境下での128bit演算にはコンパイラ提供のlibatomicへのリンクは不要となった

DateTime

Fiber

  • CUDAストリームと同期できるようになった
  • ROCm/HIPストリームと同期できるようになった

Format

  • 改善
    • 新たな変換指定子を追加
      • 'a' : fixed | scientificフラグを設定する (hexfloat相当)
      • 'b' : boolalphaフラグを設定する
      • 'A' : aフラグ + uppercaseを設定する
      • 'F' : fフラグ + uppercaseを設定する
    • GitHub #42 ISO 99の新たな引数型 j (intmax_t) と z (size_t) を追加。これは値の解析をし、型としては単に無視する
    • GitHub #44 Microsoftの新たな引数型プレフィックス I (ptrdiff_t)、 I32 (__int32)、 I64 (__int64)、 w (wchar_t) を追加
    • GitHub #33 format_matrixという新たな開発ツールを追加した。これはできるだけ多くの可能なフォーマットを組み合わせて、ファイルに記録する:
      • Boostリリース時の回帰テストに役立つ
      • snprintfとの比較ができる
  • バグ修正
    • GitHub #36 volatile引数に対して安全にoperator%を使用できるようにした
    • Trac #4636 MSVC環境で値の丸め処理が/RTCcオプション (ランタイムエラーチェック) によって失敗していた問題を修正
    • Trac #7477 MSVCの/Zaオプション (Microsoftの言語拡張を使用しない) との互換性を修正
    • Trac #10324 不正なconst_castによる警告を修正
    • Trac #11632 静的解析して問題があったalt_sstream.hppを修正

Fusion

  • PR#149 isspace(c) はVxWorksのDinkum clibではマクロとして実装されていないこと対応。Brian Kuhl(@kuhlenough)氏に感謝
  • PR#150 循環したプリプロセッサのインクルードを修正。Gregor Jasny(@gjasny)氏に感謝
  • PR#151 fusion::tupleの基底クラスが変更された
  • PR#153 std::arrayでコンパイルエラーになることがあるのを修正
  • PR#154 C++03において、ネストしたコンテナのコピーでバグがあったのを修正

Geometry

改善

  • PointLike/AnyGeometry間のgeometric戦略でのdistanceを追加

バグ修正

  • 非常に複雑な状況でunion/intersection/differenceが誤った結果になる問題を修正
  • union/intersection/difference/bufferの妥当性 (validity) を修正
  • 非デカルト座標系での集合・関係演算を修正

Log

  • file_collector::scan_for_files()のバグを修正。ユーザーアプリケーションの再起動後、ターゲットディレクトリ内のログファイル名が不正になることがあった

Iterator

  • next()prior()関数は、ネストした型(例えばiterator_categorydifference_typeといったような型特性に関わる型)を定義していないようなユーザイテレータをサポートするようになった。代わりにそれらの型を扱うにはstd::iterator_traitsを特殊化すること。これが正しく動作するためにはC++17準拠のstd::iterator_traitsをサポートした環境が必要である

Math

  • ガウス求積法 (Gauss quadrature) とガウス=クロンロッド求積法 (Gauss-Kronrod quadrature) のルーチンを追加
  • 二重指数関数型数値積分 (double-exponential quadrature) のルーチンを追加 (tanh-sinh, exp-sinh, sinh-sinh)
  • チェビシェフ多項式 (Chebyshev polynomial) の評価 (evaluation)、平方根 (roots)、積分 (integration)、微分 (differentiation)、内挿 (interpolation, 補間) のルーチンを追加

Multi-index

  • modify()modify_key()をより頑強にし、Modifierで例外が送出された場合や、Rollback関数で復旧がされなかった場合に、変更要素を消去するようにした (完全な議論は Trac #12542 を参照)。これは技術的には後方互換性がなく、以下のコードにおいて:

    c.modify(c.begin(),[](auto&){throw 0;});
    

    Boostの以前のバージョンではcは維持されたが、現在はc.begin()の要素は消去される。この問題を提起したJon Kalb氏に感謝する - メンテナンス上の修正

Optional

  • 新しいコンパイラでは、Tがスカラー型の場合 optional<T> がトリビアルコピー可能となった。これは、これまでとは異なるストレージ(aligned_storage ではなく、単なる T)を用いることで実現している。 我々はコンパイラが default宣言 された関数をサポートすることを必須としている
  • GCC が -Wmaybe-uninitialized の警告を誤って出すのを防止するため、 operator== の実装を変更

PolyCollection

  • GCC 4.8から4.9、Clang 3.3から3.6といった古いバージョンのコンパイラで動作するようバックポートした。GCC 4.8のlibstdc++-v3では、一部の機能が欠如しているために、以下の制限がある (Clangでlibstdc++を使用する場合も同様)。
    • 状態を持つアロケータがない
    • アロケータのムーブ構築がコピー構築にdecayされる
    • 要素のコピー中に例外が送出されると、コピー構築がクラッシュする
  • メンテナンス上の修正

Predef

  • Windows Universal Platformの検出を改善した (James E. King, III氏に感謝)
  • cloudlibcを使用したCloudABIの検出を追加 (James E. King, III氏に感謝)
  • その他バグ修正

Regex

  • de-fuzzingによって発見されたセキュリティ問題に対する小さな修正をした

Stacktrace

  • 常識から外れたMinGW-w64環境で動作するようにした
  • libbacktraceがインストールされたMinGW環境 (-w64なし) で動作するようにした。さらなる情報は、MinGWの「MinGW specific notes」セクションを参照

Thread

バグ修正

  • Trac #12323 Windows環境で関数ポインタ_pRawDllMainOrigのシグニチャが間違っていた問題を修正
  • Trac #12730 MSVC 2017でTLS cleanup hooks関係のシグニチャが変わった問題に対処
  • Trac #12976 Boost Thread Executorsのドキュメント間違いを修正
  • Trac #12949 BOOST_THREAD_HAS_CONDATTR_SET_CLOCK_MONOTONICを定義してもスリープ操作がモノトニックにならなかった問題について、インクルード不足でも誤って動作してしまっていたのを修正
  • Trac #13019 BOOST_THREAD_PROVIDES_INTERRUPTIONS定義時のABI互換が不完全だった問題を修正
  • Trac #13069, GitHub #132, GitHub #134, GitHub #135, GitHub #136, GitHub #137 MSVC 2015環境でスレッドプールのテストがハング・デッドロックしていた問題を修正
  • Trac #13163 可変引数テンプレートをもたない環境でboost::detail::heap_new()が引数4個までしかサポートされていなかったため、9個まで使用できるようにした
  • Trac #13226 POSIX環境でgetpagesize()が非推奨になったため、ワークアラウンドを入れた
  • GitHub #133 Windows環境でSpuriousなテイミングテストが失敗していたため、タイムアウトの閾値を修正
  • GitHub #143 MSVC 12.0でコンパイルエラーになる問題を修正
  • GitHub #145 BOOST_THREAD_ATTRIBUTE_MAY_ALIAS定義時にClangでコンパイルエラーになる問題を修正

新たな実験的機能

  • GitHub #116 promiseクラスに、遅延書き込みの関数を追加。set_value_deferred()set_exception_deferred()notify_deferred()

Utility

  • boost/next_prior.hppをBoost.Iteratorモジュールに移動。ユーザーコードは変更の必要なし

Uuid

  • 改善
    • GitHub #26 name_generatorをリファクタし、hash provider conceptによるハッシュアルゴリズムの設定変更をできるようにした。オプション機能としてRFC-4122のMD5ハッシュ実装を追加した。この変更によって、将来の標準ハッシュアルゴリズムがサポートしやすくなった
    • GitHub #34 RFC 4122, Appendix Cの名前空間としてboost::uuids::nsを追加
  • バグ修正
    • Trac #8630, Trac #11482 Trac #12253 string_generatorが不正なuuidを受け付けてしまっていた問題を修正
    • Trac #10665 name_generator::operator()をドキュメントに合わせてconstメンバ関数にした
    • 実証詳細のヘッダファイルをdetailディレクトリに移動した。ユーザーコードの変更は必要ないが、移動前の古いファイルをインクルードしたときに警告は出力される

Variant

  • Trac #6971 apply_visitor()visitablesパラメータ (variantオブジェクト) を完全転送するよう修正。この機能を実装してくれたLevon Tarakchyan氏に多大なる感謝を

テスト済みコンパイラ

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

  • Linux:
    • Clang: 3.0, 4.0.1, 5.0.1
    • Clang, C++0x: 3.0
    • Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 5.0.1
    • Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.1
    • Clang, C++17: 5.0.1
    • GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 5.4.0, 7.2.0
    • GCC, C++0x: 4.4.7
    • GCC, C++11: 4.7.2, 4.7.3, 4.8.5, 4.9.4, 6.4.0, 7.1.0, 7.2.0
    • GCC, C++14: 5.4.1, 6.3.0, 6.4.0, 7.1.0, 7.2.0, 7.2.1
    • GCC, C++17: 7.2.0
    • Intel: 18.0
  • OS X:
    • Clang: 9.0.0
    • Clang, C++11: 9.0.0
    • Clang, C++14: 9.0.0
    • Clang, C++1z: 9.0.0
  • Windows:
    • GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4
    • GCC, C++0x: 4.6.4
    • GCC, C++11: 4.7.3
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
  • Android:
    • Clang: 3.6, 3.7, 3.8
    • GCC: 4.9, 5.4
    • GCC, C++14: 6.2
  • FreeBSD:
    • Clang: 4.0.0
    • Clang, C++11: 4.0.0
    • Clang, C++14: 4.0.0
    • Clang, C++1z: 4.0.0
  • QNX:
    • QCC, C++0x: 4.4.2
    • QCC, C++11: 4.7.3

追加して含まれるテストコンパイラ:

  • Linux:
    • Clang: 3.0, 3.8.1, 4.0.1, 5.0.1
    • Clang, C++0x: 3.0
    • Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 5.0.1
    • Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.1
    • Clang, C++17: 5.0.1
    • GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 5.4.0, 7.2.0
    • GCC, C++0x: 4.4.7
    • GCC, C++11: 4.7.2, 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 7.2.0
    • GCC, C++14: 5.4.1, 6.3.0, 6.4.0, 7.1.0, 7.2.0, 7.2.1, 8.0.0
    • GCC, C++17: 7.2.0
    • Intel: 18.0
  • OS X:
    • Clang: 9.0.0
    • Clang, C++11: 9.0.0
    • Clang, C++14: 9.0.0
    • Clang, C++1z: 9.0.0
  • Windows:
    • GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4
    • GCC, C++0x: 4.6.4
    • GCC, C++11: 4.7.3, 4.8.1, 4.9.3
    • GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0, 7.1.0
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
  • Android:
    • Clang: 3.6, 3.7, 3.8
    • GCC: 4.9, 5.4
    • GCC, C++14: 6.2
  • FreeBSD:
    • Clang: 4.0.0
    • Clang, C++11: 4.0.0
    • Clang, C++14: 4.0.0
    • Clang, C++1z: 4.0.0
  • QNX:
    • QCC, C++0x: 4.4.2
    • QCC, C++11: 4.7.3

翻訳

Akira Takahashi, Kohei Takahashi, Yoshinari Takaoka