ISO C++委员会(WG21)已批准C++26标准,委员会成员赫布·萨特称其为自C++11以来最引人注目的版本,其中包含合约功能,尽管C++发明者比雅尼·斯特劳斯特鲁普等人对此功能表示反对。
委员会在伦敦克罗伊登召开会议,并于3月28日批准了该标准。根据萨特的报告,下一阶段将准备最终文档并提交国际审批。C++通常每三年发布一个新标准,委员会还通过了C++29的时间表,相关工作已经开始。
萨特表示,合约是C++26的主要功能之一。合约是在函数声明中设置前置条件和后置条件,以及在函数内添加断言语句的一种方式。该功能旨在帮助使C++代码更加安全可靠。
描述C++26合约的论文指出,"在试图为C++添加合约功能的背后,有着漫长而传奇的历史。"合约也是C++20工作草案的一部分,但WG21在2019年因提议设计的重大变更而将其移除。
C++26提案将自己描述为为C++26制作最小可行产品计划的巅峰之作。仍存在一些不足,例如不支持虚函数上的合约,但这预计会在未来版本中得到解决。
萨特是合约的支持者,在科罗拉多州奥罗拉举行的CppCon 2025上就"C++26合约的乐趣"发表演讲。
斯特劳斯特鲁普并不认同这一观点,他在去年关于C++26合约陷阱的演讲中表示:"据称这是一个最小可行产品。但它既不最小,也不可行。"
斯特劳斯特鲁普说他将建议不要在C++中使用合约。"这以非常晦涩的方式增加了复杂性。它根据代码所在位置改变代码的含义……我非常担心这种复杂性,担心我们是否能够正确使用它。"
萨特指出,一些"聪明且受人尊敬的ISO C++委员会成员对合约持续存在技术担忧。"正因如此,最终确定C++26标准的投票并非一致通过,有114票赞成,12票反对,3票弃权。然而,萨特表示"ISO C++委员会仍然需要合约,因此合约保留在C++26中。"
C++26还包括编译时反射,允许在没有任何运行时开销的情况下检查和生成代码。这与Java或C#中在运行时工作的反射不同。萨特称其为"C++有史以来表达高效抽象的最强大新引擎。"
萨特还谈到了C++在内存安全方面的改进,例如为未初始化读取定义错误行为。在C++中,未定义行为(UB)是错误和漏洞的主要原因,因此委员会的目标是减少它,这就是这种努力的一个例子。
C++26标准库得到了加固,萨特表示,在谷歌实施时,它修复了一千多个错误,并"将生产车队的段错误率降低了30%。"
另一个重要功能是std::execution,它为异步执行提供了一个框架,不过萨特警告说,由于文档不完善和缺乏完整的库支持,它比大多数C++功能"更难采用"。
Q&A
Q1:C++26标准中的合约功能是什么?
A:合约是在函数声明中设置前置条件和后置条件,以及在函数内添加断言语句的一种方式。该功能旨在帮助使C++代码更加安全可靠。不过目前还存在一些不足,例如不支持虚函数上的合约。
Q2:为什么C++发明者反对合约功能?
A:比雅尼·斯特劳斯特鲁普认为合约功能"既不最小,也不可行",会以非常晦涩的方式增加复杂性,还会根据代码所在位置改变代码的含义。他担心这种复杂性以及开发者是否能够正确使用它。
Q3:C++26还有哪些重要的新功能?
A:除了合约功能,C++26还包括编译时反射,允许在没有运行时开销的情况下检查和生成代码;改进的内存安全性,如为未初始化读取定义错误行为;以及std::execution框架,为异步执行提供支持。
好文章,需要你的鼓励
英国国家医疗服务(NHS)正将无人机纳入常规医疗物流体系。自今年2月起,无人机每天在雷恩斯公园和圣乔治医院之间运送血液等诊断样本,飞行仅需3分钟,比公路运输快约85%,且碳排放减少高达98%。目前已有逾2000名患者受益。NHS计划将该服务扩展至圣赫利尔、克罗伊登等多家医院,最终惠及约180万名患者。该网络由英国医疗初创公司Apian与谷歌旗下Wing合作运营。
AgentLens是Explyt公司联合俄罗斯学术机构开发的AI编程助手评测基准,通过分析完整人机交互轨迹而非仅看最终结果,从五个维度评估代码智能体的真实表现。
边缘AI计算厂商Aetina宣布,将在其DeviceEdge AIE-KT风冷系列和新款AIE-PT无风扇平台上支持英伟达全新Jetson T3000和T2000模块。T3000基于Blackwell GPU,最高提供865 FP4 TFLOPS算力,功耗70W;T2000则提供400 FP4 TFLOPS,面向视觉AI代理和自主移动机器人等场景。两款模块预计2027年第一季度上市,支持Nemotron、Cosmos 3等英伟达AI软件生态。
韩国梨花女子大学提出Splash框架,通过识别AI模型中的"休眠参数"并只在其中训练触觉能力,让小型多模态AI在学会感知材质触感的同时,完整保留原有视觉语言推理能力。