Giới thiệu Carbon, Người kế nhiệm Thử nghiệm của Google cho C ++

Kể từ khi ra đời, C ++ đã là sự lựa chọn hàng đầu để xây dựng các ứng dụng chuyên sâu về hiệu suất. Nhưng ngôn ngữ này vẫn có một số thực tiễn lỗi thời do “thiết kế của ủy ban” gây ra.
Vào ngày 19 tháng 7 năm 2022, trong hội nghị CPP North C ++ ở Toronto, kỹ sư Chandler Carruth của Google đã giới thiệu Carbon.
Tìm hiểu Carbon là gì và nó dự định thành công như thế nào với C ++.
Mục Lục
Carbon là gì?
Các kỹ sư của Google đã phát triển ngôn ngữ lập trình Carbon để giải quyết những thiếu sót của C ++.
Nhiều ngôn ngữ hiện có như Golang và Rust đã tồn tại phản ánh hiệu suất của C ++ mà không có thiếu sót của nó. Thật không may, những ngôn ngữ này có những rào cản đáng kể đối với việc di chuyển các cơ sở mã C ++ hiện có.
Carbon nhằm mục đích là TypeScript là JavaScript và Kotlin là Java. Nó không phải là một ngôn ngữ thay thế, mà là một ngôn ngữ kế thừa được thiết kế xung quanh khả năng tương tác với C ++. Nó nhằm mục đích chấp nhận và di chuyển quy mô lớn cho các cơ sở mã và nhà phát triển hiện có.
Các tính năng chính của Carbon
Một số tính năng chính của Carbon bao gồm khả năng tương tác C ++, generic hiện đại và an toàn bộ nhớ.
Khả năng tương tác với C ++
Carbon nhằm mục đích cung cấp một đường cong học tập nhẹ nhàng cho các nhà phát triển C ++, với một bộ cấu trúc ngôn ngữ chuẩn, nhất quán.
Ví dụ: lấy mã C ++ này:
#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}};
PrintTotalArea(circles);
return 0;
}
Được dịch sang Carbon, nó trở thành:
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 {
var circles: Array(Circle) = ({.r = 1.0}, {.r = 2.0});
PrintTotalArea(circles);
return 0;
}
Bạn cũng có thể di chuyển một thư viện C ++ duy nhất sang Carbon trong một ứng dụng hoặc thêm mã Carbon mới lên trên mã C ++ hiện có. Ví dụ:
struct Circle {
float r;
};
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);
}
#include <vector>
#include "circle.h"
#include "geometry.carbon.h"
auto main(int argc, char** argv) -> int {
std::vector<Circle> circles = {{1.0}, {2.0}};
Geometry::PrintTotalArea(circles);
return 0;
}
Hệ thống Generics hiện đại
Carbon cung cấp một hệ thống generic hiện đại với các định nghĩa đã được kiểm tra. Nhưng nó vẫn hỗ trợ các mẫu chọn tham gia để có khả năng tương tác C ++ liền mạch.
Hệ thống generics này cung cấp rất nhiều lợi thế cho các mẫu C ++:
- Kiểm tra kiểu cho các định nghĩa chung. Điều này giúp tránh chi phí thời gian biên dịch của việc kiểm tra lại các định nghĩa cho mỗi lần khởi tạo.
- Giao diện mạnh mẽ, được kiểm tra. Những điều này làm giảm sự phụ thuộc ngẫu nhiên vào các chi tiết triển khai và tạo ra một hợp đồng rõ ràng hơn.
An toàn bộ nhớ
Carbon tìm cách giải quyết vấn đề an toàn bộ nhớ, một vấn đề quan trọng đang gây ra cho C ++, bằng cách:
- Theo dõi các trạng thái chưa được khởi tạo tốt hơn, tăng cường thực thi khởi tạo và tăng cường chống lại các lỗi khởi tạo.
- Thiết kế các API và thành ngữ cơ bản để hỗ trợ kiểm tra giới hạn động trong các bản dựng gỡ lỗi và cứng.
- Có chế độ xây dựng gỡ lỗi mặc định toàn diện hơn các chế độ xây dựng hiện có của C ++.
Bắt đầu với Carbon
Bạn có thể khám phá Carbon ngay bây giờ bằng cách kiểm tra codebase và sử dụng Carbon explorer:
$ brew install bazelisk
$ brew install llvm
$ export PATH="$(brew --prefix llvm)/bin:${PATH}"
$ git clone https://github.com/carbon-language/carbon-lang
$ cd carbon-lang
$ bazel run //explorer -- ./explorer/testdata/print/format_only.carbon
Lộ trình của Carbon tiết lộ tư duy dài hạn
Theo lộ trình Carbon, Google sẽ công khai thử nghiệm với việc phát hành phiên bản hoạt động cốt lõi (0.1) vào cuối năm 2022. Họ dự định sẽ làm theo điều này với phiên bản 0.2 vào năm 2023 và phiên bản 1.0 đầy đủ vào năm 2024–2025.
Liệu Google có thể tái tạo thành công của các ngôn ngữ khác của họ, Golang và Kotlin hay không vẫn còn phải xem.