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

15.08.2019     

Комитет по стандартам языка программирования 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 части языка сохранят.


Автор:
Ксения Шестакова Обозреватель


Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. cmd_vasec 34 15.08.19 13:19 Сейчас в теме
А как это повлияет на 1с?
3. protexprotex 130 15.08.19 14:34 Сейчас в теме
(1) 1С также пишется на с++. Ну вот и поэкспериментируют на 1С :-)
5. alex_bitti 113 15.08.19 14:40 Сейчас в теме
(1) думаю поднимут цену на итс подписку)) надо же быть в тренде
kuzyara; FarhadIlyazov; 3vs; KostyaBu; Dorosh; CyberCerber; +6 Ответить
2. s22 19 15.08.19 13:39 Сейчас в теме
Концепты НЕ будут частью стандарта
4. protexprotex 130 15.08.19 14:35 Сейчас в теме
По поводу макросов - это интересно. В с++ макросы, конечно, реализованы не очень.
6. Evil Beaver 7039 15.08.19 14:59 Сейчас в теме
А нам ето все зачем, мыж одинэсники, нам дебет-кредит, туда-сюда...
zqzq; DeFunes; +2 1 Ответить
7. protexprotex 130 15.08.19 15:06 Сейчас в теме
Не знаю как у других - но когда я на 1С месяц пишу - мозги плесневеют. Достаточно два дня на с++ проекты поробить - и мысль проясняется :-)
Synoecium; DeFunes; +2 Ответить
8. CheBurator 3455 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 130 16.08.19 08:15 Сейчас в теме
(8) Это потому, что других вариантов нет. Монополисты. Но 1С по удобству равных нет, но это значит, что нет равных по технологическим решениям.
Оставьте свое сообщение

См. также

Visual Studio Code стал поддерживать работу с удаленными репозиториями без клонирования

Новость GitHub ИТ-новость

Открытая среда разработки Visual Studio Code теперь позволяет работать с удаленными репозиториями GitHub напрямую. Для этого появилось специальное расширение Remote Repositories.

сегодня в 14:44    1096    user1015646    0       

Платформа Yandex.Cloud прошла добровольную аттестацию на соответствие требованиям 152‑ФЗ

Новость Безопасность ИТ-новость Яндекс

В апреле 2021 года платформа Yandex.Cloud прошла внешний аудит. Теперь клиенты сервиса могут обрабатывать в облаке любые категории персональных данных, включая биометрические и специальные.

11.06.2021    1135    capitan    1       

Google I/O 2021: главные анонсы конференции для разработчиков

Новость Android Google ИТ-новость Мобильные приложения Новости компаний

Начало лета богато на конференции для разработчиков программного обеспечения. Одно из крупнейших событий международного уровня – Google I/O 2021. В этом году оно прошло в онлайн-формате и принесло больше анонсов, чем обычно.

11.06.2021    1310    user1015646    0       

«Яндекс» внедрил генеративную нейросеть для поиска ответов

Новость Искусственный интеллект ИТ-новость Яндекс

«Яндекс» представил новую версию своего поисковика Y1. В числе прочих изменений – использование машинного обучения для генерации подзаголовков объектных ответов и классификации сниппетов. 

11.06.2021    1187    VKuser24342747    0       

Microsoft выложила сборку OpenJDK в открытый доступ

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

Сборка проекта OpenJDK, подготовленная специалистами Microsoft, теперь доступна всем желающим. Решение с открытым исходным кодом можно загрузить в традиционном формате и в Docker-контейнере.

10.06.2021    1244    user1015646    0       

Составлен список из 10 самых полезных репозиториев GitHub

Новость GitHub ИТ-новость

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

10.06.2021    1433    VKuser24342747    0       

Российские компании совместно с Gigabyte наладят выпуск серверного оборудования

Новость ИТ-новость

«Яндекс», «Ланит», «ВТБ» и Gigabyte договорились о создании завода по выпуску серверов и компонентов на территории России. Фабрика может начать выпускать продукцию уже в 2022 году.

10.06.2021    1137    VKuser24342747    0       

Консорциум Всемирной паутины создал комитет по развитию WebExtensions

Новость Интернет ИТ-новость

Организация Консорциум Всемирной паутины W3C создала WebExtensions Community Group (WECG) для разработки единых стандартов браузерных расширений. В комитет вошли представители крупных ИТ-компаний.

09.06.2021    963    VKuser24342747    0       

Google разработал сервис для наглядного отслеживания зависимостей проекта

Новость Google ИТ-новость

Инструмент Open Source Insights позволяет визуализировать граф зависимостей для пакетов. Благодаря сервису можно своевременно обнаруживать проблемы с безопасностью модулей.

09.06.2021    1449    VKuser24342747    0       

10 лучших языков программирования в 2021 году по версии InformationWeek

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

