понедельник, 9 ноября 2026 г.

[prog.c++] Герб Саттер написал про ситуацию с C++26

На Reddit-е увидел ссылку на текст от Герба Саттера по поводу проблем с C++26: When a language’s creator and its owners strongly disagree: C++26 post-DIS, historical experience, and paths forward

Попробовал поверхностно ознакомиться, но что-то не понял о чем это все и к чему это все. Возможно, не хватает знания английского.

Сложилось впечатление, что речь идет о формальной стороне стандартизации языка. Типа вот у нас такие устоявшиеся практики, вот такая вот фигня приключилась, вот что мы можем сделать в рамках формальных процедур. Что вызывает у меня пригорание по двум причинам.

Во-первых, может быть пора уже как-то признать наличие совершенно разных C++ и таки подумать о том, что можно с этим сделать? Я о том, что есть "С++, описанный в стандарте", есть "C++, реализованный в самых свежих компиляторах" и еще есть "C++, доступный тебе в рамках конкретного проекта" (часть фич недоступна из-за их отсутствия в конкретных компиляторах на конкретных платформах, часть недоступна из-за принятых в проекте ограничений).

Как по мне, так это ненормально. И комитет таки должен признать, что в таком гигантском разрыве есть только и его вина, и что с этим самым разрывом комитету нужно что-то делать.

Каким может быть это "что-то" я уже описывал в разных местах. Например, принимать новые фичи в виде Technical Specifications, а компоновать конкретный стандарт из уже готовых TS-ов и включать в стандарт только те TS-ы, которые полностью реализованы в большой тройке компиляторов.

Либо вообще отказаться от ISO стандартизации и перестать страдать херней с тем, чтобы успеть запихнуть абы что в стандарт (на который на практике приходится чихать) на границе трехлетнего слота.

Во-вторых, как мне кажется, случившееся является вполне себе конкретным намеком на то, что писатели стандарта -- это активное меньшинство живущее в своем изолированном мирке, где все зашибись (т.е. "C++ из стандарта" и есть то, что они могут использовать каждый день на работе). И если это меньшинство включает в стандарт какую-то фичу, которая нравится этому самому меньшинству, то это не значит, что фича будет вызывать восторг у оставшегося молчаливого большинства.

Ну, например, приняли в C++20 модули. Кому-то же они понравились, раз приняли. А всем остальным приходится теперь ждать пока это "изобретение" наконец-то полноценно поддержат везде. Чтобы затем изучать очередную странную и не очевидную херню, добавленную зачем-то в уже работающий язык, ломающую старые самодельные системы сборок и разделяющую сообщество на "до и после".

Или, скажем, короутины в C++20. Которые, как мне кажется, слегка недоделанные. И без сколько-нибудь серьезной поддержки на уровне готовых вспомогательных классов в стандартной библиотеке.

Теперь вот очень и очень странные контракты. Которые, как по мне, без поддержки контрактов для виртуальных методов не должны были добавляться в язык в принципе. А с текущей процедурой работы над стандартом вообще получается маразм: скоуп C++26 закрывается в 2026-ом году с контрактами без поддержки виртуальных методов, и тут же, в же 2026-ом году в C++29 включается пропозал, который эту самую поддержку виртуальных методов в контракты добавляет.

И что это такое: диверсия или, что гораздо хуже, глупость формальное следование бюрократическим процедурам стандартизации? И это не говоря про то, что сама эта поддержка контрактов для виртуальных методов предлагается несколько странной. Мягко говоря.

Т.е. у меня складывается впечатление, что сформировалась некая каста (извините, не подбирается более удачное название) людей, заседающих в комитете и определяющих куда и как язык движется. Эти люди научились находить консенсус между собой. В результате чего выходят стандарты с:

  • модулями, которые не могут реализовать на протяжении многих лет;
  • недоделанными короутинами;
  • deducing this, который не совместим с экспортом классов из DLL (ведь стандарт вообще ни сном ни духом про существование DLL и SO);
  • рефлексией с таким синтаксисом, после которого язык C++ начинает уверенно побеждать всех конкурентов в борьбе за звание языка с самыми уродскими синтаксическими конструкциями...

И вроде бы все было хорошо, комитет заседает, стандарты выходят. Но тут БАХ! И кто-то эту замечательную отлаженную схему по строительству воздушных замков взял и обломал.

Вот жеж уроды.