carbon-language/carbon-lang

GitHub: carbon-language/carbon-lang

Carbon 是一种实验性的编程语言,旨在作为 C++ 的继任者,通过提供无缝的互操作性和渐进式的迁移路径来解决 C++ 长期积累的技术债务。

Stars: 33691 | Forks: 1536

# Carbon Language:
C++ 的实验性继任者 Quicksort code in Carbon. Follow the link to read more. A snippet of C++ code. Follow the link to read it. 对应于以下 Carbon 代码: A snippet of converted Carbon code. Follow the link to read it. 你可以无开销地从 C++ 调用 Carbon,反之亦然。这意味着你可以在应用程序中将单个 C++ 库迁移到 Carbon,或者在现有 C++ 投资的基础上编写新的 Carbon 代码。例如: A snippet of mixed Carbon and C++ code. Follow the link to read it. 阅读有关 [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++, Carbon Language, CppNorth, C++后继者, DNS解析, LLVM, 代码库, 内存安全, 包管理器, 实验性语言, 开源项目, 数据擦除, 现代编程语言, 系统编程, 统一API, 编程语言, 编译器, 跨语言互操作, 高性能计算