自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Google 的 C++ 實(shí)驗(yàn)性繼任者 Carbon 是否值得學(xué)習(xí)

開發(fā)
2022年7月19日,在多倫多舉行的 CPP North C++ 會(huì)議上,Google 工程師 Chandler Carruth 介紹了 Carbon。我們?cè)賮砹私馐裁词?Carbon 以及它打算如何取代 C++。

自其誕生以來,C++ 一直是構(gòu)建性能密集型應(yīng)用程序的首選。但由于“委員會(huì)式設(shè)計(jì) design by committee”,該語言仍有一些過時(shí)的做法。

2022年7月19日,在多倫多舉行的 CPP North C++ 會(huì)議上,Google 工程師 Chandler Carruth 介紹了 Carbon。

我們?cè)賮砹私馐裁词?Carbon 以及它打算如何取代 C++。

什么是 Carbon?

Google 工程師開發(fā)了 Carbon 編程語言來解決 C++ 的缺點(diǎn)。

許多現(xiàn)有的語言,如 Golang 和 Rust 已經(jīng)存在,它們反映了 C++ 的性能而沒有缺點(diǎn)。不幸的是,這些語言對(duì)現(xiàn)有 C++ 代碼庫的遷移構(gòu)成了重大障礙。

Carbon 的目標(biāo)就像 TypeScript 之于 JavaScript, Kotlin 之于 Java。它不是一種替代語言,而是一種圍繞與 C++ 的互操作性而設(shè)計(jì)的繼承性語言。它的目標(biāo)是對(duì)現(xiàn)有代碼庫和開發(fā)人員進(jìn)行大規(guī)模的采用和遷移。

Carbon 的主要特征

Carbon 的一些關(guān)鍵特性包括 C++ 互操作性、現(xiàn)代泛型和內(nèi)存安全。

與 C++ 的互操作性

Carbon 旨在為 C++ 開發(fā)人員提供一個(gè)溫和的學(xué)習(xí)曲線,并提供一套標(biāo)準(zhǔn)、一致的語言結(jié)構(gòu)。

例如,以這個(gè) C++ 代碼為例:

// C++:
#include <math.h>
#include <iostream>
#include <span>
#include <vector>

struct Circle {
float r;
};

void PrintTotalArea(std::span<Circle> circles) {
float area = 0;

for (const Circle& c : circles) {
area += M_PI * c.r * c.r;
}

std::cout << "Total area: " << area << endl;
}

auto main(int argc, char** argv) ->; int {
std::vector<Circle> circles = {{1.0}, {2.0}};

// Implicitly constructs `span` from `vector`.
PrintTotalArea(circles);
return 0;
}

轉(zhuǎn)化為 Carbon,它變成:

// Carbon:
package Geometry api;
import Math;

class Circle {
var r: f32;
}

fn PrintTotalArea(circles: Slice(Circle)) {
var area: f32 = 0;

for (c: Circle in circles) {
area += Math.Pi * c.r * c.r;
}

Print("Total area: {0}", area);
}

fn Main() ->; i32 {
// A dynamically sized array, like `std::vector`.
var circles: Array(Circle) = ({.r = 1.0}, {.r = 2.0});

// Implicitly constructs `Slice` from `Array`.
PrintTotalArea(circles);
return 0;
}

您還可以在應(yīng)用程序中將單個(gè) C++ 庫遷移到 Carbon,或在現(xiàn)有 C++ 代碼之上添加新的 Carbon 代碼。例如:

// 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);
}

// 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;
}

現(xiàn)代泛型系統(tǒng)

Carbon 提供了一個(gè)帶有檢查定義的現(xiàn)代泛型系統(tǒng)。但它仍然支持可選模板以實(shí)現(xiàn)無縫 C++ 互操作性。

這個(gè)泛型系統(tǒng)為 C++ 模板提供了很多優(yōu)勢(shì):

  • 通用定義的類型檢查。這避免了為每個(gè)實(shí)例重新檢查定義的編譯時(shí)成本。
  • 強(qiáng)大、經(jīng)過檢查的接口。這些減少了對(duì)實(shí)現(xiàn)細(xì)節(jié)的意外依賴,并創(chuàng)建了更明確的合同。

內(nèi)存安全

Carbon 試圖通過以下方式解決內(nèi)存安全問題,這是困擾 C++ 的一個(gè)關(guān)鍵問題:

  • 更好地跟蹤未初始化的狀態(tài),增加初始化的執(zhí)行,并加強(qiáng)初始化錯(cuò)誤。
  • 設(shè)計(jì)基本 API 和習(xí)慣用法以支持調(diào)試和強(qiáng)化構(gòu)建中的動(dòng)態(tài)邊界檢查。
  • 具有比 C++ 現(xiàn)有構(gòu)建模式更全面的默認(rèn)調(diào)試構(gòu)建模式。

開始使用 Carbon

您現(xiàn)在可以通過查看代碼庫并使用 Carbon explorer 來探索 Carbon:

# 使用 Homebrew 安裝 bazelisk
$ brew install bazelisk

# 使用 Homebrew 安裝 Clang/LLVM
# 許多Clang/LLVM版本并沒有使用我們所依賴的選項(xiàng)構(gòu)建。
$ brew install llvm
$ export PATH="$(brew --prefix llvm)/bin:${PATH}"

# 下載 Carbon 代碼
$ git clone https://github.com/carbon-language/carbon-lang
$ cd carbon-lang

# 構(gòu)建并運(yùn)行explorer。
$ bazel run //explorer -- ./explorer/testdata/print/format_only.carbon

Carbon 路線圖

根據(jù) Carbon 路線圖,Google 將在 2022 年底之前發(fā)布核心工作版本(0.1)來公開實(shí)驗(yàn)。他們計(jì)劃在 2023 年發(fā)布 0.2 版本,并在 2024-2025 年發(fā)布完整的 1.0 版本。

Carbon 是否能夠復(fù)制 Golang 和 Kotlin 等其他語言的成功,還有待觀察。

責(zé)任編輯:趙寧寧 來源: Linux迷
相關(guān)推薦

2022-07-20 15:20:40

谷歌開源

2022-07-24 21:36:23

C++編程語言開源

2022-08-01 14:42:49

C++編程

2022-07-28 19:35:11

Carbon編程語言C++

2018-02-25 11:12:17

Fuchsia安卓谷歌

2023-03-16 15:00:31

CarbonC++編程語言

2014-06-24 10:37:03

智能設(shè)備新技術(shù)

2012-03-13 16:45:09

超級(jí)計(jì)算機(jī)沃森Deep Thunde

2011-01-28 15:26:34

深藍(lán)人機(jī)大戰(zhàn)沃森

2009-11-30 10:15:12

DellChrome OS鏡像

2023-05-11 08:57:49

ReactHooks

2022-01-13 11:00:58

Kubernetes Gateway APILinux

2011-12-14 16:47:12

N8諾基亞Symbian

2023-12-04 18:24:17

WaylandLinux

2021-04-13 14:39:08

谷歌Logica語言

2022-04-18 12:29:18

C++

2023-09-13 15:16:50

2025-01-16 08:20:00

2021-10-03 16:32:59

Chromeflags頁面

2012-12-26 09:51:52

C++開發(fā)者C++ CX
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)