Carbon 语言【中文入门教程】

Carbon 语言:C++ 的实验性继承者 小发猫

快速且可与 C++ 一起使用

  • 性能匹配 C++ 使用 LLVM,对位和地址进行低级访问
  • 与现有的 C++ 代码互操作,从继承到模板
  • 可与现有 C++ 构建系统一起使用的快速且可扩展的构建

现代且不断发展

  • 易于学习的扎实语言基础,特别是如果您使用过 C++
  • Carbon 版本之间基于工具的简单升级
  • 更安全的基础,以及通往内存安全子集的增量路径

欢迎开源社区

  • 明确的目标和优先事项,以及强有力的治理
  • 致力于欢迎、包容和友好的社区
  • 包含电池的方法:编译器、库、文档、工具、包管理器等

为什么要建造碳?

C++ 仍然是性能关键型软件的主要编程语言,拥有大量且不断增长的代码库和投资。然而,它正在努力改进和满足上述开发人员的需求,这在很大程度上是由于积累了数十年的技术债务。由于技术债务本身和演化过程中的挑战,逐步改进 C++ 非常困难。解决这些问题的最佳方法是避免直接继承 C 或 C++ 的传统,而是从坚实的语言基础开始,如 现代泛型系统、模块化代码组织和一致、简单的语法。

现有的现代语言已经提供了出色的开发人员体验:Go、Swift、Kotlin、Rust 等等。可以使用其中一种现有语言的开发人员应该不幸的是,这些语言的设计对 C++ 的采用和迁移存在重大障碍。这些障碍的范围从软件惯用设计的变化到性能开销。

Carbon 从根本上说是一种后继语言方法,而不是逐步发展 C++ 的尝试。它是围绕与 C++ 的互操作性以及现有 C++ 代码库和开发人员的大规模采用和迁移而设计的。C++ 的后继语言需要:

  • 性能匹配 C++,这是我们开发人员的基本属性。
  • 与 C++ 的无缝、双向互操作性,因此现有 C++ 堆栈中的任何库都可以采用 Carbon 而无需移植其余部分。
  • 一个温和的学习曲线,对 C++ 开发人员有合理的熟悉度。
  • 对现有软件的设计和架构具有可比性和支持。
  • 可扩展的迁移,对惯用的 C++ 代码进行某种程度的源到源转换。

通过这种方法,我们可以在 C++ 现有的生态系统之上构建,并带来现有的投资、代码库和开发人员群体。有一些语言在其他生态系统中遵循了这个模型,Carbon 旨在填补 C++ 的类似角色:

  • JavaScript → 打字稿
  • Java → 科特林
  • C++ →

语言目标

我们正在设计 Carbon 以支持:

  • 性能关键型软件
  • 软件和语言演变
  • 易于阅读、理解和编写的代码
  • 实用的安全和测试机制
  • 快速且可扩展的开发
  • 现代操作系统平台、硬件架构和环境
  • 与现有 C++ 代码的互操作性和迁移

虽然许多语言共享这些目标的子集,但 Carbon 的不同之处在于它们的组合。

我们对 Carbon 也有明确的非目标,特别是包括:

  • 适用于整个语言和库的稳定 ABI
  • 完美的向后或向前兼容性

我们的详细目标文档充实了这些想法,并为我们对 Carbon 项目和语言的目标提供了更深入的了解。

项目状态

Carbon目前是一个实验项目。我们希望更好地了解我们是否可以构建一种符合我们后继语言标准的语言,以及由此产生的语言是否可以在更大的 C++ 行业和社区中引起足够的兴趣。

目前,我们已经充实了 Carbon 项目和语言的几个核心方面:

  • Carbon 语言和项目的战略。
  • 开源项目结构、治理模型和演进过程。
  • 我们在 C++ 方面的经验和我们预期的最​​困难挑战为语言设计的关键和基础方面提供了信息。这包括以下设计:
    • 泛型
    • 班级类型
    • 遗产
    • 运算符重载
    • 词汇和句法结构
    • 代码组织和模块化结构
  • 一个原型解释器演示,既可以运行孤立的示例,又可以详细分析 Carbon 的特定语义模型和抽象机。我们称之为碳探索者

我们目前专注于从 C++ 社区获得更广泛的反馈和参与, 完成 0.1 语言设计,并 完成该设计的 Carbon Explorer 实现。除此之外,我们计划优先考虑 C++ 互操作性和实现 0.1 语言的现实工具链,并可用于更详细地评估 Carbon。

您可以查看我们的完整路线图了解更多详情。

碳和 C++

如果您已经是 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++ 的主要挑战,也是后继语言需要解决的问题。我们最初的优先事项和重点是立即解决安全领域中重要的、唾手可得的成果:

  • 更好地跟踪未初始化的状态,加强初始化的执行,并在需要时系统地提供针对初始化错误的强化。
  • 设计基本 API 和习惯用法以支持调试和强化构建中的动态边界检查。
  • 即使与Address Sanitizer结合使用,也具有比现有 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 致力于营造一个欢迎和包容的环境,让每个人都可以做出贡献。

猜你喜欢

转载自blog.csdn.net/mynote/article/details/125913119
今日推荐