最終更新日時:
が更新

履歴 編集

Boost 1.65.0リリースノート

本家リリースノート:

リポジトリは以下:

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

リリース後のパッチ

  • 結合したパッチ
  • ContextとFiberのライブラリが、継続が必要とされる状況でそれを返さない問題へのパッチ
  • Threadライブラリの、Windows環境でのboost::condition_variableに対するバグへのパッチ

新ライブラリ

  • PolyCollection
    • Joaquín M López Muñoz氏による、多相オブジェクトに対して高速に動作するコンテナのライブラリ
  • Stacktrace
    • Antony Polukhin氏による、バックトレースの収集、コピー、表示をするライブラリ
    • GitHub #14 既知の問題として、MinGWでこのライブラリを使用した場合に、空のバックトレースが生成される可能性がある

更新ライブラリ

Asio

  • Trac #13121 g++ 4.6でのリンクエラーを修正するため、標準アトミックを使用するための要件をg++ 4.7以上とした
  • 最近のMSVCのバージョンで、constexprと可変引数テンプレートを有効にした
  • Linuxのepollバックエンドでの競合状態を修正。これは、epollで別のスレッドがブロックされているときに、ソケットやディスクリプタを閉じたときに発生していた
  • 非推奨だったauto_ptrの使用をやめた
  • リアクティブなasync_acceptの実装での、asio_handler_is_continuationの間違った使用を修正
  • Trac #12419 いくつかの現代的なPOSIXプラットフォームで、sys/poll.hではなくpoll.hを使用するよう変更
  • MSVCでのインテリセンス検出を修正
  • android/clang/x86ターゲットで、拡張キーワード__threadの使用を無効にした

