Project Icon

carbon-lang

实验性编程语言 C++继承者与现代创新

Carbon是一个开源实验性编程语言项目,致力于成为C++的继承者。它具备C++级别的性能、双向无缝互操作能力,并引入现代语言特性如泛型系统和内存安全机制。Carbon旨在支持高性能软件开发、语言演进、提高代码可读性和可维护性,同时促进快速可扩展的开发流程。目前该项目处于实验阶段,正积极开发编译器和工具链。

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

为什么? | 目标 | 状态 | 开始使用 | 加入我们

观看我们在CppNorth发布的公告视频 请注意,Carbon 目前尚未准备好供使用

Carbon中的快速排序代码。点击链接了解更多。

快速且兼容C++

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

现代且不断发展

  • 坚实的语言基础,易于学习,尤其是对C++使用者而言
  • 轻松的工具化Carbon版本升级
  • 更安全的基础,逐步实现内存安全子集

欢迎加入开源社区

  • 明确的目标和优先级,健全的治理
  • 努力打造热情、包容、友好的社区
  • 全面配套:编译器、库、文档、工具、包管理器等

为什么创建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 → TypeScript
  • Java → Kotlin
  • C++ → Carbon

语言目标

我们设计Carbon以支持:

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

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

我们也为Carbon明确设定了一些_非目标_,特别包括:

我们详细的目标文档阐述了这些想法,并深入展示了我们对Carbon项目和语言的目标。

项目状态

Carbon语言目前是一个实验性项目。您可以在compiler-explorer.com上查看Carbon的演示解释器。我们也正在努力开发包含编译器和链接器的工具链实现。

我们希望更好地了解是否能够构建一个满足我们继任语言标准的语言,以及由此产生的语言是否能在更广泛的C++行业和社区中获得关键规模的兴趣。

目前,我们已经详细阐述了Carbon项目和语言的几个核心方面:

  • Carbon语言和项目的策略。
  • 开源项目结构、治理模式和演进过程。
  • 基于我们在C++方面的经验以及预期的最困难挑战而设计的语言关键和基础方面。这包括以下设计:
    • 泛型
    • 类类型
    • 继承
    • 运算符重载
    • 词法和语法结构
    • 代码组织和模块化结构
  • 一个原型解释器演示,既可以运行独立示例,又可以对Carbon的具体语义模型和抽象机进行详细分析。我们称之为Carbon Explorer。
  • 一个正在开发中的编译器和工具链,可以将Carbon(最终也包括C++代码)编译成标准可执行代码。这是我们当前实现工作的主要重点。

如果你有兴趣贡献,我们目前专注于开发Carbon工具链,直到它能够支持Carbon ↔ C++互操作。在此之后,我们计划继续开发设计和工具链,直到我们可以发布0.1版本的语言,并支持更详细地评估Carbon。

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

Carbon和C++

如果你已经是C++开发者,Carbon应该有一个平缓的学习曲线。它由一套一致的语言构造组成,这些构造应该让人感到熟悉,易于阅读和理解。

像这样的C++代码:

[图片:C++代码片段]

对应的Carbon代码如下:

[图片:转换后的Carbon代码片段]

你可以无开销地从C++调用Carbon,反之亦然。这意味着你可以在应用程序中将单个C++库迁移到Carbon,或者在现有的C++投资基础上编写新的Carbon代码。例如:

[图片:混合Carbon和C++的代码片段]

阅读更多关于Carbon中的C++互操作性。

除了Carbon和C++之间的互操作性外,我们还计划支持迁移工具,可以将惯用的C++代码机械地转换为Carbon代码,以帮助你将现有的C++代码库切换到Carbon。

泛型

Carbon提供了一个现代泛型系统,具有检查定义的功能,同时仍然支持可选的模板以实现无缝的C++互操作。与C++模板相比,检查型泛型提供了几个优势:

  • 泛型定义经过完全类型检查,无需实例化即可检查错误,提高了代码的可信度。
    • 避免了每次实例化时重新检查定义的编译时开销。
    • 使用经过定义检查的泛型时,使用错误消息更清晰,直接显示哪些要求未满足。
  • 无需单独实现即可实现自动、可选的类型擦除和动态分派。这可以减少二进制大小并支持异构容器等构造。
  • 强大的、经过检查的接口意味着更少意外依赖于实现细节,为使用者提供更清晰的契约。

