2017-11-06

C++標準化委員会の文書: P0533R1-P0573r2

[PDF] P0533R1: constexpr for <cmath> and <cstdlib>

algorithmをconstexpr化する提案で分離されたcmathとcstdlibのconstexpr化についての提案。組版がクソで読む気がしないが、一般的な算術演算子だけで実装できるものはconstexpr化できる。errnoの書き換えはconstexprではできないが、constexprの文脈で評価されたときの挙動を規定すればconstexpr化できる。

[PDF] P0534R3:call/cc (call-with-current-continuation): A low-level API for stackful context switching

いわゆるcallccを実現するためのスタックフルなコンテキストスイッチを実現するための低級ライブラリの提案。コルーチン提案よりよっぽどわかりやすいのでこっちのほうがいい。

P0539R2: A Proposal to add wide_int Class

Nビットの整数型を表現するwide_int<N>の提案。

より大きな整数型の需要は年々高まるばかりで、GCCとClangには__int128型が存在する。将来的には256bitなどのより大きな整数型が出てくることは想像にかたくない。そこで、大きなサイズの整数型を汎用的に表現する方法がほしい。

この提案では2の乗数の整数型しか扱わないが、将来的には拡張できる余地を残す。

P0546R1: P0546r1 : Span - foundation for the future

配列に範囲外チェックを行いつつアクセスできるストレージを所有しないライブラリspanの提案。

[PDF] P0549R2: Adjuncts to std::hash

ある型Tが有効なstd::hash<T>を持つかどうか調べるis_enabled_hash<T>、CVリファレンス修飾子を取り除いた型が有効なハッシュを持つかどうか調べるhash_for<T>、そしてハッシュ値を得るhash_value<T>(T && t)、ハッシュが例外を投げないか返すis_nothrow_hashable<T>の提案。

[PDF] P0551R1: Thou Shalt Not Specialize std Function Templates!

標準ライブラリの関数テンプレートはユーザーが特殊化してはならないというルールの追加。なぜならば、ろくな結果にならないから。

P0561R2: An RAII Interface for Deferred Reclamation

リーダーライターロックのパターン、つまりあるオブジェクトの値を読むリーダーがリーダーロックをして値を読む。アップデーターは新しいメモリを確保して差し替えることで値を更新する。リーダーロックはアップデーターを妨げない。メモリの解放は最後のリーダーロックが外れて問題ないときに行う。

このようなパターンを実現する方法として、リファレンスカウント、RCU、ハザードポインターといった方法が考案されていて、実際標準ライブラリに入れるべく提案もされている。問題は、提案は個別の実装方法に特有の低級な操作を提供している。本提案は、このパターンを実現する実装方法によらない汎用的な高級APIを提案する。

たしかにほしい。

[PDF] P0566R3: Proposed Wording for Concurrent Data Structures: Hazard Pointer and Read-Copy-Update (RCU)

ハザードポインターとRCUの文面案。もともと別の提案だったが似通った機能を提供するため、文面案を一緒にすることにしたとのこと。

P0571R1: p0571r1: Type Requirements for <numeric> Algorithms

<numeric>の一部のアルゴリズムに型要件が曖昧な部分があったので修正する。例えばaccumulateなどのアルゴリズムで、内部で使われる一時オブジェクトの型がどうなるか曖昧で実装の差異が生じていた。

P0573R2: Abbreviated Lambdas for Fun and Profit

省略ラムダの提案。

ラムダ式の本体として=> 式と書けるようになる。=>の場合、戻り値の型推定は-> decltype(auto)扱いになり、 例外指定もnoexcept(式)扱いになる。=>の場合、引数の型を省略できる。その場合auto &&と書いた扱いになる。


std::sort( b, e, [](a,b) => a < b ) ;

このコードは、


std::sort( b, e, []( auto && a, auto && b ) noexcept(a < b) -> decltype(auto){ return a < b ; } ) ;

と書いたものと同じ意味になる。

ほしい。

ドワンゴ広告

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

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

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

No comments:

Post a Comment

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.