C++ 杀手(不是你,Rust)

C++ 的演进、ABI 与标准化

  • 多条评论认为,C++ 委员会受到强烈的“不要破坏 ABI”立场的限制,这阻碍了性能和库方面的改进(例如 std 类型、intmax_t 的变更)。
  • 也有人指出标准并未定义 ABI,但承认委员会已明确投票决定避免 ABI 破坏,而且提案经常因此被否决。
  • 这种保守态度与实际的破坏性变更形成对比,例如 C++20 中 UTF‑8 字面量切换为 char8_t,迫使编译器加入可关闭的兼容开关。

安全性、“牵绳”语言与内存管理

  • 一派观点认为,Rust、Go 等新语言的价值正是在于它们约束不安全行为并降低认知负担和错误类别,尤其是内存安全与安全性问题。
  • 批评者认为这些语言对开发者约束过多,降低表达能力,并代表一种“威权式”的静态保证;支持者回应说,它们只是对普遍认同的良好实践进行自动化强制执行,并且提供了明确的逃生口。
  • 讨论还涉及现代 C++ 是否已经通过 RAII 和智能指针减少了手动内存管理;有人认为,与 Rust 的默认安全模型相比,它仍然保留了太多容易踩坑的地方。

简单性 vs 表达能力

  • 有人断言更简单的语言本质上更好;也有人反驳说,“简单”本身定义不清,往往只是把负担转移给程序员。
  • 讨论中举出 C、Lisp、Python、Rust、C++ 等例子,来说明“表达能力更弱”常被误当作“更简单”,而隐藏的复杂性(UB、隐式规则)让 C 看起来并没有那么简单。

C++ 的角色与长期前景

  • 多条评论把 C++ 视为裸机、嵌入式和高性能领域的“最后手段”语言,而更高层语言则接管了 GUI、桌面应用和云系统。
  • 有人预计 Rust 以及其他小众系统语言会在性能关键领域逐步蚕食 C++,但也认为由于既有代码库和生态系统的存在,C/C++ 在未来几十年仍会根深蒂固。

未定义行为与细枝末节

  • 讨论涉及未初始化成员、整数提升规则(uint16_t 算术示例),以及在 C/C++ 中引入 UB 有多么容易。
  • 参与者对于掌握这些细枝末节究竟是能带来精确控制的自豪点,还是会损害整体软件质量的不必要负担,意见不一。

文章相关技术注记与旁支话题

  • 评论者挑剔文中的示例(错误的 uint16_t 表达式、低效的正弦多项式),并建议已知的最优技术(Horner/Estrin)。
  • 对工具和项目的简短提及(Numba、Julia、Spiral、ForwardCom、Go memory ballast)展示了人们对领域特定优化和硬件感知代码生成的更广泛兴趣。