在不牺牲这些优势的同时,Carbon泛型支持特化,确保它可以充分满足C++模板的性能关键用例。有关Carbon泛型的更多详细信息,请参阅其设计。

除了与C++的简单而强大的互操作外,Carbon模板可以受到约束,并以细粒度和平滑的演进路径逐步迁移到检查型泛型。

内存安全

安全性,特别是内存安全性,仍然是C++的一个关键挑战,也是继任语言需要解决的问题。我们的初始优先事项和重点是立即解决安全领域重要的、容易解决的问题:

  • 更好地跟踪未初始化状态,加强初始化的执行,并在需要时系统地提供针对初始化错误的加固。
  • 设计基本API和惯用法,以支持在调试和加固版本中进行动态边界检查。
  • 提供一个默认的调试构建模式,该模式比现有的C++构建模式更便宜、更全面,即使与Address Sanitizer结合使用也是如此。

一旦我们能够将代码迁移到Carbon,我们将拥有一个简化的语言,在设计空间中有足够的余地添加任何必要的注解或特性,以及支持更安全设计模式的基础设施,如泛型。长期来看,我们将在此基础上引入一个安全的Carbon子集。这将是一个庞大而复杂的任务,不会出现在0.1设计中。同时,我们正密切关注并学习为C++添加内存安全语义的努力,如受Rust启发的生命周期注解。

入门

要在浏览器中立即尝试Carbon,您可以使用Carbon的演示解释器: carbon.compiler-explorer.com

我们正在开发一个传统的Carbon工具链,可以编译和链接程序。但是,Carbon仍然是一个早期的实验项目,所以我们只提供非常实验性的Carbon工具链每夜版本下载,而且仅限于特定平台。如果您使用的是最新的Ubuntu Linux或类似系统(Debian、WSL等),可以通过访问我们的发布页面并下载最新的每夜工具链tar文件来尝试: carbon_toolchain-0.0.0-0.nightly.YYYY.MM.DD.tar.gz。然后您可以按以下步骤尝试:

# 设置特定的每夜版本变量:
VERSION="0.0.0-0.nightly.YYYY.MM.DD"

# 解压工具链:
tar -xvf carbon_toolchain-${VERSION}.tar.gz

# 创建一个简单的Carbon源文件:
echo "fn Run() { Core.Print(42); }" > forty_two.carbon

# 编译为目标文件:
./carbon_toolchain-${VERSION}/bin/carbon compile \
  --output=forty_two.o forty_two.carbon

# 安装用于链接的最小系统库。注意,安装用于使用GCC编译C/C++代码的`gcc`
# 或`g++`也足够,这些只是Carbon链接仍在使用的特定系统库。
sudo apt install libgcc-11-dev

# 链接为可执行文件:
./carbon_toolchain-${VERSION}/bin/carbon link \
  --output=forty_two forty_two.o

# 运行:
./forty_two

请记住,工具链仍处于非常早期的阶段,许多功能尚未实现。请暂时不要提交大量bug报告:我们知道很多部分还不能工作或可能在某些系统上无法工作。我们预计在达到0.1里程碑时,将提供更加稳健可靠的版本供您尝试。

如果您想自己构建Carbon的工具链,或者考虑为Carbon贡献修复或改进,您需要安装我们的构建依赖项(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编译器:

# 构建并运行工具链的帮助,以获取命令行文档。
$ ./scripts/run_bazelisk.py run //toolchain -- help

有关完整说明,包括在各种不同平台上安装依赖项,请参阅我们的贡献工具文档

了解更多关于Carbon项目的信息:

会议演讲

来自社区的Carbon相关演讲:

即将举行

2024年

2023年

2022年

加入我们

我们非常欢迎大家加入并为项目做出贡献。Carbon致力于营造一个欢迎和包容的环境,让每个人都能贡献。

贡献

您还可以直接:

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号