Грядет С++ 20: что включат в новую редакцию

15.08.2019      17648

Комитет по стандартам языка программирования C++ завершает разработку новой редакции. Разбираемся, какие изменения ждут программистов в C++ 20.

С++ станет безопаснее

Чем меньше язык ограничивает детали реализации, тем более гибкие решения могут создавать разработчики. Но есть и минус: растет вероятность ошибок, которые могут не проявиться до релиза, а через месяцы или годы. 

В С++ 20 введут явные константы. Формально constexpr появилось еще в С++ 11, но теперь ключевое слово стало рекомендацией для компилятора. Выражения с constexpr четко показывают, что функция возвращает константу. Причем стандарт позволит использовать функции virtual constexpr и конструкции try/catch внутри constexpr. Известно также, что функции внутри STL будут задействовать constexpr там, где это возможно. Внедрят и функцию, которая позволит понять, выполняется ли фрагмент кода внутри определения константы. 

Еще одно нововведение – consteval. Оно объявляет функцию как непосредственную, и в этом случае для вычисления результата функции во время выполнения могут использоваться другие неконстантные функции. Наконец, функцию можно объявить как constinit. Такой вариант предполагает, что объект инициализируется статически постоянным значением. 

Концепты будут частью стандарта

Делается это до компиляции. Если концепт обнаружил ошибку, он выдает конкретное сообщение, а не пачку связанных посланий. В результате экономится время разработки. Часть концептов включат в стандартную библиотеку. Но чтобы опробовать новые возможности, придется ждать, пока обновятся компиляторы. До этого можно установить GCC, который с шестой версии включает экспериментальные концепты, и использовать -fconcepts при компиляции. 

Появятся диапазоны, как в Python

Работа с диапазонами (range) – главный «синтаксический сахар» Python. Теперь что-то подобное будет и в С++. 

Диапазоны реализуют как итераторы, которые охватывают последовательность значений в коллекциях: списках, векторах и т.п. Постоянно перемещать начало и конец итератора в данном случае не нужно: диапазоны сохраняют их внутри.

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

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

Форматировать строки станет проще

Похоже, можно будет забыть о cout и тем более о printf(). Библиотека libfmt становится частью стандарта и интегрируется как std::format. Работа с ней также похожа на форматирование строк в Python. Разница только в синтаксисе формата строки. Вы сможете организовать центрированный вывод с символами заполнения или без них, определить правила форматирования для собственных типов и т.д. 

Макросы постепенно уходят

В С++ 20 реализуют альтернативу макросам препроцессора вроде __FILE__ и __LINE__. Экспериментальная функция source_location станет стандартом языка. Функция предоставляет доступ к имени файла, имени функции из контекста вызова или номеру строки. С ее помощью можно быстро реализовать пользовательский формат ведения журнала.

В целом разработчики стандартов С++ пытаются постепенно исключать препроцессор. А чтобы разделять исходный код и в финале заменить фундаментальную систему директив #include, внедряют модули. GCC и Clang уже поддерживают модули в экспериментальном формате. Можно посмотреть, как это работает, чтобы подготовиться к введению стандарта.

Будет еще много мелких, но важных нововведений

Coroutines (сопрограммы) – важный механизм, поддержку которого также добавят в С++ 20. Метод позволяет генерировать потоки исполнения кода поверх системных аппаратных потоков. Кроме того, добавят кооперативное прерывание потоков, интегрируют новую библиотеку синхронизации. 

Для трехсторонних сравнений появится оператор <=>. Чтобы уменьшить шум от разделения пространства имен, можно будет использовать using enum. Расширить возможности работы с лямбда-выражениями позволит пакет дополнений. Также в стандарте частично откажутся от volatile. В то же время для обеспечения обратной совместимости важные для volatile части языка сохранят.


Автор:
Обозреватель


См. также

Новость ИТ-Новость Языки программирования

Журнал Института инженеров электротехники и электроники IEEE Spectrum подготовил рейтинг самых популярных языков программирования в 2023 году. Статистика разделена на три категории.

