Должен признать, что в некоторые из предыдущих лет C++ мог ощущаться немного «скучным» и «стабильным». Новые фичи, новый стандарт каждые три года, встречи, конференции... обычная жизнь (не считая некоторых дополнительных событий в мире, экономике и эпидемиологической ситуации). Прошедший год отличается, потому что выглядит как «переломный» в истории C++... и кто знает, куда это заведёт нас.

Примечание переводчика. На оригинал статьи я наткнулся в чатике нашей конференции C++ Russia, и если вам интересен этот текст — подозреваю, что будет интересна и конференция (пройдёт в мае, в формате «Москва + онлайн».

Давайте вспомним некоторые вещи, случившиеся в этом году.

Отчёты за прошлые годы: 2021202020192018201720162015201420132012.

Важная оговорка: представленные взгляды здесь сугубо мои личные, они субъективные, и не представляют собой мнение комитета по стандартизации 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, семафоры, больше атомиков, барьеров, больше вещей по concurrency

  • consteval и constinit

  • constexpr-алгоритмы, векторы, строки, аллокация памяти

  • std::span

  • и другое!

А вот таблица поддержки компиляторами языковых фич:

компилятор

отсутствующие фичи

GCC 11

Модули в «частичном» состоянии

Clang 14/16

Модули и корутины частично, улучшения CTAD отсутствуют

MSVC 16.9

Полная поддержка!

Теперь про библиотечные фичи:

компилятор

пометки

GCC libstdc++, GCC 13

Почти полная поддержка!

Clang libc++, как в Clang 14

отсутствуют: jthread, header units стандартной библиотеки, make_unique_for_overwrite, некоторые атомики

MSVC STL

Полная поддержка в версиях MSVC 16.9, 17.0!

Можете отслеживать статус на этой странице.

Если хотите изучить все фичи, можете прочитать этот отличный и суперпопулярный пост Олександра Коваля:
All C++20 core language features with examples

В этом году в рубрике C++ Stories я также описал многие фичи нового стандарта:

Статус C++23

Этот год был значим тем, что новый стандарт перешёл в стадию «feature freeze». Комитет анонсировал это в середине года после июньской встречи.

Некоторые языковые фичи и их текущая поддержка в компиляторах:

Фича

GCC

Clang

MSVC

Сделать () опциональнее для лямбд

11.0

13.0

x

if consteval

12.0

14.0

x

Deducing this

x

x

VS 2022 17.2 (partial)

Многомерный operator[]

12.0

x

x

#elifdef и #elifndef

12.0

13.0

x

static operator()

13.0

16.0

x

static operator[]

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-го.

Вот некоторые заметки со встреч:

Следующая встреча пройдёт в городе Иссакуа (США), начиная с 6 февраля.

Посмотреть полный список встреч: Upcoming Meetings, Past Meetings : Standard C++

Компиляторы

Чтобы поспевать за стандартами C++, создателям компиляторов и командам библиотек нужно проделывать немало работы.

Посмотрим на три популярных компилятора: MSVC, GCC и Clang.

Visual Studio

Команда MSVC переписала свою компиляторную инфраструктуру и может относительно быстро выпускать новые фичи. Они даже объявили о поддержке C++ 20 целых два раза!

Этот анонс в основном был связан с дополнительными изменениями и фиксами DR Standard для <format>, <chrono> и <ranges>. После завершения работы над ними имплементация снова стала стабильной.

Некоторые другие новости и посты MSVC:

И есть страница документации о соответствии стандартам 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.

А ещё в этом году заметна тематика безопасности языков, и мы видим такие тексты:

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.

Отдельные яркие моменты, ресурсы, видеозаписи кейноутов:

Онлайн-встречи по 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, было довольно полезно в подготовке к собеседованиям»

Другие опросы:

Мой опрос не самый главный :) Посмотрите на другие большие от таких компаний:

Заключение

Спасибо, что дочитали досюда :)

