碳不是一种编程语言(某种程度上)

  • Carbon 介绍:是 Google 的实验性开源“C++ 继任语言”,像 Objective-C/Swift、Java/Kotlin、C/C++等语言有相似之处,还常与 Herb Sutter 的 Cppfront 和 Sean Baxter 的 Circle 及 Rust 一起被提及,目前处于实验阶段未达到 0.1 版本,开发者很透明。
  • Carbon 的目标:主要目标包括近无缝互操作性以及对原语言的显著改进,核心是通过自动化工具实现现有 C++代码到现代、标注良好语言的大规模长期迁移,以解决 C++逐渐僵化难以现代化的问题,如 ABI、工具多但无标准、向后兼容等,这是一个长期项目,并非适用于所有人。
  • 历史背景:Google 因与 C++标准委员会(WG21)的分歧(如对 C++未来方向、复杂性、性能等的看法不同,尝试多年后放弃)而开发 Carbon,当前内存安全热潮虽重要但不是冲突起点,Fixing certain issues 需不兼容更改且跨 C++生态协调几乎不可能。
  • 迁移与语言演化:Carbon 以自动化代码迁移为目标,远离“不能破坏现有代码所以以奇怪方式添加新特性”的语言演化方式,借助自动化工具和清晰的语言演化过程实现,如效仿 Rust 的版本更新和自动化迁移工具,而 C++难以达到此状态,Carbon 旨在为现有 C++代码提供通往现代演化的路径,不依赖标准委员会。
  • 与 Cpp2 的区别:Cpp2 利用现有 C++语言,与 C++深度内在链接,复用 C++标准库问题,维护 C++生态,不能低于 C++,无法大幅减少 C++技术债务;Carbon 则尽量减少对 C++的依赖,从根本上重写语言,支持模板和检查型泛型,可进行更深入的语言更改,如计划从异常转向将错误视为值。
  • 技术可行性:Carbon 可行性存疑但可能可行,因其不追求不可能(工具辅助迁移惯用法代码),能利用底层工具(如 Clang 和 LLVM 处理 C++模板和函数调用),已证明所选抽象能支持一些“有趣”的 C++特性,如在测试方面可将 C++转为 Carbon 并运行旧测试套件,在统一 C++特性方面通过构建在“接口”上实现成员访问指针等复杂语义的统一。
  • 治理方面:Carbon 是允许现代 C++代码库演化的项目,目标是将现有 C++技术债务迁移到现代语言并能控制其治理,这引发对 Google 意图的担忧,如控制 C++、 favor 自身风格等,但 Carbon 是 Apache 许可的开源项目,欢迎贡献,有明确的社区驱动承诺,对于其长期成功,企业用户的信任和公共社区的建立很重要,这与 Go 不同,Go 更简单且面向新领域项目。
  • 结论:构建 C++继任语言前景看似注定失败,C++复杂难改,但 Carbon 优先级正确,理解 C++演化问题关键,需大量投资和重新思考,这对初学者、注重代码质量等的人是问题,对委员会和编译器贡献者也有影响,虽然有人不认同,但 C++短期内不会消失,看到有人尝试解决此问题很棒,若感兴趣可观看 Carbon 相关讲座。
阅读 8
0 条评论