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

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

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

• модули, позволяющие программистам использовать модульные компоненты;

• концепции, служащие для определения требований к шаблону и поддержки обобщенного программирования; применение концепций должно улучшить качество программного кода;

• библиотека синхронизации, предназначенная для улучшения поддержки детализированного управления оборудованием;

• улучшение вычислений в процессе компиляции;

• сопрограммы, позволяющие выполнять программные модули в режиме кооперативной многозадачности; стандартизированная поддержка сопрограмм в стандартных библиотеках пока отсутствует: ее появление планируется в C++ 23.

• библиотека Ranges, содержащая компоненты для работы с диапазонами значений.

• макросы проверки наличия функциональности — набор макросов, соответствующих C++ 11 и более поздним версиям языка и библиотечного функционала;

• предварительно рассчитанные значения хеш-функций в поиске;

• операторы расширения, позволяющие повторять на этапе компиляции оператор для каждого элемента кортежа, массива, класса, набора параметров или диапазона;

• неявное создание объектов для низкоуровневых манипуляций

• улучшенное контекстно-зависимое распознавание импорта и модулей, помогающее инструментам, которые не являются компиляторами, определять зависимости сборки;

• новые алгоритмы ранжирования.

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

Спецификации C++ 20 получили окончательное одобрение