本家リリースノート:
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_constructible
is_nothrow_move_assignable
has_trivial_move_assign
has_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