Журнал InformationWeek выпустил топ языков программирования, востребованных среди корпоративных ИТ. Рейтинг составлен на основе нескольких источников сбора и анализа данных. В рейтинг InformationWeek попало десять языков программирования.

08.06.2021    1324    SKravchenko    0       

«Яндекс» разрешил пользователям удалять данные о себе

Новость ИТ-новость Яндекс

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

07.06.2021    1667    VKuser24342747    0       

Компания Virtuozzo бесплатно раздает дистрибутив vzLinux на замену CentOS

Новость Linux ИТ-новость

Операционная система может стать полноценной заменой CentOS, который перестанет поддерживаться с конца 2021 года. Разработала ОС компания с российскими корнями.

03.06.2021    2561    VKuser24342747    0       

«Яндекс» предоставит бизнесу доступ к сервису обогащенных ответов

Новость Интернет ИТ-новость Яндекс

Сторонние компании смогут создавать блоки для дополнительной информации о своем сайте, которая будет ранжироваться в поисковой выдаче. Таким образом «Яндекс» устраняет нарушения, обнаруженные ФАС.

03.06.2021    1792    VKuser24342747    1       

Google официально выпускает ОС Fuchsia для умных дисплеев Nest Hub

Новость Android Google ИТ-новость Мобильные приложения

Google сообщил, что обновление коснется владельцев первого поколения Nest Hub. Новая ОС Fuchsia заменит существующее программное обеспечение на основе Cast OS.

02.06.2021    1558    SKravchenko    0       

В Amazon Web Services добавили новую систему запуска и управления контейнерами

Новость Дата-центры ИТ-новость Новости компаний

Компания Amazon открыла общий доступ к ECS Anywhere. Это расширение ECS (Elastic Container Service) для управления контейнеризированными приложениями. Оно обеспечивает быстрое развертывание AWS-приложений в любой вычислительной среде.

02.06.2021    1903    user1015646    1       

Microsoft представила релизную версию менеджера пакетов winget

Новость Windows Автоматизация ИТ-новость

В Windows 10 в ближайшем обновлении будет добавлена утилита Windows Package Manager 1.0. Она позволяет управлять пакетами на устройстве, обновлять их и копировать настройки на новый компьютер.

01.06.2021    2877    VKuser24342747    0       

Microsoft добавила в Teams презентации, вебинары и приложения

Новость ИТ-новость Новости компаний

Microsoft открыл бесплатный доступ к вебинарам и презентациям PowerPoint Live в сервисе Teams. Также на ежегодной конференции Build компания рассказала о возможностях создания приложений на базе мессенджера.

31.05.2021    1312    user1015646    0       

Microsoft разработала систему автодополения кода на базе нейросети GPT-3

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

Платформа Microsoft Power Apps получила функцию автоматической генерации кода на языке Power Fx. Пользователю достаточно словами описать команду, и программа выдаст подходящую формулу.

28.05.2021    1567    VKuser24342747    0       

Энтузиаст создал дистрибутив Linux для записи на дискету

Новость Linux ИТ-новость

Польский разработчик Кшиштоф Кристиан Янковски сделал дистрибутив Floppinux, который помещается на 3,5-дюймовую дискету. Современная операционная система работает на любых компьютерах старше 1989 года.

27.05.2021    1962    VKuser24342747    5       

В России создадут госстандарт для ИИ

Новость Искусственный интеллект ИТ-новость

Российские власти предлагают утвердить ГОСТ для разработок в сфере искусственного интеллекта. В Росстандарте уверены: ГОСТы ускорят развитие инноваций и добросовестной конкуренции в сфере ИИ.

27.05.2021    3189    user1015646    5       

Разработчики Sublime Text представили версию приложения 4.0

Новость ИТ-новость

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

27.05.2021    1565    VKuser24342747    0       

Создан свободный эмулятор для запуска Linux-приложений на macOS

Новость Linux Mac OS GitHub ИТ-новость

Бесплатная программа Lima получила первую публичную версию 0.1.0. При разработке проекта авторы вдохновлялись аналогичной технологией от Microsoft, которая позволяет запускать приложения Linux в Windows 10.

26.05.2021    3691    VKuser24342747    1       

Ничего лишнего: Facebook научил нейросеть забывать устаревшие данные

Новость Искусственный интеллект ИТ-новость

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

25.05.2021    1605    VKuser24342747    0       

GitLab ужесточил правила использования CI/CD для борьбы с майнерами

Новость Автоматизация Безопасность ИТ-новость

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

25.05.2021    2362    VKuser24342747    0       

«Сбер» объявил о создании российского аналога GitHub

Новость GitHub Банки ИТ-новость Цифровая экономика

«Сбер» снял ограничение, которое позволяло использовать ИТ-сервисы компании только корпоративным клиентам, и открыл доступ всем желающим к своим облачным сервисам.

24.05.2021    2878    VKuser24342747    4