本の虫

著者:江添亮
ブログ: http://cpplover.blogspot.jp/
メール: boostcpp@gmail.com
Twitter: https://twitter.com/EzoeRyou
GitHub: https://github.com/EzoeRyou

アマゾンの江添のほしい物リストを著者に送るとブログ記事のネタになる

筆者にブログのネタになる品物を直接送りたい場合、住所をメールで質問してください。

C++標準化委員会の文書: P0440R0-P0448R0

P0440R0: P0440r0 : Floating Point Atomic View

浮動小数点数に対するatomic_viewの提案

P0441R0: Ranges: Merging Writable and MoveWritable

Range TSでWritableコンセプトとMoveWritableコンセプトがほとんど同じなので、このままにしておくとジェネリックコードが分断されてしまうので、マージしようと言う提案。

P0443R0: A Unified Executors Proposal for C++

様々なC++の提案で必要な実行媒体について、その最小の共通項を抜き出して低レベルなライブラリとする提案。

[PDF] P0444R0: Unifying suspend-by-call and suspend-by-return

コルーチンとresumable関数の統合のための低レベルライブラリの提案。

文書中で、WG21は技術の発明ではなく、既存の技術の標準化を目的としている、この提案は既存の記述の標準化であると言い訳をしているが、どうも発明しているように思えてならない。

[PDF] P0445R0: SG14: Low Latency Meeting Minutes 2016/09/21-2016/10/13

[PDF] P0446R0: SG5: Transactional Memory (TM) Meeting Minutes 2016/07/18-2016/10/10

それぞれ、タイトル通りの会議の議事録

P0447R0: Introduction of std::colony to the standard library

colonyコンテナーの提案。colonyコンテナーは順序保証がないソート可能な非連想コンテナーだ。要素の追加や削除の操作で、削除される要素とイテレーターの終端以外を指すイテレーターは無効化されない。

データ構造的には、複数の要素を格納できる大きさのメモリブロックが複数と、メモリに要素が構築されていないことを示すスキップフラグで構成されている。リファレンス実装では、メモリブロックとスキップフラグを双方向リンクリストで管理している。メモリブロックが空になった場合はメモリは解放される。要素を追加した時に、メモリブロック内に要素を確保できる空きがある場合は、その空きに確保される。このため、順序保証がない。

colony<int> c ;

// 要素を挿入
// 要素を挿入する位置を指定する必要はない。
c.insert( 1 ) ;
c.insert( 2 ) ;
c.insert( 3 ) ;

// イテレーターを取得。値の順番は保証されていない
auto i1 = c.begin() ;
auto i2 = std::next(i1) ;
auto i3 = std::next(i2) ;
auto end = c.end() ;

// イテレーターi2の参照する要素を削除
c.erace(i2) ;

// i1, 13, endは無効化されない

// assertはかからない
assert( i3 == std::next(i1) ) ;

// 要素を挿入、endが無効化される
c.insert( 4 ) ;

利用用途として想定しているのはゲームだ。ゲームでは、多数のオブジェクトがhas-a関係を構築する。たとえば、あるゲーム中の物体を表現するオブジェクトはメッシュやテクスチャやシェーダーやサウンドといったオブジェクトを参照する。このオブジェクトは当たり判定だとか描画だとかを受け持つ様々なオブジェクトから参照される。さらに、オブジェクトはゲームに頻繁に追加されたり削除されたりする。

参照を表現するのに最も都合のいい方法はポインターだ。しかし、オブジェクトを管理するのにvectorなどの既存のコンテナーを使うと、要素の追加削除の際に、イテレーターが無効化されて参照が壊れてしまう。ゲームでは要素の追加削除が頻繁に行われる。

このために、ゲーム業界ではたいてい独自のコンテナーをそれぞれ書いて使っているわけだが、汎用的な実装がほしい。

それが今回提案しているcolonyコンテナーだ。

なかなか良いので、flat_map同様に入ってほしい。

[PDF] P0448R0: A strstream replacement using span<charT> as

廃止されたstrstreamの代替案の提案。固定長のバッファーを使うストリームライブラリは必要であり、近代的な設計により安全に使うことができるというもの。

今更ストリームに労力を注ぐのもどうかと思う。

残りの文書はあと40件ぐらい

ドワンゴ広告

ドワンゴは本物のC++プログラマーを募集しています。

採用情報|株式会社ドワンゴ

CC BY-ND 4.0: Creative Commons — Attribution-NoDerivatives 4.0 International — CC BY-ND 4.0