Проект стандарта C++26 провалил голосование ISO из-за контрактов

Проект стандарта C++26 провалил голосование ISO из-за контрактов

Андреас Фертиг (Andreas Fertig), участник комитета по стандартизации C++ (WG21), который вместе с коллегами представляет голос Германии, пишет в своём блоге: 23 октября 2026 года «случилось немыслимое». Проект C++26 выносили на голосование национальных органов ISO (NB) на стадии DIS, и это должно было быть формальностью. Варианты ответа, «за», «против» или «воздержался», допускаются и комментарии. С 1998 года процедура, по словам автора, проходила тихо и гладко. Но после двенадцатинедельного голосования итог таков: проект не одобрен, потому что не набралось необходимого большинства в две трети.

Автор оговаривается: правила ISO предписывают считать некоторые голосования внутренними, их результаты и разбивку по голосам публиковать нельзя, а статья отражает его личное мнение. Насколько ему известно, это первый случай в истории C++, когда голосование DIS провалилось. В системе ISO автор нашёл лишь один другой неодобренный проект DIS, спецификацию языка C++/CLI (ISO/IEC DIS 26926) от 11 августа 2006 года; тот проект был остановлен. Автор допускает, что его прав поиска может не хватать, чтобы увидеть всё.

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

История контрактов такова. Автор присутствовал в Кёльне в 2019 году, когда контракты (тогда в другом виде) включили в C++20, и на том же заседании их из C++20 убрали. После этого с 2020 примерно по 2024 год работала исследовательская группа, затем её наработки передали в Evolution Working Group (EWG), центральный орган по расширениям языка. Там тему обсуждали несколько заседаний, после чего большинством голосов включили контракты в C++26. В марте 2026 года WG21 проголосовал за проект C++26 с контрактами, снова большинством, хотя и не без голосов против.

Что дальше. У ISO есть четыре варианта: представить доработанный проект на новое голосование DIS; передать доработанный проект комитету (стадия CD); опубликовать доработанный проект как техническую спецификацию; закрыть проект. Любой путь означает задержку следующего стандарта C++; будет ли он по-прежнему называться C++26, вопрос открытый, но, по словам автора, куда менее важный. Сложность в том, что для каждого варианта нужно большинство внутри WG21, а он ранее проголосовал за продвижение C++26 с контрактами с запасом сверх двух третей. Группа, недовольная контрактами, тоже вложила силы, местами даже в альтернативные реализации. Автору трудно представить, что результат изменится без удаления контрактов. Даже последний вариант, отказ от C++26, требует большинства в WG21; как понимает автор, это означало бы откат к C++23 и переход к C++29 без единого изменения, а уже включённые в C++26 функции пришлось бы заново вносить в C++29 отдельными предложениями, и без заинтересованного автора они могли бы выпасть.

По оценке автора, следующий стандарт C++, а с ним и будущее языка, зашли в тупик. Ближайшее заседание WG21 пройдёт 16 ноября, и главной задачей станет выход из тупика. Автор считает, что это, скорее всего, отразится и на C++29: сейчас нет причин продолжать работу над ним.

В разделе с личным мнением автор называет отклонённый проект DIS «грандиозной катастрофой», сочувствует всему сообществу C++ и пишет, что голосом «против» была поколеблена устоявшаяся система, основанная на доверии и уважительном сотрудничестве. Любой стандарт ISO, набор компромиссов, где каждый иногда проигрывает, а иногда выигрывает; при голосовании DIS проигравшие, по его словам, не захотели принять проигрыш. Главный вопрос дальнейшего движения, сможет ли группа восстановить доверие.

Ключевые факты

  • 23 октября 2026 года, после двенадцатинедельного голосования, национальные органы ISO не одобрили проект C++26 на стадии DIS: необходимое большинство в две трети не набрано.
  • По словам автора, участника комитета WG21, это первый провал голосования DIS в истории C++; единственный другой неодобренный DIS, который он нашёл, C++/CLI (ISO/IEC DIS 26926, 2006), проект был остановлен.
  • Причина отказа, по оценке автора, ясна из комментариев национальных органов: часть из них считает контракты не готовыми к выпуску.
  • У ISO четыре пути: новое голосование DIS, возврат комитету (стадия CD), публикация как технической спецификации или закрытие проекта; все они задерживают следующий стандарт, и каждый требует большинства в WG21.
  • Ближайшее заседание WG21, 16 ноября; главная задача, выйти из тупика. Это личное мнение автора, не официальная позиция WG21, ISO или германского национального органа.

Почему это важно

Если верить автору, провал голосования DIS по стандарту C++ случился впервые за всю историю языка: с 1998 года процедура, по его словам, проходила гладко. Речь идёт о выпуске очередной версии одного из самых распространённых языков программирования, и теперь неясно, когда выйдет следующий стандарт и будет ли он называться C++26. Автор описывает ситуацию как тупик, в котором под вопросом не только C++26, но и работа над C++29.

Кому это важно

Прежде всего тем, кто следит за развитием C++ и планирует переход на новые стандарты, а также участникам комитета и национальных органов по стандартизации. Любопытно это и всем, кого интересует, как принимаются международные стандарты и как устроен процесс ISO. Прямой связи с ИИ-индустрией в источнике нет.

Как это применить

Источник практических рекомендаций для разработчиков не даёт. Разумно следить за итогами заседания WG21 16 ноября: именно там, по словам автора, будут искать выход из тупика. Что решат ISO и WG21, сроки и итоговое название стандарта в источнике не названы.

Можно ли доверять

Источник, личный блог участника комитета по стандартизации C++, который вместе с коллегами представляет голос Германии. Это взгляд одного человека, а не официальное заявление WG21, ISO или германского национального органа, и автор сам оговаривает, что пишет личное мнение. Разбивка голосов и список проголосовавших против не публиковались: ISO считает такие голосования внутренними. Оценки вроде «катастрофа» и «проигравшие не приняли проигрыш», авторские суждения, а не установленные факты. Утверждение «первый случай в истории» основано на поиске автора в системе ISO, права которого могут быть ограничены.

Риски и подводные камни

Каждый из четырёх вариантов ISO требует большинства в WG21, который ранее одобрил C++26 с контрактами с запасом сверх двух третей, а недовольные контрактами тоже вложили силы в свои решения. Автору трудно представить смену результата без удаления контрактов. Откат к C++23 с переходом к C++29 без изменений, по его пониманию, затронул бы работу ещё большего числа людей, а перенос уже принятых функций в C++29 зависел бы от энтузиазма отдельных авторов предложений. Автор также отмечает, что пошатнулось доверие, необходимое для консенсуса. Источник не описывает технического содержания контрактов и их конкретных слабых мест, поэтому судить по нему о существе спора нельзя.

«Могу лишь сказать, что считаю это грандиозной катастрофой и сочувствую всему сообществу C++.»

— Андреас Фертиг, участник комитета по стандартизации C++, из личного блога