Должен признать, что в некоторые из предыдущих лет C++ мог ощущаться немного «скучным» и «стабильным». Новые фичи, новый стандарт каждые три года, встречи, конференции... обычная жизнь (не считая некоторых дополнительных событий в мире, экономике и эпидемиологической ситуации). Прошедший год отличается, потому что выглядит как «переломный» в истории C++... и кто знает, куда это заведёт нас.
Примечание переводчика. На оригинал статьи я наткнулся в чатике нашей конференции C++ Russia, и если вам интересен этот текст — подозреваю, что будет интересна и конференция (пройдёт в мае, в формате «Москва + онлайн».
Давайте вспомним некоторые вещи, случившиеся в этом году.
Отчёты за прошлые годы: 2021, 2020, 2019, 2018, 2017, 2016, 2015, 2014, 2013, 2012.
Важная оговорка: представленные взгляды здесь сугубо мои личные, они субъективные, и не представляют собой мнение комитета по стандартизации C++ или компании, на которые я работаю.
Оглавление
Краткое вступление
В 2022-м мир пытался вернуться к «норме», и в отношении C++ это было заметно по нескольким «реальным»/офлайновым конференциям и встречам комитета ISO. Вендоры компиляторов были заняты поддержкой C++20 и даже некоторых элементов C++23. А комитет работал над завершающими частями C++23 и некоторыми фичами C++26.
Однако примерно в середине года мы начали видеть некоторые «переломные моменты», когда несколько влиятельных групп анонсировали новые языки программирования. Сначала пришёл Val (возглавляемый Дэвидом Абрахамсом), затем Carbon (поддерживаемый Google), а затем CppFront (возглавляемый Хербом Саттером).
Следующая любопытная вещь — улучшения и обратная связь со стороны сообщества. Например, Витторио Ромео обратился к старой проблеме производительности отладки для std::move, std::forward, другим мелким задачам. Хорошая новость в том, что вендоры довольно быстро реализовали эти предложения.
В целом я вижу такие главные тренды и темы 2022-го:
C++23 в стадии feature freeze
Популяризация C++20
Новые языки
Обратная связь и улучшение инструментов
А кроме того, можно добавить ещё один пункт: анонс ChatGPT. Хотя он и не относится напрямую к C++, он может очень сильно сказаться на том, как мы пишем программы, учимся и даже преподаём. Вкратце, ChatGPT показал себя полезным помощником для различных задач, так что посмотрим.
Читайте дальше для полной картины.
Таймлайн
Давайте посмотрим на главные события:
Дата |
Событие |
---|---|
7 февраля |
Пленарное заседание комитета ISO C++ в Zoom |
15 февраля |
Visual Studio 2022 17.1 |
25 марта |
Clang14.0 |
6 апреля |
Конференция ACCU (до 9 апреля) |
13 апреля |
Boost 1.79: релиз мажорной версии |
2 мая |
Val анонсирован на Cpp Now |
6 мая |
GCC 12.1 |
10 мая |
В MSVC STL завершена работа над /std:c++20 (во второй раз :)) |
22 июля |
анонс Carbon на C++North |
25 июля |
Пленарное заседание комитета ISO C++ в Zoom, С++23 в freeze-фазе |
9 августа |
Visual Studio 2022 17.3 |
19 августа |
GCC 12.2 |
6 сентября |
Clang 15.0 |
11 сентября |
Конференция CppCon (до 16 сентября) |
16 сентября |
CppFront анонсирован на CppCon |
7 ноября |
Гибридная встреча комитета ISO C++ на Кона (до 12 ноября) |
8 ноября |
Visual Studio 2022 17.4 |
16 ноября |
Встреча C++ (до 19 ноября) |
30 ноября |
Анонс ChatGPT |
14 декабря |
Boost 1.81: релиз мажорной версии |
22 декабря |
libstdc++: имплементация поддержки таймзон C++20 в <chrono> |
Вот видеорезюме этой таблицы:
Поддержка C++ 17 в компиляторах
Не хочу в этот раз быть скучным. Все главные компиляторы поддерживают C++17... за небольшими исключениями, вроде отсутствия поддержки плавающей точки в from_chars и to_chars или проблем с параллельными алгоритмами.
Если хотите изучить все фичи C++17, вот мой обзор:
Поддержка C++ 20 в компиляторах
По состоянию на конец 2022 года только MSVC (VS 2022 17.0) полностью поддерживает стандарт. GCC 13.0 (почти что выпущенный) содержит поддержку большинства фич, а Clang (16.0) немного отстаёт. Главные фичи, которых пока не хватает или с которыми не всё просто — модули, std::format, дополнения std::chrono и корутины. Но процесс идёт.
Вот некоторые из лучших фич, добавленных в стандарт:
модули
корутины
концепты и концепты в стандартной библиотеке
ranges
operator
<=>
и его использование в стандартной библиотеке, упрощение правил operator rewritingФорматирование текста:
std::format
Календарь и таймзоны
jthread
, семафоры, больше атомиков, барьеров, больше вещей по concurrencyconsteval
иconstinit
constexpr
-алгоритмы, векторы, строки, аллокация памятиstd::span
и другое!
А вот таблица поддержки компиляторами языковых фич:
компилятор |
отсутствующие фичи |
---|---|
GCC 11 |
Модули в «частичном» состоянии |
Clang 14/16 |
Модули и корутины частично, улучшения CTAD отсутствуют |
MSVC 16.9 |
Полная поддержка! |
Теперь про библиотечные фичи:
компилятор |
пометки |
---|---|
GCC libstdc++, GCC 13 |
Почти полная поддержка! |
Clang libc++, как в Clang 14 |
отсутствуют: jthread, header units стандартной библиотеки, |
MSVC STL |
Полная поддержка в версиях MSVC 16.9, 17.0! |
Можете отслеживать статус на этой странице.
Если хотите изучить все фичи, можете прочитать этот отличный и суперпопулярный пост Олександра Коваля:
All C++20 core language features with examples
В этом году в рубрике C++ Stories я также описал многие фичи нового стандарта:
или посмотрите 73 статьи с тегом cpp20: Cpp20 - C++ Stories
Статус C++23
Этот год был значим тем, что новый стандарт перешёл в стадию «feature freeze». Комитет анонсировал это в середине года после июньской встречи.
Некоторые языковые фичи и их текущая поддержка в компиляторах:
Фича |
GCC |
Clang |
MSVC |
---|---|---|---|
Сделать () опциональнее для лямбд |
11.0 |
13.0 |
x |
|
12.0 |
14.0 |
x |
Deducing |
x |
x |
VS 2022 17.2 (partial) |
Многомерный operator[] |
12.0 |
x |
x |
#elifdef и #elifndef |
12.0 |
13.0 |
x |
|
13.0 |
16.0 |
x |
|
13.0 |
16.0 |
x |
Поддержка UTF-8 в качестве кодировки portable source file |
13.0 |
15.0 |
VS 2015 |
И одна из самых впечатляющих добавленных вещей, новость о которой разлетелась в сообществе — добавление P2718R0 , которое совершенствует P2012 “Fix the range‐based for loop”.
Если вкратце, то можно станет писать:
std::vector<std::string> createStrings();
for (char c : createStrings().at(0)) // <<!
{
// some code...
}
По состоянию на C++20 у этого for-loop выражения было неопределённое поведение, потому что мы обращаемся к временному объекту, чьё время жизни уже вышло. В C++23 все временные объекты в этом выражении продлят своё время жизни, не только первый.
И библиотека:
Фича |
GCC |
Clang |
MSVC |
---|---|---|---|
Stacktrace-библиотека |
x |
x |
x |
std::is_scoped_enum |
11.0 |
12.0 |
VS 2022 17.0 |
contains() для strings и string views |
11.0 |
12.0 |
VS 2022 17.0 |
constexpr для std::optional и std::variant |
12.0 |
13.0 |
VS 2022 17.1 |
std::out_ptr(), std::inout_ptr() |
x |
x |
VS 2022 17.0 |
ranges::starts_with() и ranges::ends_with() |
x |
x |
VS 2022 17.1 |
DR: std::format() improvements |
13.0 |
16.0 |
VS 2022 17.2 |
ranges zip |
13.0 |
15.0 |
VS 2022 17.3 |
Монадические операции для std::optional |
12.0 |
14.0 |
VS 2022 17.2 |
<expected> |
12.0 |
16.0 |
VS 2022 17.3 |
ranges::to |
x |
x |
VS 2022 17.4 |
Pipe support for user-defined range adaptors |
x |
x |
VS 2022 17.4 |
ranges::iota(), ranges::shift_() |
x |
x |
VS 2022 17.4 |
views::join_with |
13.0 |
x |
VS 2022 17.4 |
views::chunk_* и views::slide |
13.0 |
x |
VS 2022 17.3 |
views::chunk_by |
13.0 |
x |
VS 2022 17.3 |
<flat_map>, <flat_set> |
x |
x |
x |
Formatted output library <print> |
x |
x |
x |
Formatting ranges |
x |
x |
x |
constexpr for integral overloads of std::to_chars() and std::from_chars() |
13.0 |
16.0 |
VS 2022 17.4 |
Модули стандартной библиотеки |
x |
x |
VS 2022 17.5* |
Монадические операции для std::expected |
x |
x |
x |
Встречи ISO C++
В этом году было три встречи ISO:
два виртуальных однодневных пленарных голосования: в феврале и июне
одна гибридная в городе Кона (Гавайи)! Возвращение нормальной жизни :)
План состоит в том, чтобы завершить драфт C++23, разобраться с проблемами, которые отметили в National Bodies, и затем отправить на публикацию весной следующего года. Мы можем ожидать, что C++23 будет официально анонсирован осенью 2023-го.
Вот некоторые заметки со встреч:
2022-11 Kona ISO C++ Committee Trip Report — C++23 First Draft! : cpp
Trip report: Autumn ISO C++ standards meeting (Kona) – Sutter’s Mill
July 2022 ISO C++ committee virtual meeting report | The CLion Blog
Следующая встреча пройдёт в городе Иссакуа (США), начиная с 6 февраля.
Посмотреть полный список встреч: Upcoming Meetings, Past Meetings : Standard C++
Компиляторы
Чтобы поспевать за стандартами C++, создателям компиляторов и командам библиотек нужно проделывать немало работы.
Посмотрим на три популярных компилятора: MSVC, GCC и Clang.
Visual Studio
Команда MSVC переписала свою компиляторную инфраструктуру и может относительно быстро выпускать новые фичи. Они даже объявили о поддержке C++ 20 целых два раза!
Этот анонс в основном был связан с дополнительными изменениями и фиксами DR Standard для <format>, <chrono> и <ranges>. После завершения работы над ними имплементация снова стала стабильной.
Некоторые другие новости и посты MSVC:
What’s New for C++ Developers in Visual Studio 2022 17.4 - C++ Team Blog
High-confidence Lifetime Checks in Visual Studio version 17.5 Preview 2 - C++ Team Blog
Visual Studio 2022 Performance: Faster C++ Source Code Indexing - C++ Team Blog
Integrating C++ header units into Office using MSVC (1/n) - C++ Team Blog
VS2022 Performance Enhancements: Faster C++ Development - C++ Team Blog
Enhancing Game Developer Productivity with Visual Studio 2022 - C++ Team Blog
И есть страница документации о соответствии стандартам C++ (включая C++20): Microsoft C++ language conformance table
Также вы можете отслеживать прогресс имплементации стандартной библиотеки на GitHub: Changelog · Microsoft/STL Wiki.
GCC
Текущая стабильная версия — GCC 12.2 из августовской 12 Release Series.
Также можно посмотреть на готовящийся GCC 13: GCC 13 Release Series — Changes, New Features, and Fixes - GNU Project.
Информация о поддержке языка и библиотеки:
И некоторые новости про GCC:
Clang
Текущая стабильная версия: 15.0.6 (выпущена в конце ноября), Welcome to Clang’s documentation! — Clang 15.0.0 documentation.
А также можно предварительно посмотреть на Clang 16.0: Clang 16.0.0git (In-Progress) Release Notes — Clang 16.0.0git documentation.
Производительность отладки
Давайте разберём тему производительности и обратной связи от сообщества:
Вот статья Витторио Ромео: the sad state of debug performance in c++ — и исправление, описанное в Improving the State of Debug Performance in C++ - C++ Team Blog
Если вкратце, то благодаря атрибуту msvc::intrinsic
команда смогла аннотировать пару функций, связанных с move, и в некоторых случаях кодогенерация в MSVC 17.4 выдавала 226 инструкций, а в 17.5 стала выдавать всего лишь 106! Как сообщается в release notes, std::move
, std::forward
, std::move_ifnoexpect
и std::forward_like
теперь не производят вызовов функции в сгенерированном коде, даже в режиме отладки. Это для того, чтобы избежать ненужного оверхеда от named casts в отладочных сборках. Необходим /permissive-
или подразумевающий его флаг (вроде std:c++20
или std:c++latest
).
Также есть ещё два бага, описанных Витторио: 104719 – Use of std::move
in libstdc++ leads to worsened debug performance и Use of std::move
in libc++ leads to worsened debug performance · Issue #53689 · llvm/llvm-project - похоже, что их пофиксили в GCC и Clang, и они теперь могут сворачивать простые инструкции.
В целом с точки зрения отладки в C++ ещё много работы, но как можно видеть, сообщество работает хорошо, пытается прислушиваться к своим потребностям, а вендоры улучшают свои имплементации.
Языки-наследники C++ и безопасность
Процесс ISO C++ в некоторых случаях может быть медленным и неэффективным. А ещё в комитете есть много «холиваров», особенно о вещах вроде «не ломать ABI». В некоторых случаях мы знаем о проблемах в стандарте и знаем, как их исправить... но поскольку мы не можем сломать ABI, с этим ничего не поделать (кроме как добавить хак-костыль). Некоторые группы, например, из Google, были несколько разочарованы этим фактом и создали новые подходы к C++.
Есть отличная статья: The Year of C++ Successor Languages от Люциана Раду Теодореску, где вы можете прочитать об этих подходах и краткие описания для каждого языка.
В этой статье мы можем прочитать, что несмотря на критику (обильную!), C++ непрерывно остаётся в числе топ-4 языков программирования на протяжении последних 30 лет. Критики заявляют, что язык слишком большой и сложный, что некоторые фичи следует удалить, что фич одновременно слишком много и недостаточно. Эта критика привела к возникновению нескольких языков программирования, которые ставят целью сменить C++ как доминирующий язык системного программирования. В 2022-м три разных языка были представлены на крупных конференциях по C++: Val, Carbon и CppFront. Эта статья содержит критический разбор этих языков и их потенциал в качестве замены C++.
Val
Анонсировали и возглавляют его Дейв Абрахамс и Димитрий Ракордон. Сильно вдохновлён Swift, выглядит последовательным и лёгким в использовании.
Подробнее: https://www.val-lang.dev/
Carbon
Поддерживается Google (и, по словам Чендлера, также Adobe), «ощущается как проект по генеральной уборке в C++».
Подробнее: carbon-language @Github
и ещё ссылка:
CppFront/Cpp2
Возглавляет Герб Саттер. Это попытка улучшить синтаксис и «дефолты»... но продолжать компилироваться в C++.
Мой взгляд
Всегда хорошо, когда есть конкуренция. C++ может выиграть от существования других языков и обмениваться фичами с Carbon или Rust.
А ещё в этом году заметна тематика безопасности языков, и мы видим такие тексты:
Google Online Security Blog: Memory Safe Languages in Android 13 — например, в Android 13 примерно 21% всего нового нативного кода (C/C++/Rust) написана на Rust.
ChatGPT
Я спросил бота, но он не рассказал мне, написан ли он на C++. Думаю, некоторые компоненты могут быть на C++, но поскольку это громадная система, там может быть использовано множество технологий.
В видеоролике C++ Weekly - Ep 354 - Can AI And ChatGPT Replace C++ Programmers? - YouTube Джейсон Тёрнер экспериментирует с ботом. Порой он выдаёт вполне валидные ответы, но по-прежнему надо быть внимательным к деталям. Этот чатбот может быть очень полезным помощником в кодинге.
Я также прочитал прекрасное письмо от основателя Educative:
AI вроде ChatGPT изменит ландшафт разработки программного обеспечения — но не так, как многие опасаются. Как разработчик и сторонник обучения разработке, я верю, что ChatGPT способен помочь нам лучше писать софт, но не лишит разработчиков работы.
Он также предполагает следующее:
ChatGPT сделает кодинг продуктивнее и безбажнее. По мере того, как он будет понимать более сложные требования, мы можем ожидать, что он вытеснит механическую работу, улучшив продуктивность и тестирование.
По мере развития помощников вроде ChatGPT многие из скучных задач, которые занимали разработчиков, могут уйти в следующее десятилетие, включая автоматические юнит-тесты, генерацию тест-кейсов на основании параметров, анализ кода для предложения практик безопасности, автоматизацию QA.
И это не считая способностей в обучении. Представьте дружелюбного «бота-тьютора для C++». Вы можете учить язык программирования или спросить о любой языковой фиче так же, как вы спросили бы коллегу-эксперта на работе.
Думаю, мы увидим много вдохновляющих инструментов в следующем году... Возможно, даже что-то именно для C++, кто знает :)
Конференции и онлайн-мероприятия
Вот ссылка на страницу ISO C++ со всеми зарегистрированными конференциями в мире: Conferences Worldwide, C++FAQ.
Отдельные яркие моменты, ресурсы, видеозаписи кейноутов:
How C++23 Changes the Way We Write Code - Timur Doumler - CppCon 2022 - YouTube
Using C++14 in an Embedded “SuperLoop” Firmware - Erik Rainey - CppCon 2022 - YouTube
My CppCon 2022 talk is online: “Can C++ be 10x simpler & safer … ?” – Sutter’s Mill
Онлайн-встречи по C++
Я впечатлён Йенсом Уэллером, создавшим глобальный онлайн-митап:
Meeting C++ online (Düsseldorf, Deutschland) | Meetup
Например, посмотрите на некоторые недавние AMA (Ask Me Anything):
Книги
Некоторые избранные книги, вышедшие в 2022-м (или в конце 2021-го):
Дисклеймер: ссылки в этой таблице — аффилированные ссылки на Amazon.
Название |
Дата выхода |
---|---|
Beautiful C++: 30 Core Guidelines… (J. Guy Davidson, Kate Gregory) |
декабрь 2021 |
Discovering Modern C++ 2nd Edition (Peter Gottschling) |
декабрь 2021 |
Embracing Modern C++ Safely (J. Lakos, V. Romeo, R. Khlebnikov, A. Meredith) |
декабрь 2021 |
Modern CMake for C++ (Rafal Swidzinski) |
февраль |
C++ Core Guidelines Explained (Rainer Grimm) |
апрель |
Template Metaprogramming with C++ (Marius Bancila) |
август |
Tour of C++, A (C++ In-Depth Series) 3rd Edition (Bjarne Stroustrup) |
сентябрь |
C++20 - The Complete Guide (Nicolai M. Josuttis) |
октябрь |
C++ Software Design: Design Principles and Patterns for High-Quality Software (Klaus Iglberger) |
октябрь |
Copy and Reference Puzzlers - Book 3 (Jason Turner) |
декабрь |
Object Lifetime Puzzlers - Book 3 (Jason Turner) |
декабрь |
C++ Programming Fundamentals (D. Malhotra and N. Malhotra) |
декабрь |
Можете прочитать мой обзор книги “Embracing Modern C++”: Embracing Modern C++ Safely, Book Review - C++ Stories
А ещё вышла моя собственная книга “C++ Initialization Story”, выпущенная в середине 2022 и завершённая в декабре:
C++ Initialization Story @Leanpub
Популярность
Похоже, что C++ стабильно рос в различных чартах популярности языков. Посмотрите:
Картинка основана на данных опроса Stack Overflow and Tiobe Index.
По данным GitHub, Octoverse C++ находится на 6-м месте (в прошлом году был на 7-м), это можно увидеть здесь.
Более того, в раннем ноябре также была интересная статья: The pool of talented C++ developers is running dry
Из статьи:
Энтони Пикок, бывший квант в Citi и Citadel, сказал «невозможно найти людей с по-настоящему высоким уровнем скиллов в C++, а именно этого хочет любая трейдинговая компания».
Даже если Carbon, Rust или CppFront уже за углом... (или нет?)... всё равно необходимо будет мейнтейнить прорву кода на C++. Более того, многие индустрии вроде финансовой по-прежнему используют C++ для низкоуровневой инфраструктуры.
Вот соответствующая дискуссия на Reddit: The pool of talented C++ developers is running dry : cpp с более чем 350 комментариями!
Ваш фидбек и опрос
12 декабря я начал мой ежегодный опрос об использовании C++. В этом году я получил 649 откликов. Спасибо за них!
Просуммируем ваши ответы :)
Использование стандартов C++
Какой стандарт вы используете постоянно?
Answer |
2022 |
2021 |
2020 |
2019 |
2018 |
---|---|---|---|---|---|
Pre C++11 |
10.8% |
7.5% |
8.4% |
10.3% |
20% |
C++11 |
27.6% |
25.6% |
25.5% |
30.3% |
41% |
C++14 |
28.7% |
28% |
28.6% |
35% |
42% |
C++17 |
61.8% |
66.1% |
64.4% |
62.4% |
44% |
C++20 |
42.2% |
28.8% |
20.4% |
9.2% |
n/a |
(сумма чисел не равна 100%)
C++20 получает больше использования, в то время как C++11/14 стабилизируется в районе 28%.
Опыт с C++17
Насколько вы знакомы с C++ 17?
Answer |
2022 |
2021 |
2020 |
2019 |
---|---|---|---|---|
experimenting with C++17 |
29.7% |
28.9% |
34.9% |
39.4% |
only read basic information |
10.2% |
11.4% |
9.4% |
13.4% |
already using in production |
57.6% |
56.6% |
52.2% |
41.6% |
don’t know any of its feature |
1.8% |
<1% |
1.6% |
2.6% |
Опыт с C++20
Насколько вы знакомы с C++ 20?
Answer |
2022 |
2021 |
2020 |
2019 |
---|---|---|---|---|
experimenting with C++20 |
37.8% |
35.7% |
35.6% |
29.3% |
only read basic information |
36.2% |
44.1% |
50.8% |
59.8% |
already using in production |
17.6% |
12.8% |
6.8% |
n/a |
don’t know any of its feature |
7.7% |
6% |
5.2% |
9.1% |
Используемые компиляторы
Answer |
2022 |
2021 |
2020 |
2019 |
---|---|---|---|---|
GCC |
70.9% |
76% |
70.3% |
75.6% |
Clang |
46.1% |
51.8% |
49.6% |
58.7% |
MSVC |
54.7% |
54.1% |
58.5% |
56.3% |
Intel Compiler |
2.5% |
2.3% |
2.8% |
3.1% |
C++ Builder |
1.1% |
2.2% |
3% |
1.2% |
(сумма чисел не равна 100%)
Какие IDE вы используете для своих проектов на C++
Answer |
2022 |
2021 |
---|---|---|
Visual Studio |
48.2% |
48.8% |
Visual Studio Code |
49.3% |
47.1% |
CLion |
19.3% |
18.5% |
C++ Builder IDE |
1.5% |
2% |
Eclipse |
6.2% |
5.8% |
Vim/Emacs |
24% |
26.9% |
QT Creator |
14.6% |
15.7% |
Notepad++ |
9.1% |
7.4% |
XCode |
6.8% |
6.1% |
(сумма чисел не равна 100%)
Какие дополнительные инструменты вы используете?
Answer |
2022 |
2021 |
2020 |
2019 |
---|---|---|---|---|
Debugger |
74.3% |
80.8% |
77% |
83.6% |
Sanitizers |
36.8% |
38.9% |
31.9% |
40.4% |
Static Code Analysis |
57.2% |
58.7% |
60.9% |
55.7% |
Profilers |
43% |
49.1% |
53.4% |
56.8% |
Clang Format |
45% |
49.4% |
43.3% |
49.3% |
CMake |
64.9% |
67.3% |
62.3% |
66% |
Package Managers |
25.3% |
26.2% |
23.2% |
21.4% |
(сумма чисел не равна 100%)
Лучшее, что случилось в 2022:
Ответы на этот открытый вопрос, основанные на популярности (я попытался сгруппировать похожие вещи), без какого-либо конкретного порядка:
Языковые обновления и стандарты: вы упомянули вещи вроде релиза C++20 и C++23, а также популяризацию новых фич и пропоузалов.
Новые языки: Carbon / Cpp2 / Val, и возникновение дискуссии о следующих шагах в сообществе.
Конференции и события: как обычно, конференции вроде CppCon и Meeting C++ набрали много голосов.
Книги и ресурсы: популярными ответами были “A Tour of C++”, “Embracing Modern C++ Safely,” и “Klaus Iglberger’s book on Software Design”.
YouTube-каналы: особенно Jason’s Turner, Cppcon Channel и Meeting C++ Youtube
Личные проекты и образование: многие из вас упоминали работу над личными проектами или улучшение своего владения C++ и понимание языка.
Поддержка компиляторов: доступность поддержки новых стандартов как необходимое развитие для сообщества.
Популярность C++: отклики упоминали TIOBE и другие рейтинги.
Также здорово было слышать новости вроде
«Переход моей компании на C++20»
«Личный апгрейд с C++14 до C++20»
«Я только что снова получил работу в C++ и довольно счастлив из-за этого»
Или «Мы всё ещё живы ;-)» :)
Также было много позитивных откликов о моём блоге, моих книгах и рассылке! Спасибо!
«Мне нравится ваша книга "C++ Initialization"»
«Нашёл ваш блог C++ Stories, было довольно полезно в подготовке к собеседованиям»
Другие опросы:
Мой опрос не самый главный :) Посмотрите на другие большие от таких компаний:
JetBrains Annual Highlights 2022 | JetBrains: Developer Tools for Professionals and Teams(https://blog.jetbrains.com/clion/2021/07/cpp-ecosystem-in-2021/)
Results summary: 2022 Annual C++ Developer Survey “Lite” : Standard C++
Заключение
Спасибо, что дочитали досюда :)
C++ сейчас на развилке. С одной стороны, он в хорошей форме, с кучей новых фич, поддержкой компиляторов и отличных инструментов (и с даже улучшившейся производительностью отладки!) Но в то же время у многих экспертов есть сложность с тем, чтобы сделать язык безопаснее и починить некоторые старые проблемы (дискуссия о сломанном ABI). Вот почему некоторые эксперты пытаются начать с чего-то свежего и улучшить C++ с помощью создания новых конкурентов. Эти новые языки либо напрямую компилируются в C++ (как CppFront), либо позволяют активное взаимодействие с C++ (как Carbon). Так что, возможно, в будущем вы будете писать на супер-надёжном языке C++2 и по-прежнему держать некоторые легаси-файлы на старом добром современном C++ в одних и тех же проектах. Я надеюсь, что «дружеская соревновательность» продвинет C++ дальше и позволят нам получить лучшие фичи и более надёжный код.
А с ChatGTP кто знает, будем ли мы вообще кодить в следующем году :)
В целом большие вещи в 2022-м вижу так:
Популяризация C++20
Работа над C++23
Новые языки и новые возможности для улучшения C++
Обсуждения в сообществе и петля обратной связи
Комментарии (22)
emaxx
14.01.2023 07:59+3Какие дополнительные инструменты вы используете?
Интересно, что по всем инструментам наблюдается небольшое снижение - что бы этот тренд значил?
Допустим, падение использования отладчиков (-6%), санитайзеров (-2%) и статических анализаторов (-2%) можно было бы списать на то, что язык потихоньку становится безопаснее. Но с профайлерами (-6%) и особенно clang format (-4%) вообще непонятно.
Или всё проще, и публика его блога потихоньку сбегает на Rust, продолжая почитывать статьи про C++ из праздного интереса? :)
Malizia
14.01.2023 09:40Часто по подписке от него прилетают не очень интересные статьи или "обновленный контент с 15 новыми строчками кода". Поэтому лично мне никакого желания перечитывать один и тот же материал нет.
Sixshaman
14.01.2023 13:09Регулярно читаю рассылку пропозалов по C++, но смотрю, обновлений за декабрь так и не появилось. Скажите, это каждый год так? Не знаете, сколько ещё ждать?
crackedmind
14.01.2023 13:20+2До 2020 реже публиковали, т.к. публикации были привязаны к оффлайновым встречам комитета. С началом пандемии они перешли на ежемесячные виртуальные созвоны. Возможно всё станет как до 2020, а может и нет, а вообще рекомендую https://github.com/cplusplus/papers тут хотя бы судьбу пропозалов можно поглядеть
NeoCode
14.01.2023 14:35Кстати, а можно как-то скачать все пропосалы из их рассылки единым пакетом, желательно вместе с какой-то программой для чтения и поиска? Помнится когда-то раньше у них гугл группа была, я искал как скачать оттуда но ничего не нашел.
crackedmind
14.01.2023 21:30+1https://wg21.link/ там есть нужные ссылки, например распарсить wg21.link/index.json и выкачивать.
semenyakinVS
14.01.2023 20:33Свято верю что концепты и модули когда их распробует комьюнити могут радикально увеличить популярность плюсов.
Концепты резко снижают порог входа в шаблоны - фактически, ключевую фичу плюсов.
Модули фиксят медленную компиляцию и упрощают переиспользование кода за счёт модульной инкапсуляции.
emaxx
14.01.2023 23:50+2Модули не факт что дадут радикальное ускорение на практике. У кого-то выигрыш на реальном проекте составил 2x, у кого-то получилось +- как было.
Есть измерения, правда, от 2019 г., в которых модули получаются даже медленнее в условиях параллельной компиляции на большом числе ядер: www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1441r1.pdf.
Некоторые утверждают, что якобы в стандарт внесли версию, в которой не учли фидбек от производителей компиляторов.
semenyakinVS
15.01.2023 00:43А с чем связана неоптималность модулей? Если глянуть на их теорию - кажется, они должны очень ощутимый прирост по сравнению с вариантом с инклудами дать. Каждый "хедер" (в ковычках потому что у модулей это не совсем хедер) с ними строго по одному разу обработается
emaxx
15.01.2023 04:03+1В статье по той ссылке ("Are modules fast?", 2019 г.) у них получилось, что замедление в многопоточных сборках вызвано тем, что одни процессы начинают много простаивать, ожидая других. (Я не исключаю, что частично эту проблему могли побороть за эти годы, или переложить на плечи систем сборки.)
Другая статья, от 2022 г., в тесте из которой на clang получилось, что полные сборки ускоряются модулями на 10-20%, а инкрементальные сборки замедляются вплоть до 22 (!) раз: https://observablehq.com/@vsapsai/effect-of-clang-modules-on-compilation-time. Объяснение у них такое, что при изменениях в популярных хедерах модули заставляют пересобирать большее число исходников.
Третий источник - видео от 2021 г. (https://www.youtube.com/watch?v=9OWGgkuyFV8), в комментарии к которому некто retropaganda (не знаю, насколько авторитетный?) говорит о сложностях с запоминанием и объединением контекстов препроцессора.
crackedmind
15.01.2023 12:06Во второй статье речь идет о модулях кланг, а не С++ модулях, кланг модули были задолго до С++ модулей.
yatanai
15.01.2023 12:11+1С точки зрения логики, модуль собирается по графу, верно? И соответственно если в нём много зависимостей оно просто тупо будет ждать пока освободится достаточное колличество нод для сборки на многопроцессорных системах.
В то время базовые инклюды это тупо копировать в исходник кусок кода. Да это занимает в разы больше машинного времени но это можно распараллить на кучу потоков. И единственный затуп тут может быть с решением екстернов, всё.
DistortNeo
15.01.2023 17:08+1Просто рассматривайте модули как те же инклюды, но для которых гарантируется повторяемость результатов включения вне зависимости от контекта. Это значит, что если компилятор уже распарсил подобный инклюд-файл, то больше нет необходимости парсить его повторно, и достаточно взять готовый результат его обработки.
При идеальной реализации скорость компиляции с подобными контексто-независимыми инклюдами будет всегда выше. В реальности же у нас имеются довольно большие накладные расходы на обмен результатами парсинга между нодами.
semenyakinVS
15.01.2023 19:23Главное причина по которой модули в перспективе могут будуть здорово оптимизированы - они локализуют приватные зависимости. При сборке большого количества шаблонного кода это очень важный фактор
DistortNeo
15.01.2023 15:29+1Концепты резко снижают порог входа в шаблоны — фактически, ключевую фичу плюсов.
А в чём заключается высокий порог входа в шаблоны? Новичку вовсе не нужны ни SFINAE, ни возможности городить конструкции в стиле Александреску, тем более, что в приличных местах за такое бьют по рукам. Даже variadic templates можно отложить на потом.
Концепты же радикальным образом упрощают написание сложного шаблонного кода, делают его значительно более читаемым, но при этом представляют собой дополнительную сущность, которую также приходится изучать.
allcreater
15.01.2023 18:30+1Ну, кроме сложностей с изучением самих шаблонов у новичков (да и у старичков тоже, будем честны) возникают трудности с чтением простыней ошибок инстанциирования шаблонов. По идее, при широком распространении концептов ошибки станут гораздо понятнее, что тоже должно понизить порог входа...
semenyakinVS
15.01.2023 18:47Именно. Об этом даже Страуструп говорил - что с концептам шаблоны зашли бы людям намного проще
perfect_genius
16.01.2023 00:14Слежу за развитием С++ тут на Хабре, но что-то пропустил — кто предлагает новые идеи для включения в язык? Любой желающий? И потом идея должна набрать сколько-то голосов, чтобы её начали изучать?
Helltraitor
Проделана огромная работа. Чем больше фич я вижу, тем меньше у меня уверенности в своих знаниях
rukhi7
У меня маленько по другому:
Чем больше фич я вижу, тем меньше у меня уверенности в надежности этого монстра, тем меньше желания с ним связываться.
Умиляют вот такие заявления:
с претензией на то что сейчас, все сообщество бросится переписывать мегабайты существующего кода, который и так вполне себе работает. Надо же быть в тренде новомодных веяний по написанию "the range‐based for loop".
cdriper
если правда хотите надавить на мозоль, то лучше бейте в сторону косяков реализации ranges в C++20
потому что "the range‐based for loop" уже больше десяти лет, это скучная, понятная и правильно работающая фича