01.09.2023    1507    VKuser24342747    4       

2

Новость ИТ-Новость Языки программирования

С помощью библиотек и средств визуализации Python можно будет манипулировать данными Excel, а затем использовать полученные результаты в формулах, диаграммах и сводных таблицах.

28.08.2023    849    VKuser24342747    0       

2

Новость ИТ-Новость Языки программирования

Спустя пять лет разработки вышел релиз компилятора для языков программирования Python и Cython – проект Cython 3.0. Он позволяет транслировать код Python в представление на C/C++.

28.07.2023    1513    VKuser24342747    0       

2

Новость GIT Искусственный интеллект ИТ-Новость Языки программирования Программист

GitLab представила собственную нейросеть Code Suggestions, способную генерировать код по запросу на естественном языке. ИИ-помощник поддерживает работу с 13 языками программирования.

10.07.2023    1400    VKuser24342747    0       

1

Новость Рейтинг Языки программирования

Stack Overflow представил рейтинг языков программирования за 2023 год. В исследовании учитывали не только частоту применения языка, но и интерес разработчиков к нему. Также компания составила рейтинг платформ и ИИ-инструментов. 

20.06.2023    1676    VKuser24342747    1       

2

Новость Google ИТ-Новость Языки программирования

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

14.12.2022    7353    VKuser24342747    0       

3

Новость ИТ-Новость Языки программирования (Устарело) Разработка

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

01.12.2022    8502    VKuser24342747    11       

3

Новость Linux ИТ-Новость Языки программирования

Ричард Мэттью Столлман, основатель Фонда свободного программного обеспечения, представил руководство по языку C и расширениям GNU. Пособие доступно всем желающим и предназначено как для опытных, так и начинающих программистов.

19.09.2022    12074    VKuser24342747    0       

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. cmd_vasec 34 15.08.19 13:19 Сейчас в теме
А как это повлияет на 1с?
3. protexprotex 131 15.08.19 14:34 Сейчас в теме
(1) 1С также пишется на с++. Ну вот и поэкспериментируют на 1С :-)
5. alex_bitti 143 15.08.19 14:40 Сейчас в теме
(1) думаю поднимут цену на итс подписку)) надо же быть в тренде
kuzyara; FarhadIlyazov; 3vs; KostyaBu; Dorosh; CyberCerber; +6 Ответить
2. s22 19 15.08.19 13:39 Сейчас в теме
Концепты НЕ будут частью стандарта
4. protexprotex 131 15.08.19 14:35 Сейчас в теме
По поводу макросов - это интересно. В с++ макросы, конечно, реализованы не очень.
6. Evil Beaver 8171 15.08.19 14:59 Сейчас в теме
А нам ето все зачем, мыж одинэсники, нам дебет-кредит, туда-сюда...
zqzq; DeFunes; +2 1 Ответить
7. protexprotex 131 15.08.19 15:06 Сейчас в теме
Не знаю как у других - но когда я на 1С месяц пишу - мозги плесневеют. Достаточно два дня на с++ проекты поробить - и мысль проясняется :-)
Synoecium; DeFunes; +2 Ответить
8. CheBurator 3126 15.08.19 23:51 Сейчас в теме
(7) зато на 1С работает вся страна...
SagittariusA; 3vs; +2 Ответить
9. 3vs 16.08.19 07:17 Сейчас в теме
(8)"зато на 1С работает вся страна..."
Интересен смысл, вложенный в это выражение автором:
То ли вся страна пользуется продуктами 1С, то ли вся страна платит 1С дань!? :-)
В принципе, оба варианта имеют место... :-)
Fox-trot; SerVer1C; SagittariusA; starik-2005; +4 Ответить
10. protexprotex 131 16.08.19 08:15 Сейчас в теме
(8) Это потому, что других вариантов нет. Монополисты. Но 1С по удобству равных нет, но это значит, что нет равных по технологическим решениям.
11. пользователь 17.08.19 12:19
Сообщение было скрыто модератором.
...
Оставьте свое сообщение