Hacker News 中文摘要

RSS订阅

Carbon语言:C++的实验性继任者 -- Carbon Language: An experimental successor to C++

文章摘要

Carbon Language 是一个实验性的 C++ 后继语言,旨在提供与 C++ 相当的性能,并通过 LLVM 实现低级别的位和地址访问。它能够与现有的 C++ 代码互操作,支持继承和模板,并具备快速、可扩展的构建系统。Carbon 语言设计现代且易于学习,尤其适合有 C++ 经验的开发者,同时提供基于工具的简单升级路径。目前,Carbon 尚未准备好正式使用。

文章总结

Carbon语言:C++的实验性继任者

Carbon语言是一个旨在成为C++继任者的实验性编程语言,专注于性能关键型软件的开发。尽管C++在性能关键型软件领域仍占据主导地位,但其技术债务和演进过程的复杂性使得逐步改进变得极为困难。Carbon语言的设计目标是通过与C++的互操作性,为现有C++代码库和开发者提供大规模迁移和采用的路径。

主要特点: 1. 高性能与C++互操作性:Carbon通过LLVM实现与C++相匹配的性能,并提供对位和地址的低级访问。它能够与现有的C++代码无缝互操作,支持从继承到模板的各种功能。 2. 现代化与演进:Carbon语言易于学习,尤其适合有C++背景的开发者。它提供了基于工具的版本升级路径,并致力于构建更安全的基础设施,逐步实现内存安全的子集。 3. 开放的社区:Carbon拥有一个包容且友好的开源社区,提供编译器、库、文档、工具和包管理器等全面的支持。

设计目标: Carbon语言的设计目标包括支持性能关键型软件、语言演进、易读易写的代码、实用的安全机制、快速且可扩展的开发,以及与现有C++代码的互操作性和迁移。Carbon明确表示不会追求稳定的应用二进制接口(ABI)或完美的前后兼容性。

项目现状: 目前,Carbon语言仍处于实验阶段,团队正在开发编译器和链接器工具链。开发者可以通过compiler-explorer.com尝试当前版本。Carbon的核心设计包括泛型、类类型、继承、操作符重载、词法和语法结构等,工具链的开发是当前的重点。

与C++的互操作性: Carbon语言的设计使得C++开发者能够轻松上手,其语法结构与C++相似,且支持双向互操作。开发者可以在不增加开销的情况下在C++中调用Carbon代码,反之亦然。Carbon还计划提供迁移工具,帮助将现有的C++代码库转换为Carbon代码。

泛型系统: Carbon提供了一个现代化的泛型系统,支持类型检查和模板,确保与C++的无缝互操作。泛型系统提供了类型检查、自动类型擦除和动态分派等优势,同时支持特化,以满足性能关键型应用的需求。

内存安全: 内存安全是Carbon语言的重点之一,团队计划通过改进未初始化状态的跟踪、增强初始化检查、支持动态边界检查等方式,逐步实现内存安全的子集。

如何开始: 开发者可以通过carbon.compiler-explorer.com在浏览器中尝试Carbon语言。目前,Carbon工具链仅提供实验性的夜间版本,支持有限的平台。开发者可以下载最新的夜间版本并尝试编译和链接简单的Carbon程序。

社区参与: Carbon欢迎开发者加入社区,参与语言设计和工具链的开发。社区讨论主要在Discord上进行,开发者可以通过GitHub关注项目的最新动态。

总结: Carbon语言旨在通过现代化的设计和与C++的互操作性,为性能关键型软件提供一个新的选择。尽管项目仍处于早期阶段,但其设计目标和社区支持使其成为一个值得关注的项目。

评论总结

主要观点总结:

  1. Carbon的长期规划与安全性问题

    • 评论1指出Carbon的长期规划(2025年路线图)尚未完全解决安全性问题,预计到2026年才能完成0.1版本。
      引用
      "a full safety story hasn't been quite figured out (TBD end 2025), and 0.1 is TBD end 2026."
      "如果不能在设计阶段解决安全性问题,就永远无法解决。"
    • 评论5批评Carbon未在设计阶段解决安全性问题,认为这可能导致失败。
      引用
      "If they can't get safety right at the design stage, they'll never get it right."
  2. Carbon的语法与设计选择

    • 评论2对Carbon使用“fn”作为关键字表示不满,建议使用“func”或其他更直观的关键字。
      引用
      "what can be done to use 'func' instead of 'fn' as a keyword?"
      "那个全辅音的关键字总是让我觉得像在阅读匈牙利符号。"
    • 评论3和评论4讨论了Carbon的语法设计,特别是使用方括号和圆括号的不一致性。
      引用
      "square brackets for generics and type annotations, parens for indexing, etc."
      "他们有时使用[]来指定类型,有时使用(),这看起来不太一致。"
  3. Carbon的目标与独特性

    • 评论7强调Carbon的主要目标是帮助大型C++项目逐步迁移到更现代化的语言,而不是完全取代C++。
      引用
      "Carbon exists so that it's possible to migrate a large C++ code base, like Chrome, from C++ to something saner, incrementally."
      "Carbon的独特之处在于它设计用于在C++和Carbon代码混合的代码库中使用,并提供工具将尽可能多的C++代码转换为Carbon。"
    • 评论11和评论12质疑Carbon的必要性,认为其他语言(如Rust或D)也可以通过类似的方式实现C++的迁移。
      引用
      "I'm not sure Carbon is necessary to achieve such a conversion."
      "我想知道他们是否可以将这些努力用于某种Rust到C++的桥梁?"
  4. Carbon的社区与推广

    • 评论1担心Carbon过于依赖C++社区,可能错失更广泛的编程语言理论社区的视角。
      引用
      "I worry that they won't benefit from the broader perspectives that'll help it avoid well-known warts elsewhere."
    • 评论9认为Carbon的语法设计可能无法吸引C++开发者,因为其外观与C++不符。
      引用
      "superficial details matter - people that stayed on C++ instead of transitioning to flashy new ones have type-before-name as part of programming identity."
  5. Carbon与其他语言的比较

    • 评论5和评论6提到D和Zig等语言在类似领域的存在,认为它们可能是更好的选择。
      引用
      "We already have D and Zig in this space."
      "Zig seems like a better approach."
    • 评论7指出Carbon的独特之处在于其增量迁移的设计,与其他语言不同。
      引用
      "That's what makes Carbon different from any other language: D, Zig, Nim, Rust etc."
  6. Carbon的起源与未来

    • 评论10质疑是否所有主要编程语言都将来自Web 2.0时代的公司。
      引用
      "Are all major programming languages going to come from corporations in web 2.0?"
    • 评论8提供了与Carbon相关的多个讨论链接,显示了对该语言的持续关注。
      引用
      "Carbon is not a programming language (sort of)"
      "Ask HN: How is the Carbon language going?"

总结:

评论中对Carbon的长期规划、语法设计、安全性、目标独特性以及与其他语言的比较展开了广泛讨论。支持者认为Carbon为大型C++项目提供了增量迁移的解决方案,而批评者则质疑其必要性和设计选择,认为其他语言可能更具优势。