- PVSM.RU - https://www.pvsm.ru -
[1]
В начале марта в американском городе Кона завершилась встреча международной рабочей группы WG21 [2] по стандартизации C++ в которой участвовали сотрудники Яндекса [3].
Заседания, как обычно, занимали целый день плюс дополнительно заседала подгруппа по работе с числами.
Основное время было посвящено полировке черновика C++17, но несколько небольших и интересных нововведений все же успели проскочить в C++17.
std::ofstream(L"Теперь можно открывать файлы с юникодными именами.txt") << u8"Ура!";
Операторы сравнения для класса std::optional до последнего дня были описаны как:
template <class T>
bool operator < (const optional<T>&, const T&);
// ...
Что вызывало ошибки компиляции в ряде случаев:
optional<const int> x = 42;
int y = 666;
x == y; // не скомпилируется
...
optional<string> s = "Hello";
s == "Hello"; // не скомпилируется
В Коне эта проблема была исправлена, операторы сравнения приобрели следующий вид:
template <class T, class U>
bool operator < (const optional<T>&, const U&);
// ...
Так что теперь все вышеприведённые примеры будут компилироваться, а сравнение 's == «Hello»' будет работать без создания временного объекта строки.
Было добавлено множество явных deduction guides, так что теперь следующий код будет собираться:
// Ура! Можно не писать шаблонные параметры.
std::tuple a = {42, "Hello", 3.14};
std::array b = {1, 2, 3, 4, 5, 6, 7, 8};
std::pair c = {42, "Hello"};
std::function d = [](int i) { std::cout << i; };
std::set e = {1, 2, 3, 4, 5, 6, 7, 8};
// P.S.: В примерах выше занк '=' тоже можно не писать :)
Но так как этот класс любимый у одного из представителей России в WG21 C++, то мы закатали рукава, вооружились последними компиляторами, написали и оттестировали explicit deduction guides для std::array. После чего результат трудов выслали автору предложения, пообщались с ним в кулуарах и… вуаля!
Кого-нибудь смущало, что когда нам нужен массив байт для хранения каких-то бинарных данных у мы заводили «массив беззнаковых букв»? C С++17 у нас будет тип данных std::byte и теперь вместо
unsigned char raw_buffer[buffer_size];
можно писать
std::byte raw_buffer[buffer_size];
.
Множество небольших улучшений было внесено повсеместно в стандарт. Так например:
long example(atomic<long> * a) { return atomic_fetch_add(a, 42); }
гарантированно работает на всех имплементациях.
Как всегда, несколько подгрупп внутри комитета С++ работали одновременно. Некоторые подгруппы успели разобраться с задачами связанными с C++17, и приступи к продумыванию идей для C++20. Ниже расскажу о некоторых самых интересных обсуждениях.
Если вы занимаетесь точными науками, разрабатываете сверхнадёжные приложения, участвуете в олимпиадах по программированию, ведете финансовые рассчёты или работаете с огромными числами, то у меня есть для вас хорошие новости. Сформировались планы по выпуску Numbers TS — набора различных классов для разнообразнейшей работы с числами. Вот некоторые кандидаты:
Планы амбициозные, ждать придётся достаточно долго.
Обсудили operator<=>(). Решено продолжать проработку этого оператора, есть все шансы что к C++20 можно будет писать:
struct foo { /* очень много различных полей */ };
auto operator<=>(const foo&, const foo&) = default; // Сгенерирует все компараторы для сравнения foo c foo
auto operator<=>(const foo&, const char*) = default; // Сгенерирует все компараторы для сравнения foo c const char* и все компараторы для сравнения const char* с foo
А еще обсуждали модули, корутины/сопрограммы/«Гор-рутины», контракты, constexpr и constexpr контейнеры, constexpr аллокацию «в куче», плагины и динамическую загрузку библиотек, крутые оптимизации для стандартных контейнеров и много другое. Рассказать всё в одном посте не получится, поэтому мы в РГ 21 планируем небольшую встречу [5], на которой расскажем о будущем С++ и о С++17 поподробнее. Так же на встрече будет выступать Гор Нишанов — автор корутин для WG21 C++.
C++17 на подходе, ура!
Если у вас есть идеи для C++20, вы нашли проблемы в C++17/C++14/C++11, или просто хотите подстегнуть разработку той или иной фичи C++, то заходите на сайт рабочей группы stdcpp.ru [6]. Добро пожаловать!
Внимание! Некоторым подгруппам международного комитета С++ нужно получить информацию о том, что разработчикам интересно и чем разработчики пользуются, чтобы лучше расставить свои приоритеты.
Автор: Яндекс
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/algoritmy/250339
Ссылки в тексте:
[1] Image: https://habrahabr.ru/company/yandex/blog/323972/
[2] WG21: http://www.open-std.org/jtc1/sc22/wg21/
[3] участвовали сотрудники Яндекса: https://habrahabr.ru/company/yandex/blog/301514/
[4] предложения с stdcpp.ru: https://stdcpp.ru/proposals/531b7d66-037b-48b7-8262-eb9c0c1f7535
[5] небольшую встречу: https://events.yandex.ru/events/cpp-party/27-march-2017/
[6] stdcpp.ru: https://stdcpp.ru/
[7] Источник: https://habrahabr.ru/post/323972/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.