[Программирование, C++, Компиляторы, IT-стандарты] С++23: международный стандарт на удалёнке
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
C++20 прошёл все бюрократические инстанции и теперь официально готов! Международный комитет переехал в онлайн, и теперь мы вовсю работаем над C++23. Под катом вас ждут:
- std::stacktrace,
- z и uz,
- 61 с половиной багфикс в ядре языка,
- string::contains,
- Executors & Networking,
- и прочие новости.
std::stacktrace
Ура! РГ21 вместе с Fails протащили в стандарт std::stacktrace. Скоро можно будет делать программы с хорошей диагностикой:
#include <stacktrace>
// ...
std::cout << std::stacktrace::current();
И получать читаемый трейс:
0# bar(int) at /path/to/source/file.cpp:70
1# bar(int) at /path/to/source/file.cpp:70
2# bar(int) at /path/to/source/file.cpp:70
3# bar(int) at /path/to/source/file.cpp:70
4# main at /path/to/main.cpp:93
5# __libc_start_main in /lib/x86_64-linux-gnu/libc.so.6
6# _start
Stacktrace незаменим для диагностирования сложных проблем. Он меня много раз спасал при отладке асинхронного кода. Например, в Такси можно включить особый режим работы сервиса, после чего порождение подзадач и исключения начинают печатать трейсы.
Библиотека приехала в стандарт C++ из Boost, но есть отличие в поведении: конструктор по умолчанию для std::stacktrace создаёт пустой объект, а не захватывает trace текущего потока, как это делает boost::stacktrace. Описание интерфейса и особенности дизайна класса доступны в P0881R7.
Кстати, обсуждается идея о том, чтобы исключения C++ при выставлении рантайм-флага могли сохранять трейсы. Разумеется, всё должно быть в лучших традициях C++ — без слома ABI, максимально эффективно, с возможностью не платить за неиспользуемую функциональность.
Z и UZ
Если вы не любите печатать std::size_t или std::ssize_t, то вам приглянутся суффиксы C++2b, uz и z соответственно:
for (auto i = 0uz; i < vec.size(); ++i) {
assert(i == vec[i].size());
}
Должен признать, что это нововведение из P0330R8 меня не особо будоражит… Так что перейдём к следующей новинке.
Большой рефакторинг стандарта
К C++20 успели отрефакторить описание стандартной библиотеки, явно разделив static_assert, SFINAE и рантайм условия для классов и функций. К C++23 подгруппа ядра языка решилась переработать часть стандарта, отвечающую за декларации и их поиск.
В итоге закрыли 61 ошибку в ядре языка, частично решили ещё четыре проблемы. Любители артхаусной литературы могут оценить новый слог в P1787R6.
string::contains
Долой str.find(str2) != std::string_view::npos! Теперь, благодаря P1679R3, можно писать более вменяемый код str.contains(str2). Лично меня весьма радует, что с C++20 люди в комитете активно работают над красотой и лаконичностью языка, отодвинув концепцию итераторов и позиций на второй план:
Было
Стало
str.substr(0, str2.size()) == str2
str.starts_with(str2);
str.size() >= str2.size() && !str.compare(
str.size() - str2.size(),
std::string_view::npos,
str2)
str.ends_with(str2);
std::sort(std::begin(d), std::end(d));
std::ranges::sort(d);
Executors & Networking
Увы, но Executors всё ещё не приняли в стандарт.
Однако комитет сдвинулся с мёртвой точки! Интерфейс практически устаканился, P0443 почти готов к принятию. Появилось множество реализаций предложенного интерфейса:
- github.com/executors/executors-impl
- github.com/facebookexperimental/libunifex
- github.com/jaredhoberock/cusend
- github.com/jaredhoberock/cuex
- github.com/chriskohlhoff/propria
Работа над Networking идёт одновременно с Executors, постоянно вносятся небольшие правки. Networking продолжает зависеть от Executors, есть шанс, что успеют сделать обе вещи к C++23.
Прочие новости
В ближайшие полтора года международный комитет планирует работать удалённо. Планы на C++2b остаются в силе — выпустить новый стандарт в 2023 году.
Конференции по C++ тоже продолжаются в онлайн-формате, ближайшая — С++ meetup Moscow #11 в Технопарке Сколково. Следите за новостями и анонсами в канале t.me/ProCxx.
Напоследок ещё немного приятных новостей: в рамках подготовки к выпуску userver мы начали актвнее апстримить наши таксишные наработки в смежные проекты. segoon уже успел заапстримить в clang-tidy-проверку на безопасность функции для многопоточных приложений. Надеюсь, вам пригодится!
===========
Источник:
habr.com
===========
Похожие новости:
- [Программирование, C++, C] Финальный релиз этого года — CLion 2020.3! С новыми функциями в отладчике, проверками MISRA и улучшениями для Qt
- [Программирование, Go] Методы организации DI и жизненного цикла приложения в GO
- [Программирование, Обработка изображений, Машинное обучение, Искусственный интеллект] Scaled YOLO v4 самая лучшая нейронная сеть для обнаружения объектов на датасете MS COCO
- [JavaScript, Программирование, Node.JS] Декораторы в JavaScript с нуля (перевод)
- [JavaScript, Программирование, ReactJS] Начинающим React-разработчикам: приложение со списком дел (покупок) (перевод)
- [Программирование] kotlinx.coroutines 1.4.0: представляем StateFlow и SharedFlow (перевод)
- [Программирование, Разработка под Android] Подменяем Runtime permissions в Android
- [Программирование, Go, Микросервисы] Создаем высокопроизводительные микросервисы с помощью gRPC, Ballerina и Go (перевод)
- [Open source, Программирование, C++] Не хочется ждать в очереди? Напишем свой диспетчер для SObjectizer с приоритетной доставкой
- [IT-стандарты, Service Desk] Простота на службе ваших ITSM процессов (перевод)
Теги для поиска: #_programmirovanie (Программирование), #_c++, #_kompiljatory (Компиляторы), #_itstandarty (IT-стандарты), #_stacktrace, #_stack_trace, #_c++20, #_c++23, #_s++ (с++), #_c++, #_bugs, #_kompiljatory (компиляторы), #_gcc, #_clang, #_msvc, #_clangtidy, #_blog_kompanii_jandeks (
Блог компании Яндекс
), #_programmirovanie (
Программирование
), #_c++, #_kompiljatory (
Компиляторы
), #_itstandarty (
IT-стандарты
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 13:03
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
C++20 прошёл все бюрократические инстанции и теперь официально готов! Международный комитет переехал в онлайн, и теперь мы вовсю работаем над C++23. Под катом вас ждут:
std::stacktrace Ура! РГ21 вместе с Fails протащили в стандарт std::stacktrace. Скоро можно будет делать программы с хорошей диагностикой: #include <stacktrace>
// ... std::cout << std::stacktrace::current(); И получать читаемый трейс: 0# bar(int) at /path/to/source/file.cpp:70 1# bar(int) at /path/to/source/file.cpp:70 2# bar(int) at /path/to/source/file.cpp:70 3# bar(int) at /path/to/source/file.cpp:70 4# main at /path/to/main.cpp:93 5# __libc_start_main in /lib/x86_64-linux-gnu/libc.so.6 6# _start Stacktrace незаменим для диагностирования сложных проблем. Он меня много раз спасал при отладке асинхронного кода. Например, в Такси можно включить особый режим работы сервиса, после чего порождение подзадач и исключения начинают печатать трейсы. Библиотека приехала в стандарт C++ из Boost, но есть отличие в поведении: конструктор по умолчанию для std::stacktrace создаёт пустой объект, а не захватывает trace текущего потока, как это делает boost::stacktrace. Описание интерфейса и особенности дизайна класса доступны в P0881R7. Кстати, обсуждается идея о том, чтобы исключения C++ при выставлении рантайм-флага могли сохранять трейсы. Разумеется, всё должно быть в лучших традициях C++ — без слома ABI, максимально эффективно, с возможностью не платить за неиспользуемую функциональность. Z и UZ Если вы не любите печатать std::size_t или std::ssize_t, то вам приглянутся суффиксы C++2b, uz и z соответственно: for (auto i = 0uz; i < vec.size(); ++i) {
assert(i == vec[i].size()); } Должен признать, что это нововведение из P0330R8 меня не особо будоражит… Так что перейдём к следующей новинке. Большой рефакторинг стандарта К C++20 успели отрефакторить описание стандартной библиотеки, явно разделив static_assert, SFINAE и рантайм условия для классов и функций. К C++23 подгруппа ядра языка решилась переработать часть стандарта, отвечающую за декларации и их поиск. В итоге закрыли 61 ошибку в ядре языка, частично решили ещё четыре проблемы. Любители артхаусной литературы могут оценить новый слог в P1787R6. string::contains Долой str.find(str2) != std::string_view::npos! Теперь, благодаря P1679R3, можно писать более вменяемый код str.contains(str2). Лично меня весьма радует, что с C++20 люди в комитете активно работают над красотой и лаконичностью языка, отодвинув концепцию итераторов и позиций на второй план: Было Стало str.substr(0, str2.size()) == str2
str.starts_with(str2);
str.size() >= str2.size() && !str.compare(
str.size() - str2.size(), std::string_view::npos, str2) str.ends_with(str2);
std::sort(std::begin(d), std::end(d));
std::ranges::sort(d);
Увы, но Executors всё ещё не приняли в стандарт. Однако комитет сдвинулся с мёртвой точки! Интерфейс практически устаканился, P0443 почти готов к принятию. Появилось множество реализаций предложенного интерфейса:
Работа над Networking идёт одновременно с Executors, постоянно вносятся небольшие правки. Networking продолжает зависеть от Executors, есть шанс, что успеют сделать обе вещи к C++23. Прочие новости В ближайшие полтора года международный комитет планирует работать удалённо. Планы на C++2b остаются в силе — выпустить новый стандарт в 2023 году. Конференции по C++ тоже продолжаются в онлайн-формате, ближайшая — С++ meetup Moscow #11 в Технопарке Сколково. Следите за новостями и анонсами в канале t.me/ProCxx. Напоследок ещё немного приятных новостей: в рамках подготовки к выпуску userver мы начали актвнее апстримить наши таксишные наработки в смежные проекты. segoon уже успел заапстримить в clang-tidy-проверку на безопасность функции для многопоточных приложений. Надеюсь, вам пригодится! =========== Источник: habr.com =========== Похожие новости:
Блог компании Яндекс ), #_programmirovanie ( Программирование ), #_c++, #_kompiljatory ( Компиляторы ), #_itstandarty ( IT-стандарты ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 13:03
Часовой пояс: UTC + 5