Context

  • 改善
    • call/ccがucontext-API (swapcontext)をサポート
    • call/ccがWindowsのFiber APIをサポート
    • call/ccがオンデマンドgrowing stack (セグメント化スタック/分割スタック) をサポート
  • バグ修正
    • Trac #12719 mingw-w64ツールチェインで、テストケースとサンプルがセグメンテーションフォルトになっていた問題を修正
    • GitHub #52 g++-4.9でcallccテストのビルドが失敗する問題を修正
  • 重要
    • 1.65.0では、以下のバグ修正が必要となる: (https://github.com/boostorg/context/commit/420554fe9ac01482990e8ae314f4f7ba81010c9a)

Config

  • 欠陥検出マクロとして、以下を追加:
    • BOOST_NO_CXX11_POINTER_TRAITS : C++11のstd::pointer_traitsクラス
    • BOOST_NO_CXX17_FOLD_EXPRESSIONS : C++17の畳み込み式
    • BOOST_NO_CXX17_INLINE_VARIABLES : C++17のインライン変数
    • BOOST_NO_CXX17_STRUCTURED_BINDINGS : C++17の構造化束縛

Core

  • C++03以降向けにpointer_traitsを実装した。これには、P0653r0のポインタへの変換関数が含まれる (実装者のGlen Fernandes氏に感謝)。この実装は、Align、Circular Buffer、Fiber、Geometryなどの他のライブラリで使われている
  • Lightweight testにBOOST_TEST_GT (operator>による比較) とBOOST_TEST_GE (operator>=による比較)を追加

Coroutine2

  • ucontext-API (swapcontext)をサポート
  • WindowsのFiber APIをサポート
  • Trac #13064 CoroutineとCoroutine2の異なる振る舞いを修正

DLL

  • 非WindowsプラットフォームでのPEのパースを修正

Fiber

  • 改善
    • ハードウェアトランザクショナルメモリ (Intel TSX) をサポート
    • NUMAをサポート
    • ucontext-API (swapcontext) をサポート
    • WindowsのFiber APIをサポート
    • オンデマンドgrowing stackをサポート
  • バグ修正
    • GitHub #121 GCC 4.8のC++11モードでコンパイルエラーになる問題を修正
    • GitHub #123 schedule_from_remoteがアサーション失敗する問題を修正
    • GitHub #125 テストでクラッシュする問題を修正
    • GitHUb #126 内部で使用しているメモリオーダーが間違っていた
  • 重要
    • 1.65.0では、以下のバグ修正が必要となる: (https://github.com/boostorg/fiber/commit/63f1041f0e484e64dec437a0fa780ea2463abda2)

Fusion

  • Trac #12986 MSVC 14.1は未対応となっていた次の可変長テンプレートベースのコンテナをサポートした: fusion::vector, fusion::deque, fusion::map, fusion::set, および fusion::tuple

Hash

  • C++11標準のchar16_tchar32_tstd::u16stringstd::u32stringをサポート

Geometry

  • 改善
    • correct()の、area strategyをとるオーバーロードを追加
    • is_convex()の、side strategyをとるオーバーロードを追加
    • MultiPoint/AnyGeometryのために、不足していた関係操作 (covered_by, crosses, equalsなど) を追加
  • 解決した問題
    • Trac #12410 correct()に地理 (geographic) 座標系が不足していた
    • Trac #13035 segments near polesに対する非デカルト交差戦略が間違った結果となっていた
    • Trac #13057 boxに対するdisjoint()の数値的な問題によって、linestringのintersects()が間違った結果となっていた
  • バグ修正
    • is_validが、interior ringが他のinterior ringに接触 (touch) するmultipolygonに対してfalseを返す可能性があった問題を修正
    • is_validが、polygonがinterior ring内に配置され、他の全てと接触しているmultipolygonに対してfalseを返す可能性があった問題を修正
    • union_が不正な結果を生成する可能性があった問題を修正 (場合によってはBOOST_GEOMETRY_INCLUDE_SELF_TURNSをdefineする必要がある)
    • intersection (と同種の機能) を修正。しかし、いくつかの状況でまだ不正となる
    • difference (と同種の機能) を修正。しかし、いくつかの状況でまだ不正となる
    • intersection strategyからさまざまなアルゴリズム内部へのarea strategyの伝播を修正
    • relateでの未初期化変数と、overlayでの一時オブジェクトへの参照を修正
    • geographic Segment/Boxでのdisjointのエラーを修正
    • さまざまなアルゴリズムでの非デカルトGeometryのハンドリングを修正

Log

  • Solaris互換を改善。異なるプラットフォームを統一的に扱うビルドスクリプトを更新した

Phoenix

  • GitHub #50 幾つかのドキュメントを修正
  • Trac #7423 C++11以降かつ連想コンテナで phoenix::erase を使用した際にイテレータを返すように変更
  • GitHub #52 std::set および std::multiset はphoenixが提供する遅延関数で動作するようになった
  • GitHub #53 C++17以降では phoenix::random_shuffle を無効化した
  • Trac #11875 前方宣言ではなく適切なヘッダをインクルードするようにした

Predef

  • Intel C/C++コンパイラの値が9999だった場合に、コンパイラバージョン12.1.0となるよう修正
  • ワークアラウンド検出のために、BOOST_PREDEF_WORKAROUNDマクロとBOOST_PREDEF_TESTED_ATマクロを追加

    // #define BOOST_PREDEF_WORKAROUND(symbol,comp,major,minor,patch)
    
    #if BOOST_PREDEF_WORKAROUND(BOOST_COMP_CLANG,<,3,0,0)
        // Clangコンパイラの古いバージョン向けのワークアラウンドをここに書く
    #endif
    

    // BOOST_PREDEF_TESTED_AT(symbol,major,minor,patch)
    
    #if BOOST_PREDEF_TESTED_AT(BOOST_COMP_CLANG,3,5,0)
        // Clang 3.5.0以上での検証をここに書く
    #endif
    

  • ARM64 MSVC SIMDの検出を追加 (Minmin Gong氏に感謝)

  • iOSシミュレータとデバイスの検出を、プラットフォーム選択として追加 (Ruslan Baratov氏に感謝)
  • MinGWでのインクルードガードが間違っていた問題を修正 (Ruslan Baratov氏に感謝)

Program Options

  • Trac #7495, GitHub #18 boost::optionalに値を保存できるようにした (Ed Catmur氏に感謝)
  • GitHub #25 値なしでオプションを指定した場合のデフォルト値であるimplicit valueの解析において、次のトークンから値を使用できるようにした。1.59.0以降で、--option_name option_value構文でのimplicit valueが許可されなくなり、--option_name=option_valueの構文を使用する必要があった。これによって--option_name option_value構文の意味が変わってしまっていたために、以前の状態に戻し、両方の構文を許可するようにした

Python

  • boost::python::streval()exec()exec_statement()関数の引数としてconst char*をとれるようにした
  • 廃止していたboost::python::numericのAPIを削除した。代わりにboost::python::numpyを使用すること
  • MSVCとPython3でのビルド問題をいくつか修正

Smart Pointers

  • 新たなクラステンプレートatomic_shared_ptrを追加。これは、shared_ptr上にスレッドセーフなアトミックポインタ操作を提供する (作者Peter Dimov)
  • 新たなクラステンプレートlocal_shared_ptrを追加。これは、非アトミック操作によって参照カウントを更新する (作者Peter Dimov)
  • allocate_shared()make_shared()の配列版を、さらに最適化 (作者Glen Fernandes)
  • ドキュメントをAsciidocフォーマットで書き直した

Test

  • Boost Test v3.6
  • 新機能
    • C++17互換にした (VS2017でテストした) (Daniela Engert氏に感謝)
    • BOOST_TESTマクロで、C配列を直接比較できるようにした
    • より良いグローバルフィクスチャの仕組みとして、BOOST_TEST_GLOBAL_FIXTUREマクロを追加。グローバル初期化のためにBOOST_TEST_GLOBAL_CONFIGURATIONマクロを追加し、従来のBOOST_GLOBAL_FIXTUREを非推奨化。
    • フィクスチャのサポートを改善。setup() / teardown()メンバ関数について、teadown時間のチェックをより良いものにした
  • 破壊的変更
    • Trac #12631 いくつかのAPIをロガーのためにインタフェースを変更した
    • 従来のBOOST_GLOBAL_FIXTUREを非推奨化し、BOOST_TEST_GLOBAL_FIXTUREBOOST_TEST_GLOBAL_CONFIGURATIONに分割した
  • バグ修正
    • Trac #5282 テストフィクスチャが仮想継承をサポートしていないという問題。対応なし
    • Trac #5563 BOOST_GLOBAL_FIXTUREマクロで、デストラクタでテストに失敗するとクラッシュする問題を修正
    • Trac #11471 C配列を扱えない問題を修正
    • Trac #11962 フィクスチャのコンストラクタでBOOST_TEST_MESSAGEマクロを使用すると、不正なXMLが出力される問題を修正
    • Trac #12228 いくつかのヘッダがコンパイルエラーになる問題を修正
    • Trac #12631 BOOST_DATA_TEST_CASEBOOST_TEST_MESSAGEマクロを使用すると、不正な出力になる問題を修正
    • Trac #13011 BOOST_TESTマクロの浮動小数点数の比較が壊れていた問題を修正
    • GitHub #106 非推奨になっていたC++標準ライブラリの関数を置き換えた

Thread

  • 1.65.0でのWindows環境の重要なバグ

    • GitHub #130 Windowsのcondition_variableに同期問題が起きていた
    • 以下の2つのパッチをマージしてください
      • (https://github.com/boostorg/thread/commit/fdc0cbcd8ce8f34a19c7cdaf6f1fa679f0a49657)
      • (https://github.com/boostorg/thread/commit/395e3d786bc1dce9c60eb84da85f5845a2c1fb3d)
  • バグ修正

    • Trac #6787 システム時刻をロールバックするとboost::this_thread::sleep()がハングしていた問題を修正
    • Trac #12519 boost::thread::try_join_for()がタイムアウト後にreturnしなかった問題を修正
    • Trac #12874 future<>の拡張コンストラクタはBOOST_THREAD_PROVIDES_FUTURE_UNWRAP以下でなければならなかった
    • Trac #12888 mingw/gcc 4.4環境で、このライブラリがリンクできなかった
    • Trac #12958 sync_bounded_queue::wait_pull_front( lve )が例外を投げる可能性があった
    • Trac #13077 スタティックなlibboost_threadのリンクが、DLL初期化で失敗となっていた
    • Trac #13155 Solaris 11.3とOracle Linux (6と7)のpthreadシステム上でビルドに失敗していた問題を修正
    • GitHub #121 VS2017環境でon_tls_prepareが壊れていた

Type Index

  • Trac #13009 <boost/functional/hash.hpp>のインクルードが抜けていたところを修正 (Ed Catmur氏に感謝)
  • Trac #13027 C++11をサポートしているコンパイラでは、hash_code()の計算にstd::type_info::hash_code()を使用するようにした
  • GitHub #16 GCC 7以降でのctti_type_indexを修正 (Benjamin Buch氏に感謝)

Tyepof

  • Track #11821 clang-clでのコンパイルエラーを修正

Unordered

  • unordered_setunordered_multisetunordered_mapunordered_multimapで同じデータ構造を使用するようにした。これはC++17において、マージ(merge)と抽出(extract)操作のノードがコンテナ間で互換である必要があったため
  • 非推奨だった関数にdeprecated属性を追加
  • C++11コンパイラに対して、pairのpiecewise構築においてallocator_traitsconstructdestroyの使用を改善し、ふさわしい動作にした
  • 新しいOracleコンパイラに対して、ワークアラウンドを減らした
  • GitHub #5 未初期化メモリへのポインタ間接参照を回避

Utility

  • Trac #10847, Trac #13002 Boost 1.57.0からboost::next()boost::prior()がSFINAEフレンドリーでなくなっていた。互換性のために元に戻した

Variant

  • Trac #13018 boost::get()に右辺値参照版を追加
  • Trac #13037 <boost/variant/polymorphic_get.hpp>にインクルードが不足していた (Adam Badura氏に感謝)
  • Trac #8554, Trac #10041, GitHub #35 boost::make_variant_overを修正し、viewや他のForward Sequenceに対して動作するようになった (Mikhail Maksimov氏に感謝)

テスト済みコンパイラ

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

  • Linux:
    • Clang: 3.0, 3.8.1
    • Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 3.8.1
    • Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.8.1, 3.9.1, 4.0.1
    • Clang, C++1z: 4.0.0
    • GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 5.4.0, 7.1.0
    • GCC, C++11: 4.4.7, 4.7.2, 4.7.3, 4.8.5, 4.9.4, 5.4.0, 7.1.0
    • GCC, C++14: 5.4.0, 5.4.1, 6.3.0, 7.1.0
    • GCC, C++17: 7.1.0
    • GCC, C++1z: 6.3.0
    • Intel: 16.0, 17.0
    • Intel, C++11: 16.0, 17.0
    • Intel, C++14: 16.0
  • OS X:
    • Clang: 8.1.0
    • Clang, C++11: 8.1.0
    • Clang, C++14: 8.1.0
  • Windows:
    • GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4
    • GCC, C++11: 4.6.4, 4.7.3, 4.8.1
    • GCC, C++14: 4.9.3, 5.1.0, 5.2.0, 5.3.0, 6.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: 3.8.0
    • Clang, C++11: 3.8.0
    • Clang, C++14: 3.8.0
    • Clang, C++1z: 3.8.0
  • QNX:
    • QCC, C++11: 4.7.3
  • SunOS:
    • Oracle Solaris Studio: 12.5_next, 12.5
    • Oracle Solaris Studio, C++11: 12.5_next, 12.5

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

  • Linux:
    • Clang: 3.0, 3.8.1
    • Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 3.8.1
    • Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.8.1, 3.9.1, 4.0.1
    • Clang, C++1z: 4.0.0
    • GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 5.4.0, 7.1.0
    • GCC, C++11: 4.4.7, 4.7.2, 4.7.3, 4.8.5, 4.9.4, 5.4.0, 7.1.0
    • GCC, C++14: 5.4.1, 6.2.0, 6.3.0, 7.1.0, 8.0.0
    • GCC, C++17: 7.1.0
    • GCC, C++1z: 6.3.0
    • Intel: 17.0
    • Intel, C++11: 16.0, 17.0
    • Intel, C++14: 16.0
  • OS X:
    • Clang: 8.1.0
    • Clang, C++11: 8.1.0
    • Clang, C++14: 8.1.0
    • Clang, C++1z: 8.1.0
  • Windows:
    • GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4
    • GCC, C++11: 4.6.4, 4.7.3, 4.8.1
    • GCC, C++14: 4.9.3, 5.1.0, 5.2.0, 5.3.0, 6.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: 3.8.0
    • Clang, C++11: 3.8.0
    • Clang, C++14: 3.8.0
    • Clang, C++1z: 3.8.0
  • SunOS:
    • Oracle Solaris Studio: 12.5_next, 12.5
    • Oracle Solaris Studio, C++11: 12.5_next, 12.5

翻訳

Akira Takahashi, Kohei Takahashi