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 致力于营造一个欢迎和包容的环境,让每个人都可以做出贡献。

  • 要观看主要的发布公告,请订阅 我们在 GitHub 上的 Carbon 发布帖子 和star carbon-lang。
  • 要加入设计讨论,请加入我们 的 Github 论坛。
  • 有关 Carbon 开发社区的信息,请参阅我们的行为准则和 贡献指南。
  • 我们在Discord上讨论 Carbon 。

Carbon 语言【中文入门教程】相关推荐

  1. python基础教程是什么语言-终于懂得python中文入门教程

    Python作为一门新型的编程语言(一般常用作脚本语言)很受欢迎,毕竟相对其他的编程语言(Java ,C#等)来说比较容易入手.那么,在刚开始学习Python时有哪些疑难点需要掌握呢?以下是小编为你整 ...

  2. python3菜鸟教程-总算理解python3中文入门教程

    为了提高模块加载的速度,每个模块都会在__pycache__文件夹中放置该模块的预编译模块,命名为module.version.pyc,version是模块的预编译版本编码,一般都包含Python的版 ...

  3. 【监控仪表系统】Grafana 中文入门教程 | 构建你的第一个仪表盘

    Grafana 读音:/grəˈfɑːnˌɑː/ Grafana 中文入门教程 1. Grafana 是什么 Grafana 支持的数据源 2. 什么情况下会用到 Grafana 或者监控仪表盘 3. ...

  4. ActiveReports 报表控件官方中文入门教程 (2)-创建、数据源、浏览以及发布

    ActiveReports 报表控件官方中文入门教程 (2)-创建.数据源.浏览以及发布 原文:ActiveReports 报表控件官方中文入门教程 (2)-创建.数据源.浏览以及发布 本篇文章将阐述 ...

  5. c语言程序设计入门教程视频教学

    c语言教程视频讲座简介: 沉睡者IT:c语言程序设计入门教程视频教学培训课程内容介绍: 程序设计是一门基础课程.对于计算机相关专业而言,程序设计是专业基础知识,是进一步学习其他专业知识的第一步阶梯:对 ...

  6. C语言程序设计入门教程

    C语言程序设计入门教程 目录 语言分类 C语言特点 最简单的C语言程序 注释方式 C语言程序的结构 程序设计的任务阶段 选择结构程序设计 关系运行算符 逻辑运算符 switch语句 条件运算符 数据类 ...

  7. 习语言(c语言)轻松入门教程

    习语言(c语言)轻松入门教程,很不错的教程,推荐给大家, 看看你有多少是会的,多少是不会的. 教程在如下地址:http://blog.163.com/xiyuyan@yeah/blog/static/ ...

  8. houdini计算机语言,Houdini VEX语言快速入门教程MIXTRAINING-PATREON Houdini Nature of Vex

    Houdini VEX语言快速入门教程MIXTRAINING-PATREON Houdini Nature of Vex 自从Houdini引入VEX语言以来,它一直在不断发展,最近它已经成为FX T ...

  9. c语言类似于 n的标识符,C语言快速入门教程(二)

    C语言快速入门教程(二) C语言的基本语法 本节学习路线图: 引言: C语言,顾名思义就是一门语言,可以类比一下英语; 你要说出一个英语的句子需要: 单词 + 语法! 将单词按照一定的语法拼凑起来就成 ...

最新文章

  1. Centos用cron定时执行PHP
  2. pso算法c++语言代码,一C++PSO(PSO)算法
  3. Spring Boot 1.5.x新特性:动态修改日志级别
  4. 华为P50渲染图再曝光:居中打孔直屏+徕卡四摄
  5. Python序列基本操作(四)元组
  6. MySQL多库备份以及从多库备份中恢复某个库
  7. websocket实现实时直播
  8. 思科与华为设备OSPF配置命令对比
  9. python py转exe逆向
  10. Cesium中的相机—方向余弦阵
  11. allegro怎么修改文本_allegro user preferences常见设置及说明
  12. 天才小毒妃 第917章 深藏不露大财主
  13. 中考计算机考键盘,信息技术中考键盘常识复习讲座.ppt
  14. 五笔中三个字的词组打法
  15. 导数,偏导数,方向导数,梯度的理解---微积分数学基础
  16. 字节跳动瞄准千亿互联网医疗蓝海,张一鸣想靠AI算法当“药神”?
  17. 《学会提问》读书笔记
  18. Java基础 常见数据结构与算法 项目总结
  19. CPU、内存、磁盘三者的关系
  20. Mysql 创建表时报错1103:Incorrect table name【问题记录】

热门文章

  1. linux的veth导致网络不通,使用veth-pair和bridge搭建的本地网络环境网络不通
  2. 索尼最小最轻全画幅微单Alpha 7C面世
  3. doevents raiseevent withevents
  4. 我是如何用一行代码表白学妹~❤520情人节送女朋友的3D樱花雨相册礼物❤~(程序员表白专属)...
  5. 大数据时代,财务管理人员要成为复合型人才
  6. 电影院移动端电影分区发行致力于开拓海外市场
  7. java 气象局api_国家气象局免费天气预报接口API
  8. 梦幻答题软件测试,欢乐答题官方测试版
  9. 卡尔曼滤波(kalman)相关理论以及与HMM、最小二乘法关系
  10. 博雅互动(静态网页)分享