C++ 演进提案:时代机制、务实标准与异常重构
C++ 开发者常常面对三种语言版本:标准文档中描述却不可用的那个;前沿编译器中的实验版;以及广泛使用的实际版本。这种理论与实践的鸿沟亟需修复。提案是:特性一旦获批,就移入技术规范供编译器实现。只有在至少两个主流编译器支持后,才正式纳入完整标准。
这种方式能在实现过程中发现问题,允许调整而不必修改标准,并确保标准发布时特性已在编译器中可用。实验者能在 GCC 或 Clang 落地后立即访问新特性。
时代机制,摒弃历史包袱
在 .cpp 文件顶部引入“时代”(eras)声明,即可指定该模块的 C++ 版本。这让我们能清除几十年来积累的糟粕:自动数值类型转换、有符号/无符号比较陷阱、隐式数组转指针衰减,以及多种初始化语法。
主要优势:
- 在一个项目中混用不同时代的文件,无需重写旧代码。
- 将现代代码转译为旧标准,保持 ABI 兼容性。
- 演进更优的 C++,不受向后兼容 C 的拖累。
时代机制防止语言因历史包袱而臃肿成怪兽。
重塑 C++ 异常处理
C++ 中的异常是 80 年代的失败品:开销大、不可预测,许多项目干脆禁用。像 std::expected 这样的替代方案无法解决可靠性问题。我们需要零成本异常与时代机制整合:新异常仅限于近期时代文件。
融合新旧代码会带来集成难题,但现状已难以为继。社区在“支持异常”和“不支持”两派间分裂,阻碍进步。
核心要点
- 标准应规范已实现的特性,而非通过技术规范超前奔跑。
- 时代机制允许混用旧代码与新代码,同时清除新代码的历史错误。
- 新零成本异常按时代 rollout,降低开销、提升可预测性。
- 没有这些变革,C++ 恐重蹈 PL/I 覆辙:复杂度爆炸却无实际收益。
- 委员会应优先战略机制,而非战术细节。
结语与展望
C++ 要再繁荣 40 年,需要大胆变革:务实标准、时代演进,以及异常重启。这将统一生态、简化新代码,并保留遗留系统。委员会须从宣言转向记录现实实践,让语言适应未来而不被过去拖累。
— Editorial Team
暂无评论。