2016-06-24

C++標準化委員会の文書: P0230R0-P0239R0

[PDF] P0230R0: SG14 Games Dev/Low Latency/Financial Meeting Minutes 2015/10/14-2015/02/10

ゲーム開発、低レイテンシー、Financialな業界からC++に提案をする会議の議事録。

[PDF] P0231R0: Extending the Transactional Memory Technical Specification to Support Commit Actions

トランザクショナルメモリーにコミット操作を追加する提案。コミット処理の結果が反映されるのはは、処理が終わったあとまで遅延される。

[PDF] P0232R0: A Concurrency ToolKit for Structured Deferral/Optimistic Speculation

RCUとハザードポインターの特性を面白い喩え話を用いて説明している。

シュレディンガーは動物園を持っている。動物園には様々な動物がいる。シュレディンガーは動物たちを管理するメモリ内データベースを持っている。動物の出産や購入はデータベースへの追加、死亡や売却はデータベースへの削除として操作される。動物にはネズミや昆虫も含まれるので、このデータベースは頻繁に更新される。このデータベースに対して、動物の状態を調べるためにクエリーすることができる。ただし、猫に対するクエリーが常に多い状態になっている。これは、おそらく動物園内のネズミが点滴の情報を調べるためにクエリーしているのだろうとシュレディンガーは推測している。

この頻繁に更新され、一部の情報に高頻度のクエリーが飛ぶ利用特性を持つデータベースの実装として、グローバルロック、バケットごとのロック、RCU、ハザードポインターによる実装を比較して、それぞれの特性を示している。

また、文書ではリファレンスカウントもRCUやハザードポインターと似たような特性を持つだろうとしている。

将来的には、C++にRCUやハザードポインターのライブラリを追加したいそうだ。

[PDF] P0233R0: Hazard Pointers: Safe Reclamation for Optimistic Concurrency

ハザードポインターの解説文書。

[PDF] P0234R0: Towards Massive Parallelism(aka Heterogeneous Devices/Accelerators/GPGPU) support in C++

GPGPUのような大規模な並列処理を行う異なるアーキテクチャが混在したコンピューター環境をC++でサポートするにあたって、現状の提案の一覧や、既存の実装を解説している。

[PDF] P0235R0: A Packaging System for C++

ブリザードエンタテイメント社によるC++のためのパッケージシステムの提案。

パッケージシステムというのは、Pythonにおけるpipや、Rubyにおけるgemや、node.jsにおけるnpmのような仕組みのことだ。ソフトウェアのライブラリを手軽に配布、入手、インストール、使用できるためのシステムのことだ。

提案はディレクトリ構造にまで言及するなど、かなり具体的なものになっている。

筆者の意見では、パッケージシステムはOSが提供するものであって、言語がそれぞれ提供するのは間違っている気がする。しかし、成功しているプログラミング言語はだいたいパッケージシステムを持っているのも事実だ。

文書の提案する仕組みに基づいたパッケージシステムをClangに実装したものが、ブリザードのGitHubで公開されている

https://github.com/Blizzard/clang

[PDF] P0236R0: Khronos's OpenCL SYCL to support Heterogeneous Devices for C++

OpenCL SYCLとしてC++によるOpenCLのラッパー規格の紹介。

[PDF] P0237R0: On the standardization of fundamental bit manipulation utilities

unsigned charの配列をビット列のコンテナーとして扱えるラッパークラスの提案。ビットに対するリファレンス、ポインター、イテレーターを提供している。

これにより、例えば立っているビットの数を数えたいときは、イテレーターをstd::countに渡せばよい。std::countは、std::bit_iteratorに対して、アーキテクチャがサポートしていれば、popcntを呼び出すなどの最適化も行える。

P0238R0: Return type deduction and SFINAE

戻り値の型の型推定に失敗した場合、ハードエラーではなくSFINAEにする提案。

[PDF] P0239R0: valueless_by_exception

variantのcorrupted_by_exceptionをvalueless_by_exceptionに改名する提案。

ドワンゴ広告

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

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

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

1 comment:

Anonymous said...

ひゃっはー、新鮮な規格情報だー。
さて、自分がOpenCLに対して行いたいことは一つです。OpenCLのことはよく知りませんが・・・。
都度、並列化用データと並列化用ラムダを書いて、OpenCLに投げて結果を返してほしい。それだけです。
ラムダにはC++のラムダがフルスペックで使えるとかなりよろしいと思います。
が、たぶん参照キャプチャは無理ですよね。
ビット演算ライブラリは地味に必要なので歓迎ですが、これvectorのuchar配列にも使えるんでしょうか?
できればインデックサとsizeも入れてほしいです。