После получения 4 сентября от ISO окончательного одобрения технических спецификаций стандарт C++ 20, как ожидается, официально будет опубликован до конца текущего года. В нем появится новый функционал, в том числе модули и сопрограммы.

Язык C++, разработанный в 1979 году для системного программирования, до сих пор сохраняет жизненно важное значение. В сентябре 2020 года он вошел в число самых популярных языков, заняв в Tiobe Index четвертое место вслед за Си, Java и Python. Спецификации C++ 20 в Tiobe называют одним из факторов, придавших языку дополнительный импульс.

К новым функциям C++ 20 относятся:

  • модули, позволяющие программистам использовать модульные компоненты;
  • концепции, служащие для определения требований к шаблону и поддержки обобщенного программирования; применение концепций должно улучшить качество программного кода;
  • библиотека синхронизации, предназначенная для улучшения поддержки детализированного управления оборудованием;
  • улучшение вычислений в процессе компиляции;
  • сопрограммы, позволяющие выполнять программные модули в режиме кооперативной многозадачности; стандартизированная поддержка сопрограмм в стандартных библиотеках пока отсутствует: ее появление планируется в C++ 23.
  • библиотека Ranges, содержащая компоненты для работы с диапазонами значений.
  • макросы проверки наличия функциональности – набор макросов, соответствующих C++ 11 и более поздним версиям языка и библиотечного функционала;
  • предварительно рассчитанные значения хеш-функций в поиске;
  • операторы расширения, позволяющие повторять на этапе компиляции оператор для каждого элемента кортежа, массива, класса, набора параметров или диапазона;
  • неявное создание объектов для низкоуровневых манипуляций
  • улучшенное контекстно-зависимое распознавание импорта и модулей, помогающее инструментам, которые не являются компиляторами, определять зависимости сборки;
  • новые алгоритмы ранжирования.

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