После получения 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, хотя, возможно, и в этой версии мы его не увидим.