C++26 标准在一次失败的程序性投票后遇到了显著的僵局,该投票阻止了‘Contracts’功能的纳入。据报道,这一进展受到标准流程中关键人物反对的影响,其中一份论文甚至暗示该功能尚未准备好发布。这一提案的被拒绝是当前 C++ 语言状态的一个风向标,ISO 国家机构(NBs)对于引入可能导致语言臃肿或缺乏清晰度的新功能正变得越来越谨慎。
从技术上讲,C++ Contracts 被设计为旨在提高软件可靠性的结构化运行时断言。它们与 C++20 Concepts 不同,后者是用于约束模板参数的编译时“类型的类型”。虽然两者都旨在提高代码安全性,但 Contracts 在运行时操作,用于验证在编译期间无法检查的条件。然而,一些批评者认为 Contracts 的实际收益微乎其微。他们认为,对于已经编写高可靠性代码的开发人员来说,该功能在很大程度上与使用 `constexpr` 和 C++20 Concepts 已经可以实现的功能重叠,对于那些已经遵循标准可靠性惯例的开发者来说,几乎不提供新的实用价值。
除了 Contracts 的具体机制外,此次否决还反映了关于 C++ 本身演变的更广泛紧张关系。社区中的一些成员认为,该语言在不断增加的新功能压力下正处于“崩溃”边缘,如果能专注于完善现有问题(如“错误行为”或 `std::filesystem` 的复杂性)将会更好。人们日益呼吁优先考虑基础改进——例如内存安全——而不是增加可能增加复杂性而未能显著简化开发体验的新功能。这一僵局凸显了 C++ 标准委员会面临的一个重大挑战:在追求现代可靠性工具的渴望与管理一个在数十年开发过程中变得日益复杂的语言的需求之间取得平衡。
