成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Google 的 C++ 實驗性繼任者 Carbon 是否值得學習

開發
2022年7月19日,在多倫多舉行的 CPP North C++ 會議上,Google 工程師 Chandler Carruth 介紹了 Carbon。我們再來了解什么是 Carbon 以及它打算如何取代 C++。

自其誕生以來,C++ 一直是構建性能密集型應用程序的首選。但由于“委員會式設計 design by committee”,該語言仍有一些過時的做法。

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

我們再來了解什么是 Carbon 以及它打算如何取代 C++。

什么是 Carbon?

Google 工程師開發了 Carbon 編程語言來解決 C++ 的缺點。

許多現有的語言,如 Golang 和 Rust 已經存在,它們反映了 C++ 的性能而沒有缺點。不幸的是,這些語言對現有 C++ 代碼庫的遷移構成了重大障礙。

Carbon 的目標就像 TypeScript 之于 JavaScript, Kotlin 之于 Java。它不是一種替代語言,而是一種圍繞與 C++ 的互操作性而設計的繼承性語言。它的目標是對現有代碼庫和開發人員進行大規模的采用和遷移。

Carbon 的主要特征

Carbon 的一些關鍵特性包括 C++ 互操作性、現代泛型和內存安全。

與 C++ 的互操作性

Carbon 旨在為 C++ 開發人員提供一個溫和的學習曲線,并提供一套標準、一致的語言結構。

例如,以這個 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;
}

轉化為 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;
}

您還可以在應用程序中將單個 C++ 庫遷移到 Carbon,或在現有 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;
}

現代泛型系統

Carbon 提供了一個帶有檢查定義的現代泛型系統。但它仍然支持可選模板以實現無縫 C++ 互操作性。

這個泛型系統為 C++ 模板提供了很多優勢:

  • 通用定義的類型檢查。這避免了為每個實例重新檢查定義的編譯時成本。
  • 強大、經過檢查的接口。這些減少了對實現細節的意外依賴,并創建了更明確的合同。

內存安全

Carbon 試圖通過以下方式解決內存安全問題,這是困擾 C++ 的一個關鍵問題:

  • 更好地跟蹤未初始化的狀態,增加初始化的執行,并加強初始化錯誤。
  • 設計基本 API 和習慣用法以支持調試和強化構建中的動態邊界檢查。
  • 具有比 C++ 現有構建模式更全面的默認調試構建模式。

開始使用 Carbon

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

# 使用 Homebrew 安裝 bazelisk
$ brew install bazelisk

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

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

# 構建并運行explorer。
$ bazel run //explorer -- ./explorer/testdata/print/format_only.carbon

Carbon 路線圖

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

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

責任編輯:趙寧寧 來源: Linux迷
相關推薦

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++

2014-06-24 10:37:03

智能設備新技術

2018-02-25 11:12:17

Fuchsia安卓谷歌

2012-03-13 16:45:09

超級計算機沃森Deep Thunde

2023-03-16 15:00:31

CarbonC++編程語言

2011-01-28 15:26:34

深藍人機大戰沃森

2022-01-13 11:00:58

Kubernetes Gateway APILinux

2011-12-14 16:47:12

N8諾基亞Symbian

2009-11-30 10:15:12

DellChrome OS鏡像

2023-05-11 08:57:49

ReactHooks

2023-12-04 18:24:17

WaylandLinux

2021-04-13 14:39:08

谷歌Logica語言

2025-01-16 08:20:00

2023-09-13 15:16:50

2022-04-18 12:29:18

C++

2021-10-03 16:32:59

Chromeflags頁面

2022-07-27 11:59:45

Vue3Suspense
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费观看成人性生生活片 | 色欧美日韩| 91一区二区 | 毛片视频观看 | 国产乱码精品一区二区三区忘忧草 | 久久久久国产成人精品亚洲午夜 | 成人在线国产 | 欧美在线一区二区三区四区 | 午夜久久久久久久久久一区二区 | 日本精品视频一区二区 | 久久久www成人免费无遮挡大片 | 国产a区 | 97caoporn国产免费人人 | 日韩精品极品视频在线观看免费 | 国产精品成人品 | 一区在线观看 | 精品久久久久久久久久 | 亚洲少妇综合网 | 黄色欧美在线 | 人人爽人人爽人人片av | 国产在线激情视频 | 国产电影一区二区 | 精品国产欧美一区二区三区不卡 | 国产精品视频一区二区三区, | 日韩国产精品一区二区三区 | www.99热.com | 日韩国产精品一区二区三区 | 在线午夜电影 | 久久国产精品视频观看 | 免费观看羞羞视频网站 | 干出白浆视频 | 国产精品久久久久久妇女6080 | av一级| 亚洲播放 | 免费欧美视频 | 欧美精品久久久久久久久老牛影院 | 国产精品色 | 荷兰欧美一级毛片 | 成人不卡 | 国产在线精品一区二区 | 亚洲精品一区二区另类图片 |