最終更新日時:
が更新

履歴 編集

Boost 1.46.0 リリースノート

本家リリースノート:

新ライブラリ

  • Interval Container Library。interval setとmap、および interval に関連づけられた値の集約。作者:Joachim Faulhaber。

更新ライブラリ

更新ツール

Array

  • cbegin/cendのサポートを追加(#4761)。
  • Sunコンパイラでの問題を修正(#4757)。

Asio

  • ip::address_v4::broadcast() を64ビット環境で使用する場合に生じる整数オーバーフローの問題を修正。
  • プログラムがしばらく動作したあとに、 deadline_timer ハンドラーの期限内の呼び出しを阻む、古い Linux カーネル上の問題を修正( timerfd サポートなしで epoll が使われるところ) (#5045)。

Bind

  • make_adaptableのドキュメントを記載(#4532)。

Concept Check

  • 自己代入による警告を修正(#4918)

Filesystem

  • デフォルトのライブラリバージョンをv3にした。
  • IBM vacpp: コンパイラのバグによるiterator_facadeのworkaroundに対応(#4912)。
  • 検証し、ドキュメント化された <boost/config/user.hpp> は、BOOST_FILESYSTEM_VERSION の規定のために使用される(#4891)。
  • Cスタイルの assertBOOST_ASSERT で置き換えた。
  • unique_path() の非推奨を取りやめた。代わりに、スレッド安全性と cwd のための代替手段を注記するようにした。 unique_path() は非推奨にするにはあまりに便利すぎる!
  • GCC のいくつかの警告を解消。
  • BOOST_THROW_EXCEPTION を使用するよう、 v2 コードを修正。
  • Windows: 非symlink reparseポイントを正確に報告するよう status() を修正。
  • directory symlink に再帰の制御を許可するために、 recursive_directory_iteratorsymlink_option を追加。
    • ※注: directory symlink はデフォルトでは再帰できない。
  • リファレンスドキュメントをクリーンナップした:リンク切れ、インクルード漏れ、記載されていない関数の追加。
  • 雑なコードをクリーンナップ。

Fusion

  • vector のコピーコンストラクタを、異なる環境でも同じ順序でシーケンスメンバをコピーするよう修正(#2823)。

Graph

  • Visual C++ 7.1 で Graphviz 出力が動作するよう修正。
  • assertBOOST_ASSERT に置き換え。
  • 使用する Boost.Filesystem のバージョンを v3 に変更。
  • (graph_traits 等を用いて) アダプトされたユーザー定義グラフを、reverse_graph アダプタとともに使用する際の問題を修正(#1021)。
  • GraphML を使用する場合はビルドが必要であることをドキュメントに記載(#4556)。
  • r_c_shortest_path のオーバーロードのうち一本の経路を要求するバージョンについて経路が見つからなかった場合にクラッシュする問題を修正(#4631)。
  • BGL ヘッダファイルと boost/range/irange.hpp で名前衝突が発生する問題を修正(#4642)。
  • カスタム property_mapastar_search で動作しない問題を修正(#4715)。
  • dijkstra_shortest_path (ダイクストラ法)のドキュメント中で、最小スパニングツリーでないものを最小スパニングツリーとして記述していた問題を修正(#4731)。
  • prim_minimum_spanning_tree (プリムの最小全域木)のドキュメント中で distance_map に関する記述が間違っていたので修正(#4737)。
  • subgraph.hppremove_edge_ifclear_vertex が(遅いが正しいコードなのに) "wrong" とコメントで記述されていた問題を修正(#4753)。
  • generate_random_graph の結果が指定通りの辺数にならない場合がある問題を修正(#4758)。
  • copy_component が正しく動作しない場合がある問題を修正(#4793)。
  • GraphML の parser が edge の省略可能なプロパティ id を必須としていた問題を修正(#4843)。
  • ドキュメントのスペルミスを修正(#4851)。
  • Dijkstra アルゴリズムの計算量の記述が誤っていた問題を修正(#4852)。
  • clustering_coefficientgraph_traits を使っていなかった問題を修正(#4887)。
  • filtered_graph でグラフに対するプロパティの扱いが抜けていた問題を修正(#4914)。
  • 部分グラフに対してループ辺を追加した場合に二重に追加される問題を修正(#4966)。
  • Trac 上に無い種々の問題の修正。

Hash

  • std::type_indexをサポート
  • -Wconversion警告を回避

Iterator

  • implicit_cast での問題を修正(#3645)
  • function_input_iterator を追加(#2893)
  • transform_iteratorfunction_object_result という独自の result type を使うのではなくて boost::result_of を使うように修正(#1427)

Math

  • Wald分布(Wald distribution)、 逆ガウス分布(Inverse Gaussian distribution)、幾何分布(geometric distributions)を追加。
  • configurationマクロの情報を追加。
  • real-numered 型のために mpreal のサポートを追加。

Meta State Machine

Optional

  • コンパイラのバグでテストが失敗する可能性があるということをテスト結果に記述(#2294)

Pool

  • poolにmax_sizeをセット可能になった(#2696)
  • boost/pool/pool.hpp static_castのかわりにreinterpret_castが使われている問題を修正(#2941)
  • boost::pool_allocator vectorvectorでも動作するように修正(#386)
  • Microsoftのメモリリーク検出機能との互換性を確立した(#4346)

Program Options

  • ドキュメントのサンプルのエラーを修正(#3992, #4858)
  • argvconst を付けるように修正(#3909)

Proto

  • ※破壊的変更: <boost/proto/core.hpp> で定義されていた functional::pop_frontfunctional::reverse<boost/proto/functional> に移動。
  • 多くのFusionアルゴリズムのラッパー(fusion::at等)と、標準ユーティリティライクな make_pair, first, second を 新たな <boost/proto/functional> ディレクトリに追加。
  • 文法から個別に変換を指定するのを許可。
  • proto::matches は、ドメイン固有式(domain-specific expression)を保存するラッパー。
  • proto::and_ 内での operator, の ADL 問題を修正。
  • 複数ドメインの式における文法チェックのハンドリングを修正(#4675)。
  • proto::display_exproperator<< が曖昧になっていた問題を修正(#4910)。
  • Proto expression で fusion::is_sequencetrue を返すよう修正(#5006)。
  • GCC で -Wundef オプションを使用したときに <boost/proto/fusion.hpp> で警告が出ていたのを修正(#5075)。

Signals

  • gcc で警告が出ないようにした(#4365)

Spirit

Spirit V2.4.2

新機能

  • Spirit.Qi および Spirit.Karma のドキュメントに、キーワードインデックスを追加。
  • コンテナに対して属性値を追加する場合に呼ばれる新たなカスタマイゼーションポイントとして traits::assign_to_container_from_value を追加。
  • lit(foo)」か「foo」かを区別することを可能にするために、 sprit::lit を実装するために使われていた proto::lit を独立したバージョンに置き換えた。この変更によってセマンティクスは全く変更されないはずであり、既存コードも破壊されないはずである。
  • コンテナ属性型として代入可能にするために、 Spirit.Qi に as<T>[] ディレクティブを追加(また、 string の特殊化バージョンである as_string および as_wstring を追加)。
  • 出力生成中にコンテナ属性型として処理可能にするために、 Spirit.Karma に as<T>[] ディレクティブを追加(また、 string の特殊化バージョンである as_string および as_wstring を追加)。
  • Spirit.Qi において、 lit() を数値に対しても使用できるようにした。
  • symbols<Ch, T> パーサーで、明示的な名前をエラーハンドリングとデバッギングに使用できるようにした。これは新メンバ関数 sym.name(...) を使用することで設定できる。パッチを送ってくれた teajay に感謝する。
  • symbols<Attrib, T> ジェネレータで、明示的な名前をエラーハンドリングとデバッギングに使用できるようにした。これは新メンバ関数 sym.name(...) を使用することで設定できる。

Qi もしくは Karma のバグ修正

  • Spirit.Qi シーケンスでコンテナ属性を扱う際の問題を解決した。先頭要素に対して適切に解析された属性がシーケンスの後ろの方の値によって上書きされてしまっていた。
  • Spirit.Karma の string(s) ジェネレータを修正。 s が属性のプレフィックスだけとマッチした場合でも成功していた。

Spirit.Lex の変更内容

  • qi::tokenid() プリミティブパーサーで、与えられた token id に基づいた任意の lexer token とマッチすることを可能にした。
  • デフォルト lexertl::token<> 定義のためのテンプレートパラメータを追加: token id の型。この型はデフォルトで std::size_t となる。 id 型として使用されるあらゆる型は、(明示的に) std::size_t に変換可能でなければならない。
  • lex::char_() および lex::string() に基づいたトークン定義に、 lexer のセマンティックアクションを付加できるようにした。
  • あるトークンとマッチした後、 lexer が自動的に切り替わるように lexer 状態を指定することを可能にした。この理由のために、トークン定義構文を拡張した:

template <typename Lexer>
struct lexer : lex::lexer<Lexer>
{
    lexer()
    {
        int_ = "[1-9][0-9]*";
        this->self("INITIAL", "TARGETSTATE") = int_;
     }
     lex::token_def<int> int_;
};

  • この例の lexerint_ にマッチし、 "TARGETSTATE" 状態に切り替わる。第2引数が指定されない場合は、(これまで通り)前の状態のままである。
  • パーサープリミティブ qi::tokens および qi::tokenid を引数なしで使用できるようにした。その場合、あらゆるトークンにマッチする。
  • lex::lit() を削除。

Spirit.Lexのバグ修正

  • すべての lexer 状態にただちにトークンを割り当てるために、 Lexer を与える問題を解決した。これは現在、状態の名前として "*" を使用することで可能となる。たとえば、以下は全ての lexer 状態にトークン int_ を加えるだろう:

template <typename Lexer>
struct lexer : lex::lexer<Lexer>
{
      lexer()
      {
          int_ = "[1-9][0-9]*";
          this->self("*") = int_;
      }
      lex::token_def<int> int_;
};

注:すべての lexer 状態が lexer オブジェクトに導入されたあと、 self("*") = ... が実行されなければならない。

  • lexer 先読みを修正。先読み操作は現在、その引数として使用される token_def インスタンスが使用した lexer 状態を使用して評価される。
  • multi_pass iterator の中で間違ったトークンがユーザーに返される問題を解決した。これは lexer 状態変更を実行し、トークンマッチを失敗させるためにセマンティックアクションの中で pass_fail を使用していた lexer とともの起こるかもしれない。

既知の問題

  • 整数リテラル(int_(10)のような)は、失敗に関して入力を消費する。これは代替演算子に関する問題に結びつくかもしれない。

Tokenizer

  • isspace/ispunct が間違ったキャラクタ型で呼ばれていたのを修正(#4791)

Unordered

  • value type での operator& の使用を回避。
  • -Wconversion での警告を回避。

Wave

V2.2.0

  • C++0xでキーワードとされる語をRe2C lexerに追加。
  • コマンドラインオプション --c++0x を追加。このオプションを付けると、C++0xでキーワードされる語と、それらのC++0xトークンへの変換が有効になる。
  • 全ライブラリをBoost.Filesystem V3と協調動作するように適合 (デフォルトで有効)。
  • 拡張文字・文字列リテラルのサポートと、それに関するテストケースを追加 (テストアプリケーションへのC++0xサポートの追加が要求される)。
  • --c++0x modeに仕様に沿った定義済みマクロの追加。現在__cplusplus201101Lと定義されているが、言語仕様が決定する際に変更されるかもしれない。
  • オブジェクト形式マクロがカッコと隣接していて、expanding_object_like_macro()フック関数によってマクロ展開が抑制されるとき、カッコが消えてしまう問題を修正。
  • pragma option(preserve)のバグを修正 (以前の値がpreserve=2だった場合、perserve=1がセットされないバグ)。
  • waveコマンドの--preserveオプションのinteger argumentの解釈を少し変更:
    • 0: 空白文字は全て処理する
    • 1: 行頭の空白文字だけそのままにする
    • 2: 行頭とコメントの空白文字だけそのままにする
    • 3: 全ての行
    • #pragma wave option(preserve) は次の引数をサポートする: [0|1|2|3|push|pop]

Boostbook

  • ルート要素に対する属性のより良いサポート(langを含む)

Inspect

  • Boostのヘッダで、Cのassertマクロが使われていないかをチェック

Quickbook

  • ドキュメント情報中での lang 属性のサポートを追加
  • アンカーを改善
  • 条件節での importincludexinclude のサポート
  • Filesystem v3を使用

テスト済みコンパイラ

主要テストコンパイラ:

  • Linux:

    • GCC: 3.4.6, 4.2.4, 4.3.4, 4.4.3, 4.4.5, 4.5.2,
    • GCC, C++0x mode: 4.3.4, 4.4.3, 4.5.0, 4.5.2
    • Intel: 10.1, 11.0, 11.1
    • Clang: 2.8
    • Pathscale: 3.2.
  • OS X:

    • GCC: 4.0.1, 4.2.1, 4.4
    • GCC, C++0x mode: 4.4.
    • Intel: 11.1
  • Windows:

    • Visual C++: 7.1, 8.0, 9.0 and 10.0.
    • GCC, mingw: 4.4.0.
  • FreeBSD:

    • GCC: 4.2.1, 64 bit.

追加のテストコンパイラ:

  • Linux:

    • GCC: 3.4.6, 4.2.4, 4.3.4, 4.3.5, 4.4.3, 4.4.5, 4.5.0, 4.5.2
    • GCC, C++0x mode: 4.3.4, 4.4.3, 4.5.0, 4.5.2
    • pgCC [/ 10.1,] 11.1
    • Intel: 10.1, 11.0, 11.1
    • PathScale: 3.2, 4.0
    • Visual Age C++ 10.1
    • Clang from subversion
  • OS X:

    • Intel C++ Compiler: 10.1, 11.0, 11.1
    • GCC: 4.0.1, 4.2.1, 4.4.4
    • GCC, C++0x mode: 4.4.4
    • Clang from subversion
  • Windows:

    • Visual C++: 7.1, 8.0, 9.0, 10.0
    • Visual C++ with STLport: 9.0
    • Visual C++, Windows Mobile 5, with STLport: 9.0
    • GCC, mingw: 4.4.0, 4.5.1, 4.6.0
    • GCC, mingw, C++0x mode: 4.5.1
    • Borland: 6.1.3 (2009), 6.2.1 (2010)
  • AIX:

    • IBM XL C/C++ Enterprise Edition, V11.1.0.0
  • FreeBSD:

    • GCC 4.2.1, 64 bit
  • Solaris:

    • Sun C++: 5.10

翻訳

Akira Takahashi, melpon, zakkas783, yak_ex