本家リリースノート:
https://svn.boost.org/svn/boost/website/public_html/live/feed/history/boost_1_54_0.qbk
新ライブラリ
- Log
- Andrey Semashevによる、ロギングライブラリ
- TTI
- Edward Dienerによる、型特性の内省ライブラリ(Type Traits Introspection)
- Type Erasure
- Steven Watanabeによる、コンセプトに基づいた実行時多相性のライブラリ
更新ライブラリ
- Accumulators
- Algorithm
- Any
- Asio
- Chrono
- Circular Buffer
- Container
- Context
- Coroutine
- Geometry
- Graph
- Interprocess
- Intrusive
- Iostreams
- Lexical Cast
- Math
- Move
- Multiprecision
- Polygon
- Property Map
- Range
- Thread
- Type Traits
- uBLAS
- Unordered
- Utility
- Variant
- Wave
- Xpressive
ニュース
Boostはこのバージョンから、80386ターゲットCPUをサポートしない。x86 32ビットの最小サポートはi486となる。
80386ターゲットは、このリリース以前からBoost.SmartPtrとBoost.Atomicで適切なサポートがされていなかった。
いくつかのBoostライブラリ(たとえばBoost.Log)は、CPUに求める要件を定めているので、詳細は各ライブラリのドキュメントを参照すること。
x86 32ビットターゲットのデフォルトでは、i686(Pentium Pro)とそれ以降でビルドされる。これはb2とbjamのコマンドラインオプションで変更指定できる。例:
b2 variant=release architecture=x86 instruction-set=i486 stage
選択可能な命令セットは以下である:
- ホストCPUのターゲット: native
- 汎用x86 CPU: i486, i586, i686
- Intel CPU: pentium, pentium-mmx, pentiumpro, pentium2, pentium3, pentium3m, pentium-m, pentium4, pentium4m, prescott, nocona, core2, corei7, corei7-avx, core-avx-i, conroe, conroe-xe, conroe-l, allendale, merom, merom-xe, kentsfield, kentsfield-xe, penryn, wolfdale, yorksfield, nehalem, sandy-bridge, ivy-bridge, haswell, atom
- AMD CPU: k6, k6-2, k6-3, athlon, athlon-tbird, athlon-4, athlon-xp, athlon-mp, k8, opteron, athlon64, athlon-fx, k8-sse3, opteron-sse3, athlon64-sse3, amdfam10, barcelona, bdver1, bdver2, bdver3, btver1, btver2
- VIA CPU: c3, c3-2
- IDT CPU: winchip-c6, winchip2
非推奨ライブラリ
Boost 1.54.0から、Boost.Signalsが非推奨となる。まだ削除はされない。
Boost.Signals2に移行すること。
Accumulators
Algorithm
copy_whileとcopy_untilの戻り型を変更した。これはインターフェースの変更である。もしこれらの関数の戻り値を利用しているなら、コードを変更しなければならない。単に更新済みのOutputIteratorを返すのではなく、これらの関数はstd::pair<InputIterator, OutputIterator>を返す。もしこの変更が運用中のコードに影響を与えるならば、呼び出しの最後に.secondを加えるのが以前と同じ挙動になる最も簡単な変更になるだろう。- C++14版の
is_permutation()、equal()、mismatch()を追加。
Any
- C++11の機能サポートを追加(#6999)
- ムーブコンストラクタとムーブ代入演算子
noexceptを追加
Asio
- 新たなトレイトクラス、
handler_typeとasync_resultを追加。これらを使用することで、開始関数(async_read()とか)の戻り値型をカスタマイズできる。 asio::spawn()関数を追加。これはBoost.Coroutineベースのスタックフルコルーチンによる高レベルなラッパーである。spawn()関数を使用することで、同期ロジックのように非同期ロジックを書けるようになる。- 例:
size_t n = my_socket.async_read(my_buffer, yield);
- 例:
- 特殊な値、
asio::use_futureを追加。これを開始関数に指定することで、C++11環境で非同期の開始関数がstd::futureを返すようにできる。- 例:
future<size_t> = my_socket.async_read(my_buffer, asio::use_future);
- 例:
- HTTPサーバー4の例で使用していた、スタックレスコルーチンのクラスとマクロを、正式にドキュメントに記載し、推進するようにした。
- 新たなハンドラーフックである
asio_handler_is_continuation()関数を追加。非同期操作が、現在実行中のハンドラに関連付けられた非同期制御フローの継続を表現する場合がある。asio_handler_is_continuation()がtrueを返すようカスタマイズすれば、Asioの実装はその知識を使ってハンドラのスケジューリングを最適化することができる。一般的なケースとしては、strand、spawn、非同期操作の組み合わせなどがある。 - 4つの汎用的なプロトコルクラスを追加。
generic::datagram_protocol、generic::raw_protocol、generic::seq_packet_protocol、generic::stream_protocol。これらはProtocol要件に基いて実装しているが、アドレスファミリ(たとえばAF_INET)とプロトコル種類(たとえばIPPROTO_TCP)は、実行時にユーザーが指定できる。 - C++11のムーブコンストラクタを追加。これによって、
socket(やacceptor)からジェネリックな型への変換が可能になる。たとえば、ip::tcp::socketからgeneric::stream_protocol::socketへのムーブ構築が可能である。 basic_socket_acceptor<>クラスのaccept()とasync_accept()を拡張。新たなコネクションとして、socketをよりジェネリックな型に直接accept可能になる。たとえば、ip::tcp::acceptorをgeneric::stream_protocol::socketオブジェクトにaccept可能である。- 既存のサンプルをC++03用ディレクトリに移動し、C++11用のディレクトリを新たに作った。C++03の限定的なサブセットとして、C++11に等価に変換可能である。
- SSLの機能を多々強化した。Nick Jonesに感謝する。
- すでにワイヤーから読み取られたデータを再利用することによって、SSLのハンドシェイクをサポートした。
ssl::stream<>クラスのhandshake()とasync_handshake()に新たなオーバーロードを追加した。これらは、SSLエンジンのハンドシェイクプローシージャに入力を渡すために、ConstBufferSequenceを受け付けるようにした。 - TLSv1.1とTLSv1.2の
ssl::contextオブジェクトを作成できるようにした。 ssl::contextクラスとssl::stream<>クラスに、set_verify_depth()メンバ関数を追加。- SSLの証明書とキーのデータを、メモリバッファから読み込む機能を追加。
ssl::contextクラスに、以下の新たな関数を追加。add_certificate_authority()use_certificate()use_certificate_chain()use_private_key()use_rsa_private_key()use_tmp_dh()
ssl::contextを、デフォルトでは自動的にSSL圧縮を無効化するよう変更。新たな関数ssl::context::clear_options()を使用して、内部的にmy_context.clear_options(ssl::context::no_compression)が行われる。- [訳注] : SSLの圧縮は、ブルートフォースによる攻撃を容易にするため、使用してはいけない模様。
- 参照 : SSL/SPDYを攻撃するCRIMEはBEASTの正統な後継者だ
- すでにワイヤーから読み取られたデータを再利用することによって、SSLのハンドシェイクをサポートした。
signal_setでデッドロックの可能性があった実装を修正acceptorのサンプルにあった間違いを修正(#8421)waitable timerのドキュメントにあったコピペミスを修正(#8602)- コード解析ツールの要件を満たすために、いくつかの
assertを追加(#7739) - 不正な
#warningディレクティブを修正(#7939) - Linuxでデータ競合の可能性があった
epoll()の実装を修正 - Windows限定のバグで、限定された操作によって、
NULLのerror_categoryへのポインタを持つerror_codeを生成してしまう可能性があったので修正(#8613) basic_waitable_timerの内部実装で使用しているtime_pointの計算で、中間結果のdurationオブジェクトがオーバーフローしてしまう問題を修正- 同じ
io_serviceオブジェクトに対して平行にrun()とpoll()を呼び出すと、スレッドの起床がロストしてしまう問題を修正(#8354) - 非同期の接続操作が、reactorからの見かけ上の準備完了通知(spurious readiness notifications)に対処できるよう修正(#7961)
Chrono
- 入出力でのメモリリークを修正(#8079)
time_pointとdurationのコンストラクタに、BOOST_FORCEINLINEを付けた(#8318)- Xcode 4.5.2のClangで、標準ライブラリとしてlibc++を使用していると
durationのコンパイルが通らない問題を修正(#8367) - リファレンスのtypoを修正(#8370)
- HP-UXでChronoのコンパイルが通らない問題を修正。ワークアラウンドの判定条件が逆だった(#8435)
Circular Buffer
- 警告を修正(#8032)
Container
- Andrew HundtとAdam Wulkiewiczのハイパフォーマンスな
vararrayの実装をベースにしたstatic_vectorクラスを、実験的に追加。 vectorのコンストラクタ/コピー/ムーブ/スワップの速度を改善。memcpyが可能な場合には、それをディスパッチするようにした。BOOST_NO_EXCEPTIONSをサポートした(#7227)- バグ修正
boost::container::slistクラス内部で、intrusive::pointer_traits::to_pointerが呼び出せないというコンパイルエラーが発生していた問題を修正(#7921)。BOOST_MOVABLE_BUT_NOT_COPYABLEがGCCで使用できない問題を修正(#7969)stable_vector::back()が不正な値を返す問題を修正(#8118)deque::insert(const_iterator, Itr, Itr)の計算オーダーが間違っていたので修正(#8294)scoped_allocator_adaptorのswapを追加(#8553)
Context
- SPARCアーキテクチャをサポート
Coroutine
- 分割スタック(要求に対して成長するスタック)のサポートを追加
- 以下のチケットを修正
Geometry
新機能
- Spartial Index(空間インデックス)を追加。これはAdam WulkiewiczによってBoost.Geometry向けに開発された。オリジナルの実装は、Hartmut Kaiserがメンターを勤めたGoogle Summer of Code 2008のプロジェクトで、Federico J. Fernandezが始めた。
- SVG出力を追加。これは拡張機能として数年前からある。
ドキュメント
- いくつか説明不足だったところを修正
バグ修正
- 共線の反対セグメント(collinear opposite segments)が(主に円:circleで)持っていた、堅牢性の問題を修正
insertion()が、交点の挿入に失敗する問題を修正- Vladimir Petrovicのパッチによる、横断のデバッグ機能を適用
解決したチケット
floatの縮退union()の結果を修正(#7462)scale_transformerクラスのコンストラクタがprivateになっていたので、publicに修正(#7465)cart_intersect.hppの、未使用パラメータ警告を修正(#7802)intersection()が誤った交点を検出する問題を修正(レアケース)。(#8254)- polygon modelが、ドキュメントに記載された
Polygonコンセプトを厳守していなかった。ドキュメントを更新(#8393) - 「条件式は定数式でなければならない」というコンパイラの警告をを黙らせた(#8403)
- 未使用変数警告を黙らせた(#8405)
内部的な変更
- いくつかのアルゴリズムのバリエーションを作った(
append,area,clear,convert,equals,length,num_points)
Graph
- Jakob Lykke AndersenとFlavio De Lorenziによる、VF2 subgraph isomorphishmへの更新を追加(#8166)
- Fernando Vilasによる、maximum adjacency search(最大隣接探索)アルゴリズムを追加(#6780)
- Brammert Ottensによる、resource-constrained shortest paths (
r_c_shortest_paths, リソース制限最短経路)アルゴリズムへのタイムアウトサポートを追加。 - ドキュメントとサンプルコードへの様々な修正。古いコンパイラ向けのワークアラウンドを除去。
- 以下のバグを修正:
- graphmlの値に"for"属性を設定すると例外が投げられてしまう問題を修正(#7016, #7155)
isomorphism()に異なる2つのグラフ型を与えると、コンパイルエラーになる問題を修正(#7845)- 削除した名前付き頂点を再度追加すると、不正なグラフになる問題を修正(#7863)
graph/example/dijkstra-example.cppのコンパイルが通らない問題を修正(#7877)reverse_graphの構築が、コンパイルエラーになる問題を修正(#8192)dijkstra_shortest_paths()において、距離の比較がドキュメントとは異なる実装になっていた問題を修正(#8398)- PBGLのビルドが、C++11モードで失敗する問題を修正(#8411)
- Johnson APSPのドキュメントで、
DistanceMapの値型にaddable(a + bが可能なこと)を要求していたが、これは不要なので要求を削除(#8427) - Johnson APSPのドキュメントで、
DistanceMapとWeightMapの値型に、実装にある「2項減算が可能なこと(a - b)」が記載されていなかったので修正(#8428) - Sloan orderingの実装が、特定の値型を使用していたので、テンプレートの型を使用するよう修正(#8434)
astar_search()のDistanceTypeに、numeric_limitsの特殊化を必要としないよう修正(#8490)
Interprocess
mapped_regionに、プラットフォーム規定のフラグサポートを追加(#8030)- バグ修正
shared_memory_objectのm_modeメンバ変数が、デフォルトコンストラクタで初期化されない問題を修正(#7484)interprocess::unique_ptrが代入できない問題を修正(#7598)named_mutex/named_conditionの組み合わせが壊れる問題を修正(#7682)named_mutex::remove()を連続で呼び出すと、成功してもfalseが返ってきてしまう問題を修正(#7923)- BSD向けのワークアラウンドを修正(#7924)
interprocess::shared_memory_objectの生成が無限ループに陥ってしまう問題を修正(#7928)- OSの起動時間が、時計で変更できてしまう問題を修正(#7936)
interprocess/mem_algo/rbtree_best_fit.hppのアサートに副作用がある問題を修正(#8521)mapped_region::flush()で、asyncパラメータの比較条件が逆だったので修正(#8595)
- ABI変更:Windowsにおいて、OSの起動時間をイベントログから取得してくるように修正した。以前使用していた
LastBootupTime()は、WMIから使用すると、不正な時刻同期を行ってしまう。1.54.0より前のOS起動時間が本当に必要であれば、BOOST_INTERPROCESS_BOOTSTAMP_IS_LASTBOOTUPTIMEを定義すること。
Intrusive
BOOST_NO_EXCEPTIONSサポートを追加(#7849)
Iostreams
Lexical Cast
- 文字ポインタへの変換が実行時ではなくコンパイル時アサートになるようにした(#8334)
boost::int128_typeとboost::uint128_typeの変換に対応した(#7909)- 内部ストリームバッファの扱いを変えて、libc++で動作するようになった(#8267, #7704)
- 1.53.0で
lexical_cast()のアドレス取得ができなくなっていたのを修正(#7421) - 警告、内部実装、テストの修正(#2558, #7949, 8162, #8369, #8547)
Math
- 他のBoost.Math用の整数ユーティリティ(最大公約数と最小公倍数)、四元数や八元数を組み込むために大きな再構成を行った。これについて新しく章見出しを作った。
- Boost.Multiprecisionのリファレンスを追加し、
cpp_dec_float_50をユーザー定義型(UDT:User-defined Type)の例として追加した - Clangをサポートコンパイラに加えた
- 任意の精度で計算結果のスレッドセーフなキャッシュを使うための定数を修正した。
- Christopher Kormanyos氏により、
cyl_bessel_j_zero、cyl_neumann_zero、airy_ai_zeros、airy_bi_zerosというベッセル関数の零点を求める関数が追加された。 - Rocco Romeo氏に協力いただき、第一種ベッセル関数と、第二種ベッセル関数の精度が向上した
- ヘッダがコンパイルされないひどい循環依存バグを解消した(#7999)
tgammaが142.5から143の実引数を与えると奇妙なオーヴァーフローを起こすバグを修正した。- 例外がキャッチされたときに正しくない結果を返す
raise_rounding_errorのバグを修正した(#7905) __float128のサポートを最小限追加した- ポワソン分位数が境界値ぎりぎりの場合に発生するバグを修正(#8308).
- 導関数が平坦になっている領域で、不完全ベータ逆関数に対処するためのHalley iterationで利用しているヒューリスティックを調整した。例えば計算機イプシロンよりも確率が小さい場合におけるフィッシャーF分布の四元数を算出する場合などである。#8314 を参照のこと。
Move
BOOST_MOVABLE_BUT_NOT_COPYABLEを使うとC++11でGCCコンテナ型が利用できなくなる問題を修正(#7969)BOOST_NO_CXX11_RVALUE_REFERENCESが未定義だと、has_move_emulation_enabledがboost名前空間に定義されないバグを修正(#8231)
Multiprecision
- 破壊的変更 :
rational_adapterをrational_adaptorに名前変更 - MPFIのサポートを追加
logged_adaptorを追加- 128ビット浮動小数点数型として、GCCの
__float128とIntelの_Quadのサポートを追加 cpp_intにユーザー定義リテラルのサポートを追加。constexprサポートを改善。cpp_intによる符号あり整数の除算が、正しくない結果になる問題を修正(#8126)- single limbの
cpp_intで、減算が正しくない結果になる問題を修正(#8133) cpp_intで0を何かで割っても、結果が0にならない問題を修正(#8160)- 変数を再利用するケース(たとえば
a = pow(a, b))で、超越関数が不正な結果になる問題を修正(#8326)
Polygon
- Voronoiドキュメントの修正と更新
Pointコンセプトのドキュメントで、typedefが抜けていたのを修正(#8026)range/algorithmと名前衝突する問題を修正(#8197)#pragma warningする際に、defaultではなくpushとpopを使用するよう修正(#8257)
Property Map
- Guillaume Pinotによる、
compose_property_mapを追加
Range
バグ修正
- いくつかのRangeコンセプトが、正しくないイテレータコンセプトを使用していた問題を修正(#6944)
istream_rangeにwcinを渡すとコンパイルエラーになる問題を修正(#7407)istream_rangeの内部で<istream>をインクルードしていたが、<iosfwd>で十分なため、インクルードするヘッダを変更(#7408)irangeに渡すステップサイズが3以上だと、最終要素がステップサイズの倍数の場合に、rangeの要素に含まれない問題を修正(#7731)- Rangeアルゴリズムに
r | indexedを渡すとコンパイルエラーになる問題を修正(#7827) iterator_rangeに、配列へのポインタを入れられない問題を修正(#8338)BOOST_NO_PARTIAL_TEMPLATE_SPECIALIZATIONマクロを使用した設定が正しくない問題を修正(#8453)
Thread
新機能
- C++11準拠:
call_once()の引数をムーブで渡すことを可能にした(#7285) - 非同期:
futureにthen()メンバ関数を追加(#7445) - 同期:
synchronized_valueクラスを追加(#7449)
バグ修正
- MinGW 4.5.0での、
interruptible_wait()関数のリンクエラーを修正(#4878) - win32で
shared_mutexのタイムアウトが正しく動作していなかった問題を修正(#4882) - pthread環境の
call_once()実装が、いくつかの環境でうまく動作しない可能性がある問題を修正。エポックの値としてuintmax_tを使用していたが、アトミックであることが保証される型を使用するようにした。(#5752) shared_mutexの警告を修正(#6652)- Intel C++ Compilerで、
#include <atomic>しているところがコンパイルエラーになっていた問題を修正 #6843) boost::future_categoryのDLLリンケージを修正(#6966)shared_mutexのロック/アンロックで、lock_error例外が送出される問題を修正(#7720)- Windows上の
shared_mutexで、デッドロックが発生する問題を修正(#7755) - MSVC 11.0で
BOOST_THREAD_DONT_USE_DATETIMEを使用するとコンパイルエラーになる問題を修正(#7980) - AIX上で
pthread_delay_np()呼び出しがコンパイルエラーになる問題を修正(#7982) - Visual Studio 2003でThreadライブラリのコンパイルが通らない問題を修正(#8027)
- Windowsの64ビット環境で、
GetTickCount()の代わりにGetTickCount64()を使用するよう修正(#8070) - Windows上で
boost::this_thread::sleep_for()のスリープ時間が長い問題を修正(#8136) - Solaris 10上で
futureのコンパイルが通らない問題を修正(#8212) - ドキュメントで、
thread_groupのインクルードヘッダが間違っていたので修正(#8237) barrier::wait()に割り込みポイントが設定されていることを、ドキュメントに明記(#8239)try_join_for()に時間0を渡すと、無限ループしてしまう問題を修正(#8323)future_error::what()が、死んだオブジェクトの文字列を返していた問題を修正(#8337)constexprが使用できない環境で、完全なC++11実装のcall_once()が有効になっていたので、条件一致しない場合はC++03実装を選択するようにした(#8371)mutex.hppとrecursive_mutex.hppの両方でpthreadのタイムアウト付きロックが使用可能かをチェックしていたが、片方のチェック条件が緩かったために、利用可能でないタイムアウト付きロックが選択できてしまっていた問題を修正(#8443)boost::scoped_thread::joinable()のドキュメントが抜けていたので修正(#8451)- 未使用変数の警告を修正(#8530)
- C++11が有効な場合に、
packaged_taskに関数オブジェクトのコピーではなく参照を保持するようにした(#8596)
Type Traits
- 新たなType Traitsを実装した(#8189)
is_nothrow_move_constructibleis_nothrow_move_assignablehas_trivial_move_assignhas_trivial_move_constructor
uBLAS
ベータ後の変更
- スカラ型による除算に
enable_ifを使用するようにした(#6511) - フリー関数
num_columns()とnum_rows()を追加(#7297) assignment.hppの、リンケージ問題を修正(#6010)
Unordered
- すごく基本的な
noexceptをサポートした
Utility
basic_string_ref::find()が、発見したかどうかを判定するために==ではなく=を使っていた問題を修正(#8067)noncopyableのC++11版を作成(#6578)noncopyableのDLLインタフェースを使用したときに発生する警告を修正(#6935)- SolarisStudioコンパイラで発生する
boost::functionに対するboost::addressof()でのコンパイルエラーを修正(#7079)
Variant
- Boost.TypeTraitsの、
noexceptなコンストラクタと代入演算子を判定する新たなトレイトを使用するようにした。これによって、C++11のboost::variantは、多くの型に対してパフォーマンス向上する。(#8296) - multiple visitationを実装した(#8459)
- C++11機能サポートに関するドキュメントの更新
Wave
- Boost.waveをClangの
-Wimplicit-fallthrough診断に対応させた(#8478)
Xpressive
テスト済みコンパイラ
主要なテストコンパイラ:
- Linux:
- GCC: 4.4.7, 4.5.3, 4.6.2, 4.6.3, 4.7.3
- GCC, C++98 mode: 4.7.3
- GCC, C++11 mode: 4.7.2, 4.7.3, 4.8.0
- Clang: 3.0, 3.1, 3.2
- Clang, C++11 mode: 3.2
- OS X:
- GCC: 4.2
- Apple Clang: 4.2.1
- Apple Clang, C++11 mode: 4.2.1
- Windows:
- GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.2, 4.8.0
- Visual C++: 8.0, 9.0, 10.0, 11.0
- FreeBSD:
- GCC: 4.2.1
追加して含まれるテストコンパイラ:
- Linux:
- Clang: 3.0, 3.1, 3.2, from Subversion
- Clang, with libc++: 3.2
- GCC: 4.4.7, 4.5.3, 4.6.2, 4.6.3, 4.7.2, 4.7.3
- GCC, C++98 mode: 4.7.3
- GCC, C++11 mode: 4.7.3, 4.8.0
- OS X:
- Apple Clang: 4.2.1
- Apple Clang, C++11 mode: 4.2.1
- Clang: from Subversion
- Clang, C++11 mode: from Subversion
- GCC: 4.2
- Windows:
- GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.2, 4.8.0
- Visual C++: 9.0, 10.0, 11.0
- Visual C++, Windows Mobile 5, with STLport: 9.0
- AIX:
- IBM XL C/C++ Enterprise Edition: 12.1.0.1
- FreeBSD:
- GCC: 4.2.1
翻訳
Akira Takahashi, zak