carbon-language/carbon-lang
GitHub: carbon-language/carbon-lang
Carbon 是一种实验性的编程语言,旨在作为 C++ 的继任者,通过提供无缝的互操作性和渐进式的迁移路径来解决 C++ 长期积累的技术债务。
Stars: 33691 | Forks: 1536
# Carbon Language:
C++ 的实验性继任者
对应于以下 Carbon 代码:
你可以无开销地从 C++ 调用 Carbon,反之亦然。这意味着你可以在应用程序中将单个 C++ 库迁移到 Carbon,或者在现有 C++ 投资的基础上编写新的 Carbon 代码。例如:
阅读有关
[Carbon 中的 C++ 互操作](/docs/design/interoperability/philosophy_and_goals.md)的更多信息。
除了 Carbon 和 C++ 之间的互操作性之外,我们还计划支持迁移工具,这些工具将机械地将惯用的 C++ 代码翻译成 Carbon 代码,以帮助你将现有的 C++ 代码库切换为 Carbon。
## 泛型
Carbon 提供了
**[现代泛型系统](/docs/design/generics/overview.md#what-are-generics)**
并带有检查定义,同时仍然**支持可选的
[模板](/docs/design/templates.md)以实现与 C++ 的无缝互操作**。与 C++ 模板相比,检查泛型提供了几个优势:
- **泛型定义是完全类型检查的**,无需实例化即可检查错误,从而增强了代码的信心。
- 避免了为每次实例化重新检查定义所带来的编译时开销。
- 当使用定义检查的泛型时,使用错误信息更加清晰,直接指明未满足哪些要求。
- **启用自动、可选的类型擦除和动态分发**,无需单独的实现。这可以减少二进制文件的大小,并支持异构容器等构造。
- **强大且经过检查的接口**意味着减少了对实现细节的意外依赖,并为使用者提供了更清晰的契约。
在不牺牲这些优势的情况下,**Carbon 泛型支持特化**,确保能完全解决 C++ 模板的性能关键型用例。有关 Carbon 泛型的更多详细信息,请参阅其
[设计](/docs/design/generics)。
除了与 C++ 简单强大的互操作之外,Carbon 模板可以被约束,并以细粒度和平滑的演进路径逐步迁移到检查泛型。
## 内存安全
安全性,尤其是
[内存安全](https://en.wikipedia.org/wiki/Memory_safety),仍然是 C++ 面临的一项关键挑战,也是继任语言需要解决的问题。
我们计划支持两步迁移过程:
1. 高度自动化、极少人工干预的从 C++ 迁移到专为 C++ 互操作和迁移设计的 Carbon 方言。
2. 对 Carbon 代码进行增量重构,以采用内存安全的设计、模式和 API。
我们还希望在迁移到 Carbon 时立即解决安全领域中重要且容易实现的目标:
- 更好地跟踪未初始化状态,加强对初始化的强制执行,并在需要时强化以防止初始化错误。
- 设计基础 API 和惯用法以支持动态边界检查。
- 尽可能将未定义行为切换为错误行为,并使用可见的 `unsafe` 语法标记剩余的未定义行为。
- 具有一种默认的调试构建模式,该模式具有更少的运行时开销,同时比现有的 C++ 调试构建模式结合
[Address Sanitizer](https://github.com/google/sanitizers/wiki/AddressSanitizer)更加全面。
有关更多详细信息,请参阅我们的[安全设计](/docs/design/safety)。
## 入门指南
要在你的浏览器中立即试用 Carbon,你可以使用此处的工具链:
[carbon.compiler-explorer.com](http://carbon.compiler-explorer.com/)。
我们正在开发一种传统的 Carbon 工具链,用于编译和链接程序。然而,Carbon 仍然是一个早期的实验性项目,因此我们只有非常实验性的 Carbon 工具链每日构建版本可供下载,而且仅限于少数平台。如果你使用的是近期的 Ubuntu Linux 或类似系统(Debian、WSL 等),你可以访问我们的
[发布页](https://github.com/carbon-language/carbon-lang/releases)并下载最新的每晚工具链 tar 文件来尝试:
`carbon_toolchain-0.0.0-0.nightly.YYYY.MM.DD.tar.gz`。然后你可以尝试运行:
```
# 一个包含昨日 nightly 版本的变量:
VERSION="$(date -d yesterday +0.0.0-0.nightly.%Y.%m.%d)"
# 获取 release
wget https://github.com/carbon-language/carbon-lang/releases/download/v${VERSION}/carbon_toolchain-${VERSION}.tar.gz
# 解压 toolchain:
tar -xvf carbon_toolchain-${VERSION}.tar.gz
# 创建一个简单的 Carbon 源文件:
echo "import Core library \"io\"; fn Run() { Core.Print(42); }" > forty_two.carbon
# 编译为 object file:
./carbon_toolchain-${VERSION}/bin/carbon compile \
--output=forty_two.o forty_two.carbon
# 安装用于 linking 的最小系统库。请注意,安装 `gcc`
# 或 `g++` 以使用 GCC 编译 C/C++ 代码也是可以的,这些只是
# Carbon linking 仍在使用的特定系统库。
sudo apt install libgcc-11-dev
# Link 为可执行文件:
./carbon_toolchain-${VERSION}/bin/carbon link \
--output=forty_two forty_two.o
# 运行它:
./forty_two
```
再次提醒,该工具链仍处于非常早期的阶段,许多功能尚不可用。请暂缓提交大量错误:我们知道其中许多部分还不能正常工作,或者可能无法在所有系统上运行。我们预计在达到
[0.1 里程碑](/docs/project/milestones.md#milestone-01-a-minimum-viable-product-mvp-for-evaluation)时,将发布更加健壮和可靠的版本供你试用。
如果你想自己构建 Carbon 的工具链,或者正在考虑为 Carbon 贡献修复或改进,你需要安装我们的
[构建依赖项](/docs/project/contribution_tools.md#setup-commands)(Clang、
LLD、libc++)并检出 Carbon 仓库。例如,在 Debian 或 Ubuntu 上:
```
# 更新 apt。
sudo apt update
# 安装工具。
sudo apt install \
clang \
libc++-dev \
libc++abi-dev \
lld
# 下载 Carbon 的代码。
$ git clone https://github.com/carbon-language/carbon-lang
$ cd carbon-lang
```
然后你可以试用我们的工具链,其中包含一个处于非常早期阶段的 Carbon 编译器:
```
# 构建并运行 toolchain 的帮助命令,以获取命令行文档。
$ ./scripts/run_bazelisk.py run //toolchain -- help
```
有关完整的说明,包括在各种不同平台上安装依赖项,请参阅我们的
[贡献工具文档](/docs/project/contribution_tools.md)。
了解更多关于 Carbon 项目的信息:
- [项目目标](/docs/project/goals.md)
- [语言设计概览](/docs/design)
- [Carbon 工具链](/toolchain)
- [常见问题解答](/docs/project/faq.md)
## 会议演讲
社区中关于 Carbon 的演讲:
### 2026
- 基准测试与优化 Carbon 编译器,NDC {Toronto} (5月5-8日)
- Carbon:从实验中毕业,NDC {Toronto} (5月5-8日)
### 2025
- Carbon:从 C++ 走向内存安全,REBASE - ICFP/SPLASH
([幻灯片](https://chandlerc.blog/slides/2025-rebase-carbon))
- 使用 Carbon 和 Rust 实现无处不在的内存安全,RustConf
([视频](https://youtu.be/FYLuom6gg_s),
[幻灯片](https://chandlerc.blog/slides/2025-rustconf-memory-safety-everywhere))
### 2024
- Carbon 和 Clang 中的泛型实现策略,LLVM 开发者会议
([视频](https://youtu.be/j0BL52NdjAU),
[幻灯片](https://chandlerc.blog/slides/2024-llvm-generic-implementation/#/))
- Carbon 语言:通往 0.1 之路,NDC {TechTown}
([视频](https://youtu.be/bBvLmDJrzvI),
[幻灯片](https://chandlerc.blog/slides/2024-ndc-techtown-carbon-road-to-0-dot-1))
- 如何通过设计 Carbon 的 C++ 互操作性来让我学到 C++ 可变参数和重载,CppNorth
([视频](https://youtu.be/8SGMy9ENGz8),
[幻灯片](https://chandlerc.blog/slides/2024-cppnorth-design-stories))
- 泛型 Arity:Carbon 中定义检查的可变参数,C++Now
([视频](https://youtu.be/Y_px536l_80),
[幻灯片](https://docs.google.com/presentation/d/10aM1mFMN6Cd5ZkE4OfeiZtSnkVNbo33N-V0et21umww/edit))
- Carbon:权衡不同取舍的实验,小组讨论,EuroLLVM
([视频](https://youtu.be/Za_KWj5RMR8),
[幻灯片](https://llvm.org/devmtg/2024-04/slides/LightningTalks/Smith-Carbons-high-level-semanticIR.pdf))
- [Alex Bradbery 的笔记](https://muxup.com/2024q2/notes-from-the-carbon-panel-session-at-eurollvm)
- Carbon 的高级语义 IR 闪电演讲,EuroLLVM
([视频](https://youtu.be/vIWT4RhUcyw))
### 3
- Carbon 的继任策略:从 C++ 互操作到内存安全,C++Now
([视频](https://youtu.be/1ZTJ9omXOQ0),
[幻灯片](https://chandlerc.blog/slides/2023-cppnow-carbon-strategy/index.html#/))
- 定义检查的泛型,C++Now
- 第 1 部分 ([视频](https://youtu.be/FKC8WACSMP0),
[幻灯片](https://chandlerc.blog/slides/2023-cppnow-generics-1/#/))
- 第 2 部分 ([视频](https://youtu.be/VxQ3PwxiSzk),
[幻灯片](https://chandlerc.blog/slides/2023-cppnow-generics-2/#/))
- 为 Carbon 工具链现代化编译器设计,C++Now
([视频](https://youtu.be/ZI198eFghJk),
[幻灯片](https://chandlerc.blog/slides/2023-cppnow-compiler/index.html#/))
### 2022
- Carbon 语言:语法与权衡,Core C++
([视频](https://youtu.be/9Y2ivB8VaIs),
[幻灯片](https://docs.google.com/presentation/d/1znvL12xCuEfcsP6tpPdrQPnh-UoPFOLnC_RVXZteYaM/edit))
- Carbon 语言:C++ 的实验性继任者,CppNorth
([视频](https://youtu.be/omrY53kbVoA),
[幻灯片](https://chandlerc.blog/slides/2022-07-19-cppnorth-keynote/#/))
### 其他视频
我们还有[工具链视频](/toolchain/docs/README.md#videos)。
## 加入我们
我们非常欢迎大家加入我们并为项目做出贡献。Carbon 致力于营造一个热情和包容的环境,让每个人都能做出贡献。
- Carbon 的大部分设计讨论都在
[Discord](https://discord.gg/ZjVdShJDAs)上进行。
- 要关注主要版本发布公告,请订阅我们的
[GitHub 上的 Carbon 发布帖子](https://github.com/carbon-language/carbon-lang/discussions/1020)
并为 [carbon-lang 点赞](https://github.com/carbon-language/carbon-lang)。
- 请参阅我们的[行为准则](CODE_OF_CONDUCT.md)和
[贡献指南](CONTRIBUTING.md),了解有关 Carbon 开发社区的信息。
### 贡献
你也可以直接:
- [为语言设计做贡献](CONTRIBUTING.md#contributing-to-the-language-design):
设计反馈,新的设计提案
- [为语言实现做贡献](CONTRIBUTING.md#contributing-to-the-language-implementation)
- [Carbon 工具链](/toolchain/)和项目基础设施
你可以**查看一些
[“良好的第一个问题”](https://github.com/carbon-language/carbon-lang/labels/good%20first%20issue)**,
或者加入 [Discord](https://discord.gg/ZjVdShJDAs) 上的 `#contributing-help` 频道。有关更多详细信息,请参阅我们完整的
[`CONTRIBUTING`](CONTRIBUTING.md) 文档。
C++ 的实验性继任者
标签:C++, Carbon Language, CppNorth, C++后继者, DNS解析, LLVM, 代码库, 内存安全, 包管理器, 实验性语言, 开源项目, 数据擦除, 现代编程语言, 系统编程, 统一API, 编程语言, 编译器, 跨语言互操作, 高性能计算