
C++26 在 ISO 国家机构投票中未获通过
来源标题:C++26 Disapproved
C++26 标准在 ISO 国家机构投票中被否决,这是 C++ 历史上首次 DIS 投票未通过。投票于 2026 年 10 月 23 日结束,历时十二周,选项为批准、否决或弃权。此前唯一未通过的 DIS 是 2006 年的 C++/CLI 语言规范,该项目最终被叫停。
以下正文由 AI 翻译自 Hacker News(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
2026年10月23日,不可思议的事情发生了。这本应只是一个例行程序:C++26 提交 ISO 各国家成员体(NB)投票。选项向来只有批准、否决或弃权,也允许提交意见。自1998年以来,这一流程一直安静而顺利地进行着。但2026年10月23日并非如此。经过十二周的投票期,结果出来了:否决!
我想在此说明,我是 C++ 标准化委员会的成员,与同事们共同代表德国的投票。ISO 规则还规定,某些投票属于 ISO 内部事务,投票结果——或结果的分布——不得公开。本文仅代表我个人观点。
据我所知,这是 C++ 历史上首次 DIS 投票未能通过。我查阅 ISO 系统时,只找到另一个未获批准的 DIS:2006年8月11日的 ISO/IEC DIS 26926 C++/CLI 语言规范。我的查询权限可能不足以查看全部内容,但所有 ISO 编程语言项目本应对我可见。ISO/IEC DIS 26926 的悲惨结局是:项目被终止。我之所以一开始就提这件事,是为了说明这次投票的分量。
下文我将使用一些 ISO 日常术语。在 https://isocpp.org/std/iso-iec-jtc1-procedures 上有 ISO 标准各阶段的概述。DIS 是倒数第二个阶段。概述中也写明,需要三分之二多数。这一多数未能达到。
否决的原因从各国家成员体(NB)提交的意见中看得很清楚:contracts。简而言之,若干 NB 认为这一特性尚未准备好发布。
接下来就复杂了。C++ 标准化委员会,又称 WG21,遵循 ISO 规则,但也有一些附加规则。其中之一是(或曾是):只要有新信息出现,就一定会听取意见。如果意见已被听取,而某个特性仍未按要求修改,当事人应尊重结果,接受许多人持不同意见。
然而,NB 层面的投票机构也可能由其他人员组成,或者 NB 当然可以自由地做出不同投票。
过去的做法是,NB 只有在出现新信息、或发现流程错误等类似问题时,才会投票反对某项标准。2026年10月23日,这一做法改变了。
这一特性早在愿望清单上待了很久。2019年在科隆,当时是为 C++20,我就在会场,那时 Contracts 以另一种形式被纳入标准。同一次会议上该特性又被从 C++20 中移除时,我也在场。此后成立了一个研究组,从2020年到大约2024年专门处理 Contracts 及其各方面问题。之后,研究组将其工作和提案提交给演化工作组(EWG),即语言扩展的核心机构。在那里,该议题又经过数次会议讨论,最终以多数票纳入 C++26。
下一步,WG21 于2026年3月对包含 Contracts 的 C++26 草案进行投票。这里同样获得了绝大多数支持,但并非没有反对票。
这就进入了下一阶段:DIS。在这一阶段,反对票足够多,未能达到三分之二多数。
最大的问题是:接下来怎么办?ISO 当然有相应流程,提供了多种选项:
所有这些可能性都意味着下一个 C++ 标准将被推迟。它是否还会叫 C++26 也悬而未决,但那是小得多的问题。
这四个选项的难处在于,它们都需要 WG21 内部的多数支持。然而,这个工作组已经投票决定将带有 Contracts 的 C++26 推进到下一投票阶段直至发布,而且是以超过所需三分之二的多数通过的。这一特性也不是凭空出现的;它是许多人多年工作和个人投入的成果。很难想象这个群体会轻易放弃自己已经多次获得认可的工作。对 Contracts 不满的群体也是如此。这个群体同样付出了努力,有些甚至做了替代实现。很难想象在这些群体于 DIS 投票中投了“反对”之后,结果会在不移除 Contracts 的情况下改变。
就连最后一个选项——移除 C++26——也需要 WG21 的多数支持。据我理解,这一步意味着退回 C++23,然后在没有任何改动的情况下直接推进到 C++29。这将影响更多人的工作。届时 WG21 的任务将是把已经成功纳入 C++26 的特性重新纳入 C++29。由于这只能通过至少有一人主张并支持的提案来完成,如果该人缺乏动力或时间,特性就可能被遗漏。
当然,只有真正走上某条路径,才能确定投票结果。
遗憾的是,前路目前充满不确定性。也许这也能解释为什么 ISO/IEC DIS 26926 标志着那项活动的终结。前进需要共识,而共识始终需要信任。不幸的是,信任刚刚被动摇了。
下一个 C++ 标准,乃至 C++ 的未来,目前陷入僵局。
好消息是,下一次会议将于11月16日举行,就在几天之后。首要任务将是打破僵局。这很可能也会对 C++29 产生影响;事实上,目前没有理由继续推进该项目。
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。