C++ сейчас на развилке. С одной стороны, он в хорошей форме, с кучей новых фич, поддержкой компиляторов и отличных инструментов (и с даже улучшившейся производительностью отладки!) Но в то же время у многих экспертов есть сложность с тем, чтобы сделать язык безопаснее и починить некоторые старые проблемы (дискуссия о сломанном ABI). Вот почему некоторые эксперты пытаются начать с чего-то свежего и улучшить C++ с помощью создания новых конкурентов. Эти новые языки либо напрямую компилируются в C++ (как CppFront), либо позволяют активное взаимодействие с C++ (как Carbon). Так что, возможно, в будущем вы будете писать на супер-надёжном языке C++2 и по-прежнему держать некоторые легаси-файлы на старом добром современном C++ в одних и тех же проектах. Я надеюсь, что «дружеская соревновательность» продвинет C++ дальше и позволят нам получить лучшие фичи и более надёжный код.

А с ChatGTP кто знает, будем ли мы вообще кодить в следующем году :)

В целом большие вещи в 2022-м вижу так:

  • Популяризация C++20

  • Работа над C++23

  • Новые языки и новые возможности для улучшения C++

  • Обсуждения в сообществе и петля обратной связи

Комментарии (22)


  1. Helltraitor
    14.01.2023 03:37
    +11

    Проделана огромная работа. Чем больше фич я вижу, тем меньше у меня уверенности в своих знаниях


    1. rukhi7
      14.01.2023 13:04
      +2

      У меня маленько по другому:

      Чем больше фич я вижу, тем меньше у меня уверенности в надежности этого монстра, тем меньше желания с ним связываться.

      Умиляют вот такие заявления:

      И одна из самых впечатляющих добавленных вещей, новость о которой разлетелась в сообществе

      ...

      Если вкратце, то можно станет писать:

      ...

      с претензией на то что сейчас, все сообщество бросится переписывать мегабайты существующего кода, который и так вполне себе работает. Надо же быть в тренде новомодных веяний по написанию "the range‐based for loop".


      1. cdriper
        14.01.2023 16:47
        +1

        если правда хотите надавить на мозоль, то лучше бейте в сторону косяков реализации ranges в C++20

        потому что "the range‐based for loop" уже больше десяти лет, это скучная, понятная и правильно работающая фича


  1. emaxx
    14.01.2023 07:59
    +3

    Какие дополнительные инструменты вы используете?

    Интересно, что по всем инструментам наблюдается небольшое снижение - что бы этот тренд значил?

    Допустим, падение использования отладчиков (-6%), санитайзеров (-2%) и статических анализаторов (-2%) можно было бы списать на то, что язык потихоньку становится безопаснее. Но с профайлерами (-6%) и особенно clang format (-4%) вообще непонятно.

    Или всё проще, и публика его блога потихоньку сбегает на Rust, продолжая почитывать статьи про C++ из праздного интереса? :)


    1. Malizia
      14.01.2023 09:40

      Часто по подписке от него прилетают не очень интересные статьи или "обновленный контент с 15 новыми строчками кода". Поэтому лично мне никакого желания перечитывать один и тот же материал нет.


  1. Sixshaman
    14.01.2023 13:09

    Регулярно читаю рассылку пропозалов по C++, но смотрю, обновлений за декабрь так и не появилось. Скажите, это каждый год так? Не знаете, сколько ещё ждать?


    1. crackedmind
      14.01.2023 13:20
      +2

      До 2020 реже публиковали, т.к. публикации были привязаны к оффлайновым встречам комитета. С началом пандемии они перешли на ежемесячные виртуальные созвоны. Возможно всё станет как до 2020, а может и нет, а вообще рекомендую https://github.com/cplusplus/papers тут хотя бы судьбу пропозалов можно поглядеть


    1. NeoCode
      14.01.2023 14:35

      Кстати, а можно как-то скачать все пропосалы из их рассылки единым пакетом, желательно вместе с какой-то программой для чтения и поиска? Помнится когда-то раньше у них гугл группа была, я искал как скачать оттуда но ничего не нашел.


      1. crackedmind
        14.01.2023 21:30
        +1

        https://wg21.link/ там есть нужные ссылки, например распарсить wg21.link/index.json и выкачивать.


  1. semenyakinVS
    14.01.2023 20:33

    Свято верю что концепты и модули когда их распробует комьюнити могут радикально увеличить популярность плюсов.

    Концепты резко снижают порог входа в шаблоны - фактически, ключевую фичу плюсов.

    Модули фиксят медленную компиляцию и упрощают переиспользование кода за счёт модульной инкапсуляции.


    1. emaxx
      14.01.2023 23:50
      +2

      Модули не факт что дадут радикальное ускорение на практике. У кого-то выигрыш на реальном проекте составил 2x, у кого-то получилось +- как было.

      Есть измерения, правда, от 2019 г., в которых модули получаются даже медленнее в условиях параллельной компиляции на большом числе ядер: www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1441r1.pdf.

      Некоторые утверждают, что якобы в стандарт внесли версию, в которой не учли фидбек от производителей компиляторов.


      1. semenyakinVS
        15.01.2023 00:43

        А с чем связана неоптималность модулей? Если глянуть на их теорию - кажется, они должны очень ощутимый прирост по сравнению с вариантом с инклудами дать. Каждый "хедер" (в ковычках потому что у модулей это не совсем хедер) с ними строго по одному разу обработается


        1. 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 (не знаю, насколько авторитетный?) говорит о сложностях с запоминанием и объединением контекстов препроцессора.


          1. crackedmind
            15.01.2023 12:06

            Во второй статье речь идет о модулях кланг, а не С++ модулях, кланг модули были задолго до С++ модулей.


        1. yatanai
          15.01.2023 12:11
          +1

          С точки зрения логики, модуль собирается по графу, верно? И соответственно если в нём много зависимостей оно просто тупо будет ждать пока освободится достаточное колличество нод для сборки на многопроцессорных системах.

          В то время базовые инклюды это тупо копировать в исходник кусок кода. Да это занимает в разы больше машинного времени но это можно распараллить на кучу потоков. И единственный затуп тут может быть с решением екстернов, всё.


          1. DistortNeo
            15.01.2023 17:08
            +1

            Просто рассматривайте модули как те же инклюды, но для которых гарантируется повторяемость результатов включения вне зависимости от контекта. Это значит, что если компилятор уже распарсил подобный инклюд-файл, то больше нет необходимости парсить его повторно, и достаточно взять готовый результат его обработки.


            При идеальной реализации скорость компиляции с подобными контексто-независимыми инклюдами будет всегда выше. В реальности же у нас имеются довольно большие накладные расходы на обмен результатами парсинга между нодами.


      1. semenyakinVS
        15.01.2023 19:23

        Главное причина по которой модули в перспективе могут будуть здорово оптимизированы - они локализуют приватные зависимости. При сборке большого количества шаблонного кода это очень важный фактор


    1. DistortNeo
      15.01.2023 15:29
      +1

      Концепты резко снижают порог входа в шаблоны — фактически, ключевую фичу плюсов.

      А в чём заключается высокий порог входа в шаблоны? Новичку вовсе не нужны ни SFINAE, ни возможности городить конструкции в стиле Александреску, тем более, что в приличных местах за такое бьют по рукам. Даже variadic templates можно отложить на потом.


      Концепты же радикальным образом упрощают написание сложного шаблонного кода, делают его значительно более читаемым, но при этом представляют собой дополнительную сущность, которую также приходится изучать.


      1. allcreater
        15.01.2023 18:30
        +1

        Ну, кроме сложностей с изучением самих шаблонов у новичков (да и у старичков тоже, будем честны) возникают трудности с чтением простыней ошибок инстанциирования шаблонов. По идее, при широком распространении концептов ошибки станут гораздо понятнее, что тоже должно понизить порог входа...


        1. semenyakinVS
          15.01.2023 18:47

          Именно. Об этом даже Страуструп говорил - что с концептам шаблоны зашли бы людям намного проще


  1. perfect_genius
    16.01.2023 00:14

    Слежу за развитием С++ тут на Хабре, но что-то пропустил — кто предлагает новые идеи для включения в язык? Любой желающий? И потом идея должна набрать сколько-то голосов, чтобы её начали изучать?