Sejak awal, C++ telah menjadi pilihan utama untuk membangun aplikasi yang intensif kinerja. Tetapi bahasa tersebut masih menampilkan beberapa praktik usang yang disebabkan oleh "desain oleh panitia".

Pada 19 Juli 2022, selama konferensi CPP Utara C++ di Toronto, insinyur Google Chandler Carruth memperkenalkan Karbon.

Cari tahu apa itu Carbon dan bagaimana caranya agar berhasil di C++.

Apa itu Karbon?

Insinyur Google mengembangkan Karbon bahasa pemrograman untuk mengatasi kekurangan C++.

Banyak yang ada bahasa seperti Golang dan Rust sudah ada yang mencerminkan kinerja C++ tanpa kekurangannya. Sayangnya, bahasa-bahasa ini menghadirkan hambatan signifikan untuk migrasi basis kode C++ yang ada.

Karbon bertujuan untuk menjadi apa itu TypeScript untuk JavaScript, dan Kotlin untuk Java. Ini bukan pengganti, tetapi bahasa penerus yang dirancang untuk interoperabilitas dengan C++. Ini bertujuan untuk adopsi dan migrasi skala besar untuk basis kode dan pengembang yang ada.

Fitur Utama Karbon

Beberapa fitur utama Carbon termasuk interoperabilitas C++, generik modern, dan keamanan memori.

instagram viewer

Interoperabilitas Dengan C++

Carbon bertujuan untuk memberikan kurva pembelajaran yang lembut bagi pengembang C++, dengan serangkaian konstruksi bahasa yang standar dan konsisten.

Misalnya, ambil kode C++ ini:

// C++:
#termasuk
#termasuk
#termasuk
#termasuk

strukturLingkaran {
mengambang r;
};

ruang kosongCetakTotalArea(std::menjangkau lingkaran){
mengambang luas = 0;

untuk (konstan Lingkaran& c: lingkaran) {
luas += M_PI * c.r * c.r;
}

std::cout << "Jumlah luas: " << luas << akhir;
}

mobilutama(ke dalam argc, arang** argv) ->; ke dalam {
std::vektor lingkaran = {{1.0}, {2.0}};

// Secara implisit membangun `span` dari `vektor`.
PrintTotalArea (lingkaran);
kembali0;
}

Diterjemahkan ke Karbon, menjadi:

// Karbon:
kemasan Geometri api;
impormatematika;

kelasLingkaran{
var r: f32;
}

fn CetakTotalArea(lingkaran: Irisan (Lingkaran)) {
var luas: f32 = 0;

for (c: Lingkaran dalam lingkaran) {
luas += matematika.Pi * c.r * c.r;
}

Mencetak("Luas keseluruhan: {0}", daerah);
}

fn Utama() ->; i32 {
// Array berukuran dinamis, seperti `std:: vector`.
var lingkaran: Himpunan(Lingkaran) = ({.r = 1.0}, {.r = 2.0});

// Secara implisit membangun `Slice` dari `Array`.
PrintTotalArea (lingkaran);
kembali0;
}

Anda juga dapat memigrasikan satu pustaka C++ ke Karbon dalam aplikasi atau menambahkan kode Karbon baru di atas kode C++ yang ada. Sebagai contoh:

// Kode C++ yang digunakan dalam Carbon dan C++:
strukturLingkaran {
mengambang r;
};

// Karbon mengekspos fungsi untuk C++:
paket Geometri api;
impor perpustakaan cpp"lingkaran.h";
impor Matematika;

fn CetakTotalArea(lingkaran: Irisan (Bpk. Lingkaran)){
luas var: f32 = 0;

untuk (c: Bpk. Lingkari dalam lingkaran) {
luas += Matematika. Pi * c.r * c.r;
}

Cetak("Jumlah luas: {0}", luas);
}

// C++ memanggil Karbon:
#termasuk
#termasuk "lingkaran.h"
#termasuk "geometry.carbon.h"

mobilutama(ke dalam argc, arang** argv) ->; ke dalam {
std::vektor lingkaran = {{1.0}, {2.0}};

// `Slice` Carbon mendukung konstruksi implisit dari `std:: vector`,
// mirip dengan `std:: span`.
Geometri:: PrintTotalArea (lingkaran);
kembali0;
}

Sistem Generik Modern

Karbon menyediakan sistem generik modern dengan definisi yang diperiksa. Tetapi masih mendukung templat keikutsertaan untuk interoperabilitas C++ yang mulus.

Sistem generik ini memberikan banyak keuntungan untuk template C++:

  • Jenis-cek untuk definisi umum. Ini menghindari biaya waktu kompilasi untuk memeriksa ulang definisi untuk setiap instantiasi.
  • Antarmuka yang kuat dan diperiksa. Ini mengurangi ketergantungan yang tidak disengaja pada detail implementasi dan membuat kontrak yang lebih eksplisit.

Keamanan Memori

Carbon berupaya mengatasi keamanan memori, masalah utama yang mengganggu C++, dengan:

  • Melacak status yang tidak diinisialisasi dengan lebih baik, meningkatkan penegakan inisialisasi, dan memperkuat terhadap bug inisialisasi.
  • Merancang API dan idiom dasar untuk mendukung pemeriksaan batas dinamis dalam debug dan build yang dikeraskan.
  • Memiliki mode build debug default yang lebih komprehensif daripada mode build C++ yang ada.

Memulai Dengan Karbon

Anda dapat menjelajahi Carbon sekarang dengan memeriksa basis kode dan menggunakan Carbon explorer:

# Instal bazelisk menggunakan Homebrew.
$ brew install bazelisk

# Instal Dentang/LLVM menggunakan Homebrew.
# Banyak rilis Dentang/LLVM tidak dibuat dengan opsi yang kami andalkan.
$ brew install llvm
$ ekspor PATH="$(brew --prefix llvm)/bin:${PATH}"

# Unduh kode Carbon.
$ git klon https://github.com/carbon-language/carbon-lang
$ CD karbon-lang

# Bangun dan jalankan penjelajah.
$ bazel jalankan //explorer -- ./explorer/testdata/mencetak/format_only.carbon

Peta Jalan Karbon Mengungkapkan Pemikiran Jangka Panjang

Menurut peta jalan Karbon, Google akan mempublikasikan eksperimen dengan merilis versi kerja inti (0,1) pada akhir 2022. Mereka berencana untuk mengikuti ini dengan versi 0.2 pada tahun 2023 dan rilis 1.0 penuh pada tahun 2024–2025.

Apakah Google akan dapat mereproduksi kesuksesan bahasa mereka yang lain, Golang dan Kotlin, masih harus dilihat.