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 与 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
泛型是现代编程语言(包括 Rust 和 Go)中的众多强大功能之一。Carbon 具有现代泛型系统,具有检查定义和可选模板,可与现有 C++ 代码无缝互操作。
Carbon 的通用系统值得关注。它将确保对泛型定义进行类型检查,以避免在编译时进行定义检查的成本。它还将确保强大的检查接口,以减少对实现的意外依赖并创建重要的显式合同。
内存安全是使用 C++ 的一个重要任务点。Carbon 旨在通过跟踪未初始化状态、增加初始化强制执行和阻止初始化错误来解决内存安全问题。
Carbon 将具有基本的 API 和习惯用法,以支持调试中的动态绑定检查。它还将支持具有全面默认调试模式的强化构建。Carbon 的安全策略还可以采用一些有保证的内存安全编程模型。
您可以根据您对内存安全的偏好,在调试、性能和强化模式下运行 Carbon 程序。您可以在 GitHub 文档中阅读有关Carbon 安全策略的更多信息。
由于 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 的语法实际上与 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 也使用 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++ 继任者的讨论和开发做出贡献。