C++26標準は、「Contracts」の導入を阻止する形式的な投票に失敗したことで、顕著な行き詰まりに直面しました。この展開は、標準化プロセスの主要な人物らによる反対の影響を受けたと報告されており、その中にはこの機能はまだリリース準備が整っていないことを示唆する論文も含まれていました。この提案の拒否は、現在のC++言語の状態を示す指標となります。ISOの各国委員会(NBs)は、言語の肥大化や不明瞭さを招く可能性のある新機能の導入に対して、ますます慎重な姿勢をとっています。
技術的に見れば、C++ Contractsはソフトウェアの信頼性を向上させるために設計された構造化された実行時アサーションです。これらは、テンプレートパラメータを制約するために使用されるコンパイル時の「型の型」であるC++20 Conceptsとは異なります。どちらもコードの安全性を向上させることを目的としていますが、Contractsはコンパイル中にチェックできない条件を検証するために実行時に動作します。しかし、一部の批評家はContractsの実用的な利点は最小限であると主張しています。彼らは、すでに高信頼性のコードを書いている開発者にとって、この機能はすでに`constexpr`やC++20 Conceptsを使用して達成できることと大部分が重複しており、標準的な信頼性慣行に従っている人々にとってはほとんど新しい有用性を提供しないと論じています。
Contractsの具体的な仕組みを超えて、この否認はC++自体の進化に関するより広範な緊張を反映しています。コミュニティの一部のメンバーは、言語が新しい機能の重みで「屈服」しており、「誤った動作」や`std::filesystem`の複雑さといった既存の問題を洗練させることの方が有益であると主張しています。開発者の体験を大幅に簡素化することなく複雑さを増大させる可能性のある新機能の追加よりも、メモリ安全性のような根本的な改善を優先すべきという呼びかけが高まっています。この行き詰まりは、C++標準委員会にとっての重大な課題を浮き彫りにしています。それは、現代的な信頼性ツールへの要望と、数十年の開発を経てますます複雑になった言語を管理する必要性とのバランスをいかに取るかという課題です。
