当前位置: 首页 > 工具软件 > Carbon > 使用案例 >

探索 Carbon,C++ 的新超集

宋原
2023-12-01

C++ 是 C 编程语言的继承者,无疑是现代最相关的语言之一。C++ 为现代编程语言中使用的 Python 机器学习、JavaScript 库、游戏开发和许多其他工具提供支持。

对于每个 Grand Challenge,如果您找到了解决方案,您会在底部某处看不到它的地方找到一些 C++。——比亚内·斯特劳斯特鲁普

C++ 也是较旧的面向对象编程语言之一,具有适应性强的设计、多功能性和广泛的兼容性。C++ 启发了 Java 等新语言,使该语言可用于开发游戏、医疗设备、人工智能和控制系统以及许多其他应用程序。

Rust 和 Golang 等许多现代编程语言如雨后春笋般涌现,允许开发人员灵活地编写干净、安全的代码,并且比他们的前辈更省心。但是,较旧的编程语言仍然为我们日常生活中运行的许多代码库提供支持。

我们还看到编程语言的推出为 C/C++ 等较旧的语言提供解决方案。在当今世界,它们是 JavaScript、TypeScript、Objective-C、Swift、Java 和 Kotlin。

在最近结束的CPP North 会议上,谷歌宣布他们已经在开发 C++ 的继任者:Carbon 编程语言。在本文中,我们将讨论 Carbon 是什么、它的特性、它与 C++ 的不同之处、如何设置它等等。

让我们开始吧!

  • 什么是碳?

  • Carbon 编程语言的特点

    • 互操作性

    • 现代仿制药系统

    • 内存安全改进

  • 碳与 C++

  • 开始使用碳

    • 安装碳

  • Carbon 语法概述

    • 碳中的变量

    • 碳中的循环

    • 碳中的功能

    • Carbon中的条件

    • 碳课程

  • 展望碳的未来

什么是碳?

在 C++ 中,有一种更小更干净的语言正在努力摆脱困境。——比亚内·斯特劳斯特鲁普

Carbon 是一种开源的、静态类型的、编译的编程语言,最初由 Google 构建,以继承 C++。Carbon 为开发人员提供现代编程实践,例如泛型、模块化代码组织和简单语法。

Carbon 希望与 C++ 的性能和可扩展性相媲美。该语言旨在实现与 C++ 的双向互操作性,以实现迁移和采用。这意味着您可以将 C++ 代码库转换为 Carbon,反之亦然,以及使用现有的 C++ 库。

Carbon 也非常友好,对 C++ 开发人员具有温和的学习曲线,为现有的软件设计和架构提供了更多的表现力和支持。

碳仍然是一个实验,处于开发阶段。话虽如此,但尚未添加许多帮助您编写自己喜欢的 Carbon 代码的功能。

Carbon 编程语言的特点

Carbon 与 C++ 有一些非常相似的地方。它融入了现代编程实践、对 C++ 的支持、互操作性、内存安全和泛型。这些是 Carbon 编程语言的一些显着特性,我们现在将讨论其中的一些特性。


超过 20 万开发人员使用 LogRocket 来创造更好的数字体验了解更多 →


互操作性

从逻辑上讲,像 Carbon 这样的后继语言需要与其先前的语言兼容。Carbon 与 C++ 双向(双向)兼容,您可以将任何一种语言与另一种语言一起使用。让我们来看看它的互操作性:

// Source code by the authors of the Carbon programming language
​
// C++ code used in both Carbon and C++:
struct Circle {
  float r;
};
​
// Carbon exposing a function for C++:
package Geometry api;
import Cpp library "circle.h";
import Math;
​
fn PrintTotalArea(circles: Slice(Cpp.Circle)) {
  var area: f32 = 0;
  for (c: Cpp.Circle in circles) {
    area += Math.Pi * c.r * c.r;
  }
  Print("Total area: {0}", area);
}

在上面的示例中,Carbon 代码使用C++ 库来打印圆的面积。circle.h

// Source code by the authors of the Carbon programming language
​
// C++ calling Carbon:
#include <vector>
#include "circle.h"
#include "geometry.carbon.h"
​
auto main(int argc, char** argv) -> int {
  std::vector<Circle> circles = {{1.0}, {2.0}};
  // Carbon's `Slice` supports implicit construction from `std::vector`,
  // similar to `std::span`.
  Geometry::PrintTotalArea(circles);
  return 0;
}

上面的 C++ 代码使用该库使用提供的参数打印圆的面积。请注意 Carbon 代码是如何更具可读性和直观性的。geometry.carbon.h

Win10最新官方ISO下载,Win10 21H2 Build 19044.2006ISO镜像下载

现代仿制药系统

泛型是现代编程语言(包括 Rust 和 Go)中的众多强大功能之一。Carbon 具有现代泛型系统,具有检查定义和可选模板,可与现有 C++ 代码无缝互操作。

Carbon 的通用系统值得关注。它将确保对泛型定义进行类型检查,以避免在编译时进行定义检查的成本。它还将确保强大的检查接口,以减少对实现的意外依赖并创建重要的显式合同。

