Başlangıcından bu yana C++, performans açısından yoğun uygulamalar oluşturmak için birincil seçim olmuştur. Ancak dil, “komite tasarımından” kaynaklanan bazı modası geçmiş uygulamalara sahiptir.

19 Temmuz 2022'de Toronto'daki CPP North C++ konferansı sırasında Google mühendisi Chandler Carruth Carbon'u tanıttı.

Carbon'un ne olduğunu ve C++'ı nasıl başarmayı amaçladığını öğrenin.

Karbon nedir?

Google mühendisleri, Karbon C++'ın eksikliklerini gidermek için programlama dili.

Mevcut birçok Golang gibi diller ve Rust, eksiklikleri olmadan C++ performansını yansıtan zaten var. Ne yazık ki, bu diller, mevcut C++ kod tabanlarının geçişi için önemli engeller oluşturmaktadır.

Karbon olmayı hedefliyor JavaScript için TypeScript nedir, ve Kotlin Java içindir. Bir ikame değil, C++ ile birlikte çalışabilirlik etrafında tasarlanmış halefi bir dildir. Mevcut kod tabanları ve geliştiriciler için büyük ölçekli benimsemeyi ve geçişi amaçlar.

Karbonun Temel Özellikleri

Carbon'un temel özelliklerinden bazıları C++ birlikte çalışabilirliği, modern jenerikler ve bellek güvenliğini içerir.

instagram viewer

C++ ile Birlikte Çalışabilirlik

Carbon, standart, tutarlı bir dil yapıları seti ile C++ geliştiricileri için yumuşak bir öğrenme eğrisi sağlamayı amaçlar.

Örneğin, bu C++ kodunu alın:

// C++:
#Dahil etmek
#Dahil etmek
#Dahil etmek
#Dahil etmek

yapıDaire {
batmadan yüzmek r;
};

geçersizBaskıToplamAlan(standart::açıklık daireler){
batmadan yüzmek alan = 0;

için (const Daire& c: daireler) {
alan += M_PI * c.r * c.r;
}

standart::cout << "Toplam alan: " << alan << son;
}

Otoana(int argc, karakter** bağımsız değişken) ->; int {
standart::vektör çevreler = {{1.0}, {2.0}};

// "vektör"den örtük olarak "span"ı oluşturur.
PrintTotalArea (daireler);
dönüş0;
}

Carbon'a çevrildiğinde, şu hale gelir:

// Karbon:
paket Geometri API'si;
içe aktarmakMatematik;

sınıfDaire{
var r: f32;
}

fn BaskıToplamAlan(daireler: Dilim (Daire)) {
var alan: f32 = 0;

for (c: Daireler içinde daire) {
alan += Matematik.Pi * c.r * c.r;
}

Yazdır("Toplam alan: {0}", alan);
}

fn Ana() ->; i32 {
// 'std:: vector' gibi dinamik olarak boyutlandırılmış bir dizi.
var çevreler: Dizi(Daire) = ({.r = 1.0}, {.r = 2.0});

// 'Dizi'den örtük olarak 'Dilim'i oluşturur.
PrintTotalArea (daireler);
dönüş0;
}

Ayrıca bir uygulama içinde tek bir C++ kitaplığını Carbon'a taşıyabilir veya mevcut C++ kodunun üzerine yeni Carbon kodu ekleyebilirsiniz. Örneğin:

// Hem Carbon hem de C++'da kullanılan C++ kodu:
yapıDaire {
batmadan yüzmek r;
};

// C++ için bir işlevi açığa çıkaran karbon:
paket Geometri api;
içe aktarmak Cpp kitaplığı "daire.h";
içe aktarmak Matematik;

fn BaskıToplamAlan(daireler: Dilim (Cpp. Daire)){
var alan: f32 = 0;

için (c: Kpp. Daire içinde daire) {
alan += Matematik. Pi * c.r * c.r;
}

Print("Toplam alan: {0}", alan);
}

// C++, Carbon'u çağırıyor:
#Dahil etmek
#Dahil etmek "daire.h"
#Dahil etmek "geometri.karbon.h"

Otoana(int argc, karakter** bağımsız değişken) ->; int {
standart::vektör çevreler = {{1.0}, {2.0}};

// Carbon'un 'Dilim'i, 'std:: vector'dan örtük yapıyı destekler,
// `std:: span` ile benzer.
Geometri:: PrintTotalArea (daireler);
dönüş0;
}

Modern Bir Jenerik Sistem

Carbon, kontrol edilmiş tanımlara sahip modern bir jenerik ilaç sistemi sağlar. Ancak yine de sorunsuz C++ birlikte çalışabilirliği için katılım şablonlarını destekler.

Bu jenerik sistem, C++ şablonlarına birçok avantaj sağlar:

  • Genel tanımlar için tip kontrolleri. Bu, her örnekleme için tanımları yeniden kontrol etmenin derleme zamanı maliyetini ortadan kaldırır.
  • Güçlü, kontrol edilmiş arayüzler. Bunlar, uygulama ayrıntılarına tesadüfi bağımlılıkları azaltır ve daha açık bir sözleşme oluşturur.

Bellek Güvenliği

Carbon, C++'ın başına bela olan önemli bir sorun olan bellek güvenliğini şu yollarla ele almaya çalışıyor:

  • Başlatılmamış durumları daha iyi izleme, başlatma zorlamasını artırma ve başlatma hatalarına karşı sertleştirme.
  • Hata ayıklama ve sağlamlaştırılmış yapılarda dinamik sınır denetimlerini desteklemek için temel API'ler ve deyimler tasarlama.
  • C++'ın mevcut derleme modlarından daha kapsamlı bir varsayılan hata ayıklama derleme moduna sahip olmak.

Karbona Başlarken

Şu anda kod tabanını kontrol ederek ve Carbon gezgini kullanarak Carbon'u keşfedebilirsiniz:

# Homebrew kullanarak bazelisk yükleyin.
$ demlemek bazelisk yükleyin

# Homebrew kullanarak Clang/LLVM'yi kurun.
# Birçok Clang/LLVM sürümü, güvendiğimiz seçeneklerle oluşturulmamıştır.
$ demlemek llvm yükleyin
$ ihracat PATH="$(brew --prefix llvm)/bin:${YOL}"

# Carbon'un kodunu indirin.
$ git klon https://github.com/carbon-language/carbon-lang
$ CD karbon dili

# Gezgini oluştur ve çalıştır.
$ bazel çalıştırma //explorer -- ./explorer/testdata/Yazdır/format_only.carbon

Carbon'un Yol Haritası Uzun Vadeli Düşünmeyi Ortaya Çıkarıyor

Carbon yol haritasına göre Google, 2022'nin sonuna kadar çekirdek çalışan bir sürümün (0.1) yayınlanmasıyla deneyi herkese açık hale getirecek. Bunu 2023'te 0.2 sürümü ve 2024-2025'te tam 1.0 sürümü ile takip etmeyi planlıyorlar.

Google'ın diğer dilleri Golang ve Kotlin'in başarısını yeniden üretip üretemeyeceği henüz görülmedi.