本日、7月10日から15日にトロントで開催されたISO WG21 C ++委員会の夏の会議が終了しました。 すぐに
RG21から詳細なレポートを受け取る可能性
があり、今日、尊敬される一般の人々は、最も興味深いものについての議論とともにポスト「ウォームアップ」するよう招待されます。
会議の結果は次のとおりです。C++ 17標準が完成し、今年の11月の次の会議で公開されます。 C ++ 20標準は、最初の重要な機能-
概念 、
明示的な汎用ラムダ -をすでに取得しており、これはほんの始まりにすぎません。
新しいC ++ 17標準の機能は
何度も議論されてきました。
彼らはHabréの技術革新
について書き 、
会議で
レポートを実施しました。 このC ++リリースの主な機能
が、最も「おいしい」機能を不確実な未来に
移したことであることは秘密ではありません。 さて、今では待望の「機能」の多くがC ++ 20に移行したと言っても安全です。 stdlibを拡張するための講座はどこにも行っていないため、C ++ 20からは、はるかに大きく豊富な関数セットが期待できます。
ドラフトC ++ 20標準
コンセプト
かつてC ++ 11に含まれていなかった、新しい
Concepts-Liteのオファーとしてやり直された、長い間苦労してきた
Conceptsは 、ついに標準の一部になりつつあります。
委員会は、概念の簡潔な構文(簡潔な構文)に同意できませんでした。 ただし、議論はC ++ 20内で継続されます。
_VA_OPT_
#define LOG(msg, ...) printf(msg __VA_OPT__(,) __VA_ARGS__)
LOG("hello world") // => printf("hello world")
LOG("hello world", ) // => printf("hello world")
LOG("hello %d", n) // => printf("hello %d", n)
- (Explicit generic lambdas) [pdf]
[] <typename T> (T t) { /* ... */ }
- C++11, ; C++14 - auto:
[](auto x) { /* ... */ }
( ) — - :
[]<typename T>(T x) { /* ... */ }
[]<typename T>(T* p) { /* ... */ }
[]<typename T, int N>(T (&a)[N]) { /* ... */ }
shared_ptr [pdf]
shared_ptr<double[]> p = make_shared<double[]>(1024);
— ,
1.
— , , :
enum class endian
{
little = __ORDER_LITTLE_ENDIAN__,
big = __ORDER_BIG_ENDIAN__,
native = __BYTE_ORDER__
};
(designated initializer) [pdf]
struct A { int x; int y; int z; }; A b{.x = 1, .z = 2};
(default bit-field initializers)
struct S {int x : 8 = 42;};
, «in-class initialization» C++11: declarator .
const-qualified
struct X { void foo() const&; };
X{}.foo(); // this is okay
(X{}.*&X::foo)(); // ill-formed in C++17, well-formed in C++2a
vector v{vector{1, 2}};
// vector<int> vector<vector<int>>
TS (Technical Specifications)
TS ++17 ( ):
- Filesystem v1 [pdf] — boost::filesystem,
- Parallelism v1 [pdf] — TS, algorithm «» ,
- Library Fundamentals v1 [pdf] — : std::string_view, std::optional, std::any, system_error.
, , ( ):
TS, .
— , , — ++20.
- , , —
TS . ( ) — .. - Microsoft . , , .
Concurrency v1 [pdf]
, , — TS ++20. , futures ( std::async), latches, atomic smart pointers
atomic_shared_ptr. ++17 , .
MS Visual Studio, HPX just::thread. ,
P0676 P0701 TS .
Transactional Memory v1 [pdf]
, TS , shared_ptr , . , - .
Library Fundamentals v2
. , ++20.
Executors v1 [pdf]
. ++20, .. TS , .
Reflection v1 [pdf]
. ++20, .
TS ( ) (reification). , TS , Boost::Hana —
.
Concurrency v2
. concurrent data structures, oncurrent queues, lock-free ; Hazard pointers ( ), RCU ( lock-free ), atomic views. ++20 , .. — , , .
Parallelism v2
. , Parallelism v1 Parallel STL CPU, GPU. Parallelism v2 —
Library Fundamentals v3
.
Contracts v1
. TS, ++20. : assert, - - (.. ). , ++ , , , - .
Numerics [pdf]
. - ++20: decimal floating point, bounded types (, fixed point types), unbounded types, multiprecision arithmetic. (, , , ).
2D Graphics v1
.
std::string —
starts_with,
ends_with.
, TS . , CUDA/OpenMP/OpenCL C++. , std::invoke, std::async, . , std::thread CPU; , Executors TS , , .
Google, NVidia, Codeplay NASDAQ TS, ++, : Concurrency, Parallelism, Transactional Memory, Networking.
, C++20, .
, .
Michael Wong — What's in C++20 and the C++17 final score card2017 Toronto ISO C++ Committee Discussion Thread (Concepts in C++20; Coroutines, Ranges and Networking TSes published)C++17: The Language Features — Nicolai JosuttisTrip report: Summer ISO C++ standards meeting (Toronto)