После получения от ISO окончательного одобрения технических спецификаций стандарт C++ 20, как ожидается, официально будет опубликован до конца текущего года. В нем появится новый функционал, в том числе модули и сопрограммы.
Язык C++, разработанный в 1979 году для системного программирования, до сих пор сохраняет жизненно важное значение. В сентябре 2020 года он вошел в число самых популярных языков, заняв в Tiobe Index четвертое место вслед за Си, Java и Python. Спецификации C++ 20 в Tiobe называют одним из факторов, придавших языку дополнительный импульс.
К новым функциям C++ 20 относятся:
• модули, позволяющие программистам использовать модульные компоненты;
• концепции, служащие для определения требований к шаблону и поддержки обобщенного программирования; применение концепций должно улучшить качество программного кода;
• библиотека синхронизации, предназначенная для улучшения поддержки детализированного управления оборудованием;
• улучшение вычислений в процессе компиляции;
• сопрограммы, позволяющие выполнять программные модули в режиме кооперативной многозадачности; стандартизированная поддержка сопрограмм в стандартных библиотеках пока отсутствует: ее появление планируется в C++ 23.
• библиотека Ranges, содержащая компоненты для работы с диапазонами значений.
• макросы проверки наличия функциональности — набор макросов, соответствующих C++ 11 и более поздним версиям языка и библиотечного функционала;
• предварительно рассчитанные значения хеш-функций в поиске;
• операторы расширения, позволяющие повторять на этапе компиляции оператор для каждого элемента кортежа, массива, класса, набора параметров или диапазона;
• неявное создание объектов для низкоуровневых манипуляций
• улучшенное контекстно-зависимое распознавание импорта и модулей, помогающее инструментам, которые не являются компиляторами, определять зависимости сборки;
• новые алгоритмы ранжирования.
Поддержка контрактов, ожидавшаяся в C++ 20 для определения предусловий, постусловий и утверждений, была удалена из спецификаций. Теперь соответствующий функционал планируется включить в C++ 23, хотя, возможно, и в этой версии мы его не увидим.