C++26 завершён — самый значимый релиз со времён C++11 с рефлексией и безопасностью памяти
Ключевые фичи: compile-time рефлексия (P2996), безопасные указатели через lifetime analysis и контракты (expects/ensures). ISO голосование прошло единогласно.
Новости Tproger, отредактировано
Комитет ISO завершил техническую работу над C++26. По масштабу изменений — рефлексия, безопасность памяти, контракты, std::execution — это самый значимый релиз со времён C++11.
В субботу, 29 марта, около 210 экспертов из 24 стран — 130 очно и 80 удалённо — разрешили оставшиеся международные комментарии на встрече в Лондоне (Кройдон, Великобритания). Документ отправляется на финальное голосование ISO (DIS — Draft International Standard) и будет опубликован в ближайшее время.
Ключевые выводы
— C++26 завершён — самый значимый релиз со времён C++11
— Четыре главные фичи: рефлексия, безопасность памяти, контракты, std::execution
— Рефлексия позволяет C++ инспектировать и генерировать собственный код на этапе компиляции
— Hardened stdlib уже развёрнута в Google (1000+ багов исправлено, segfault-ы −30%) и Apple с оверхедом 0,3%
— GCC уже имеет рефлексию и контракты в trunk — можно пробовать сейчас
— Работа над C++29 стартует в июне с фокусом на дальнейшую безопасность памяти
Четыре главные фичи C++26
Херб Саттер, почётный председатель комитета ISO C++ (chair emeritus с 2025 года), называет их «Fab Four» — четвёрка фич, которые делают C++26 прорывным релизом.
1. Рефлексия — крупнейшее обновление со времён шаблонов
Compile-time рефлексия позволяет C++ описывать самого себя и генерировать код на этапе компиляции. Оператор ^ (reflection operator) превращает сущность в её метаданные, а шаблонные функции из пространства std::meta позволяют работать с ними:
По словам Саттера, это «самый мощный новый движок для выражения эффективных абстракций за всю историю C++». Рефлексия попала в драфт C++26 ещё в июне 2025 года.
2. Меньше UB — больше безопасности памяти
C++26 делает существующий код безопаснее просто при перекомпиляции, без изменений в исходниках. UB (undefined behavior, неопределённое поведение) — исторически главный источник уязвимостей в C++. Два ключевых улучшения:
- Чтение неинициализированных переменных больше не UB. Целая категория уязвимостей исчезает при переходе на C++26
- Hardened стандартная библиотека — автоматические проверки границ при обращении к элементам vector, span, string, string_view и десятков других типов. При выходе за границы — trap вместо тихого повреждения памяти
Это не теоретический дизайн. В Google hardened stdlib уже развёрнута на сотнях миллионов строк C++: исправлено более 1000 багов, прогноз — предотвращение 1000–2000 багов в год, segfault-ы по всему production-флоту снизились на 30%. В Apple — аналогичный масштаб. Средние накладные расходы — всего 0,3% производительности.
Из сотен миллионов строк C++ в Google только пять сервисов полностью отказались от hardening из-за проблем с производительностью. Гранулярный API для небезопасного доступа использовался всего в семи местах.
3. Контракты: pre, post, contract_assert
Языковые контракты позволяют задавать предусловия, постусловия и утверждения прямо в объявлениях функций — вместо хрупкого макроса assert из C, который не знает ни о параметрах, ни о возвращаемых значениях:
Фича вызвала серьёзные дебаты. Часть комитета считает, что текущий дизайн контрактов недостаточно продуман — в частности, спорным остаётся поведение при нарушении контракта (вызов хендлера vs немедленный terminate). На финальном голосовании 114 экспертов проголосовали за, 12 — против, 3 воздержались. Рекордно низкое число воздержавшихся показывает, что все определились с позицией.
4. std::execution — асинхронная модель C++
std::execution (Sender/Receiver) предоставляет унифицированный фреймворк для конкурентности и параллелизма. В отличие от std::async и сырых потоков, фреймворк обеспечивает структурированную конкурентность — код свободен от гонок данных по конструкции.
Саттер предупреждает: фича мощная (его компания Citadel Securities уже использует её в production), но пока её сложнее освоить, чем большинство фич C++ — не хватает документации и вспомогательных библиотек.
Быстрое внедрение
Саттер ожидает, что C++26 будет внедряться значительно быстрее, чем C++17/20/23. Две причины:
- Экстраординарный спрос. Рефлексия нужна всем, кто пишет сериализацию, ORM, конфигурации, логирование. Hardened stdlib даёт безопасность бесплатно. В отличие от нишевых фич C++20 (концепты, модули), здесь каждый C++-разработчик найдёт применение в своём коде
- Компиляторы уже готовы. На протяжении разработки C++26 и GCC, и Clang уже реализовали две трети фич. GCC уже имеет рефлексию и контракты в trunk — можно пробовать прямо сейчас
Как попробовать C++26 уже сейчас
Рефлексию и контракты можно попробовать в Compiler Explorer (godbolt.org), выбрав GCC trunk с флагом -std=c++26 -freflection. Hardened stdlib в libstdc++ активируется флагами:
C++29: ещё больше безопасности
На встрече приняли расписание C++29 (следующий трёхлетний цикл). Главный фокус — дальнейшее усиление безопасности памяти, в том числе профили безопасности Бьёрна Страуструпа.
Особенно примечателен доклад Оливера Ханта из Apple (P4158R0): WebKit захардинил более 4 миллионов строк кода подходом «подмножество надмножества» (аналогично Profiles). Результат: закрыты целые классы уязвимостей, политики предотвратили бы большинство исторических эксплойтов.
Следующие встречи комитета — в Брно (Чехия) в июне и в Бузиос (Рио-де-Жанейро, Бразилия) в ноябре, где начнётся работа над фичами C++29.
Частые вопросы
Когда выйдет C++26?
Техническая работа завершена 29 марта 2026 года. Документ отправлен на финальное голосование ISO (DIS). Публикация стандарта ожидается в ближайшие месяцы.
Какие компиляторы уже поддерживают C++26?
GCC уже имеет рефлексию и контракты в trunk. И GCC, и Clang реализовали около двух третей фич C++26 ещё до завершения стандарта. Попробовать можно в Compiler Explorer.
Нужно ли переписывать код для C++26?
Нет. Ключевые улучшения безопасности — устранение UB для неинициализированных переменных и hardened stdlib — работают при простой перекомпиляции существующего кода без изменений.
Что такое рефлексия в C++26?
Compile-time рефлексия позволяет коду C++ инспектировать собственные типы, функции и структуры на этапе компиляции и генерировать новый код на их основе. Это открывает возможности для автоматической сериализации, ORM, метапрограммирования без макросов и внешних кодогенераторов.
Чем подход C++26 к безопасности отличается от Rust?
Rust обеспечивает безопасность памяти через borrow checker на этапе компиляции. C++26 идёт эволюционным путём: hardened stdlib добавляет рантайм-проверки границ с минимальным оверхедом (0,3%), а устранение UB убирает целые классы уязвимостей при перекомпиляции. Подход C++ — обратная совместимость: миллиарды строк существующего кода становятся безопаснее без переписывания.
Выводы
C++26 — начало фундаментально новой эры: C++ становится безопаснее по умолчанию, оставаясь верным принципу zero-overhead. Рефлексия даёт инструмент, который заменит тонны макросов и кодогенераторов. Hardened stdlib уже доказала свою эффективность на сотнях миллионов строк кода в Google и Apple.
Подробный отчёт со встречи — в блоге Херба Саттера.