内存安全改进

内存安全是使用 C++ 的一个重要任务点。Carbon 旨在通过跟踪未初始化状态、增加初始化强制执行和阻止初始化错误来解决内存安全问题。

Carbon 将具有基本的 API 和习惯用法,以支持调试中的动态绑定检查。它还将支持具有全面默认调试模式的强化构建。Carbon 的安全策略还可以采用一些有保证的内存安全编程模型。

您可以根据您对内存安全的偏好,在调试、性能和强化模式下运行 Carbon 程序。您可以在 GitHub 文档中阅读有关Carbon 安全策略的更多信息。

碳与 C++

由于 Carbon 是新的并且该语言不是生产就绪的,因此您只能根据它们的共享特性将 Carbon 与 C++ 进行比较。C++ 已经存在了一段时间,开发人员已经能够分享他们对该语言的挫败感。希望 Carbon 能够像 TypeScript 对 JavaScript 所做的那样,最大限度地减少众多 C++ 问题。

以下是 Carbon 和 C++ 之间的简要比较:

C++
面向对象_是的是的
学习曲线_温和的难以掌握_
表现力很有表现力难以表达_
类型系统_强类型;_ s statically -键入强类型;_ 静态-键入
泛型支持_是的模板;类似于泛型_ _

在我看来,Carbon 成功接替 C++ 的可能性相对较高,尤其是考虑到 C++ 的状态和该语言背后的公司。进一步考虑两种语言之间的双向互操作性,开发人员不一定会错过 C++ 功能。

Go 和 Dart 已经在他们的预期领域得到了广泛的采用,而 Carbon 可能会非常成功。

开始使用碳

Carbon 仍处于实验模式,因此该语言远未准备好生产。但是,您仍然可以使用该语言的当前状态并考虑为它的发展做出贡献!

现在,我们将介绍如何使用 Carbon 的资源管理器来检查代码库并使用该语言。

安装碳

您首先需要在您的计算机上安装 Homebrew。您可以查看这些安装说明以在 Linux 和 macOS 上安装 Homebrew。

首先使用 Homebrew 包管理器安装 Bazelisk:

brew install bazelisk

接下来,安装llvm并导出PATH变量:

brew install llvm
export PATH="$(brew --prefix llvm)/bin:${PATH}"

克隆 Carbon 存储库并进入您机器上的目录:

git clone https://github.com/carbon-language/carbon-lang
cd carbon-lang

最后,构建并运行 Carbon explorer:

bazel run //explorer -- ./explorer/testdata/print/format_only.carbon

就是这样!现在您可以开始使用 Carbon 进行试验并检查该语言的工作原理。

Carbon 语法概述

Carbon 的语法实际上与 Rust 和其他一些语言的语法非常相似。让我们看一下 Carbon 的语法概述,包括变量、循环、条件、函数和类。

碳中的变量

var您可以使用关键字声明变量。Carbon 是静态类型的,因此您必须指定数据类型。

var hello: auto = "Hello, world!";

auto数据类型是可用于任何变量的通用数据类型。就像 C++ 一样,每条语句都必须以分号结尾。

碳中的循环

Carbon 采用 c 风格的 for 循环,包括一系列 for 循环功能。

for (var name: String in names) { // names is an array
    Print(name);
}

for 循环遍历数组并打印数组的元素。

碳中的功能

Carbon 的函数与 Rust 的函数非常相似,不同之处在于您必须显式声明参数变量。

fn Sum(var a: i32, var b: i32) -> i32 {
    return a + b;
}

该Sum函数返回调用时参数的总和。

Carbon中的条件

Carbon 也使用 c 风格的条件语句。

fn check(var value: i32) -> i32 {
  if(value == 7) {
    Print(value);
  } else {
    Print(0);
  }
}

该check函数检查参数输入是否等于7并打印valueif 是否等于或打印0if 语句无效。

碳课程

Carbon 提供了一个关键字来定义类及其标识符和任何类型的字段。

class Human {
  var phone: i32;
  var age: i32;
  var name: String;
}

该类Human具有phone、age和name字段。您可以为您的操作声明任意数量的字段。

展望碳的未来

Google 和 Carbon 的团队将 Carbon 设想为一种快速、可扩展的语言,可以发展并支持在现代操作系统、硬件和环境上运行的性能关键型软件。Carbon 还将朝着向后或向前兼容的方向发展,并为该语言提供稳定的应用程序二进制接口 (ABI)。

Carbon 的实验但工作版本计划于 2022 年底公开,完整版本将于 2024 年至 2025 年提供。您可以查看语言目标的详细概述。

结论

在本文中,我们概述了 Carbon 及其特性,将 Carbon 与其前身 C++ 进行了比较,研究了如何安装 Carbon 及其语法如何工作,以及研究了 Carbon 未来的发展方向。

Carbon 正在采用包含电池的方法来开发该语言。该存储库位于 GitHub 上,您可以在其中为构建每个人都喜欢的 C++ 继任者的讨论和开发做出贡献。

 类似资料: