carbon-lang

carbon-lang

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

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

Carbon语言C++编程语言性能互操作性Github开源项目

Carbon 语言: <br/> C++的实验性继任者

<p align="center"> <a href="#为什么创建Carbon">为什么?</a> | <a href="#语言目标">目标</a> | <a href="#项目状态">状态</a> | <a href="#开始使用">开始使用</a> | <a href="#加入我们">加入我们</a> </p>

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

<a href="docs/images/snippets.md#quicksort"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/7ca70965-dd8b-41f7-94ac-977e1b65928e.svg" align="right" width="575" alt="Carbon中的快速排序代码。点击链接了解更多。"> </a> <div><picture><img src="https://yellow-cdn.veclightyear.com/835a84d5/4758e8c6-eea2-494b-830e-aa65e6c14f26.png" alt=""></picture></div>

快速且兼容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致力于营造一个欢迎和包容的环境,让每个人都能贡献。

贡献

您还可以直接:

编辑推荐精选

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

下拉加载更多