快速且可与 C++ 一起使用
现代且不断发展
欢迎开源社区
C++ 仍然是性能关键型软件的主要编程语言,拥有大量且不断增长的代码库和投资。然而,它正在努力改进和满足上述开发人员的需求,这在很大程度上是由于积累了数十年的技术债务。由于技术债务本身和演化过程中的挑战,逐步改进 C++ 非常困难。解决这些问题的最佳方法是避免直接继承 C 或 C++ 的传统,而是从坚实的语言基础开始,如 现代泛型系统、模块化代码组织和一致、简单的语法。
现有的现代语言已经提供了出色的开发人员体验:Go、Swift、Kotlin、Rust 等等。可以使用其中一种现有语言的开发人员应该. 不幸的是,这些语言的设计对 C++ 的采用和迁移存在重大障碍。这些障碍的范围从软件惯用设计的变化到性能开销。
Carbon 从根本上说是一种后继语言方法,而不是逐步发展 C++ 的尝试。它是围绕与 C++ 的互操作性以及现有 C++ 代码库和开发人员的大规模采用和迁移而设计的。C++ 的后继语言需要:
通过这种方法,我们可以在 C++ 现有的生态系统之上构建,并带来现有的投资、代码库和开发人员群体。有一些语言在其他生态系统中遵循了这个模型,Carbon 旨在填补 C++ 的类似角色:
我们正在设计 Carbon 以支持:
虽然许多语言共享这些目标的子集,但 Carbon 的不同之处在于它们的组合。
我们对 Carbon 也有明确的非目标,特别是包括:
我们的详细目标文档充实了这些想法,并为我们对 Carbon 项目和语言的目标提供了更深入的了解。
Carbon目前是一个实验项目。我们希望更好地了解我们是否可以构建一种符合我们后继语言标准的语言,以及由此产生的语言是否可以在更大的 C++ 行业和社区中引起足够的兴趣。
目前,我们已经充实了 Carbon 项目和语言的几个核心方面:
我们目前专注于从 C++ 社区获得更广泛的反馈和参与, 完成 0.1 语言设计,并 完成该设计的 Carbon Explorer 实现。除此之外,我们计划优先考虑 C++ 互操作性和实现 0.1 语言的现实工具链,并可用于更详细地评估 Carbon。
您可以查看我们的完整路线图了解更多详情。
如果您已经是 C++ 开发人员,Carbon 应该有一个温和的学习曲线。它是由一组一致的语言结构构建而成的,这些结构应该让人感觉熟悉并且易于阅读和理解。
像这样的 C++ 代码:
对应于这个碳代码:
您可以从 C++ 调用 Carbon 而无需开销,反之亦然。这意味着您可以在应用程序中将单个 C++ 库迁移到 Carbon,或者在现有 C++ 投资的基础上编写新的 Carbon。例如:
在 Carbon 中阅读有关 C++ 互操作的更多信息。
除了 Carbon 和 C++ 之间的互操作性之外,我们还计划支持迁移工具,将惯用的 C++ 代码机械地转换为 Carbon 代码,以帮助您将现有的 C++ 代码库切换到 Carbon。
Carbon 提供了一个 带有检查定义的现代泛型系统 ,同时仍然支持 用于无缝 C++ 互操作的可选模板。与 C++ 模板相比,经过检查的泛型提供了几个优点:
在不牺牲这些优势的情况下,Carbon 泛型支持专业化,确保它可以完全解决 C++ 模板的性能关键用例。有关 Carbon 泛型的更多详细信息,请参阅他们的 设计。
除了与 C++ 的简单而强大的互操作之外,Carbon 模板可以被约束并以细粒度和平滑的进化路径增量迁移到检查的泛型。
安全,尤其是 内存安全,仍然是 C++ 的主要挑战,也是后继语言需要解决的问题。我们最初的优先事项和重点是立即解决安全领域中重要的、唾手可得的成果:
一旦我们可以将代码迁移到 Carbon 中,我们将拥有一种简化的语言,在设计空间中可以添加任何必要的注释或功能,以及泛型等基础设施以支持更安全的设计模式。从长远来看,我们将在此基础上引入一个安全的碳子集。这将是一项庞大而复杂的任务,不会出现在 0.1 设计中。同时,我们正在密切关注和学习将内存安全语义添加到 C++ 中的努力,例如受 Rust 启发的 生命周期注释。
您可以通过查看代码库并使用 Carbon explorer 开始使用 Carbon:
# Install bazelisk using Homebrew.
$ brew install bazelisk
# Install Clang/LLVM using Homebrew.
# Many Clang/LLVM releases aren't built with options we rely on.
$ brew install llvm
$ export PATH="$(brew --prefix llvm)/bin:${PATH}"
# Download Carbon's code.
$ git clone https://github.com/carbon-language/carbon-lang
$ cd carbon-lang
# Build and run the explorer.
$ bazel run //explorer -- ./explorer/testdata/print/format_only.carbon
这些说明假定Homebrew;有关更广泛的工具说明,请参阅我们的 贡献工具文档。
了解有关碳项目的更多信息:
Carbon 致力于营造一个欢迎和包容的环境,让每个人都可以做出贡献。