Başlangıcından bu yana, C++, performans açısından yoğun uygulamalar oluşturmak için birincil tercih olmuştur. Ancak dil, “komite tarafından tasarlandığından” kaynaklanan bazı modası geçmiş uygulamaları hâlâ içeriyor.
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++’da başarılı olmayı nasıl amaçladığını öğrenin.
Karbon Nedir?
Google mühendisleri , C++’ın eksikliklerini gidermek için Carbon programlama dilini geliştirdi.
Golang ve Rust gibi birçok mevcut dil , eksiklikleri olmadan C++ performansını yansıtan zaten mevcuttur. Ne yazık ki, bu diller mevcut C++ kod tabanlarının geçişinde önemli engeller oluşturmaktadır.
Carbon, JavaScript için TypeScript ve Java için Kotlin neyse o olmayı hedefler. Bu bir ikame değil, C++ ile birlikte çalışabilirlik etrafında tasarlanmış halef bir dildir. Mevcut kod tabanları ve geliştiriciler için büyük ölçekli benimseme ve taşımayı 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.
C++ ile Birlikte Çalışabilirlik
Carbon, C++ geliştiricileri için standart, tutarlı bir dizi dil yapısıyla yumuşak bir öğrenme eğrisi sağlamayı amaçlar.
Örneğin, bu C++ kodunu alın:
// 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’a çevrildiğinde şöyle olur:
// 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;
}
Ayrıca tek bir C++ kitaplığını bir uygulama içinde Carbon’a taşıyabilir veya mevcut C++ kodunun üzerine yeni Carbon kodu ekleyebilirsiniz. Örneğin:
// 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;
}
Modern Bir Jenerik Sistem
Carbon, kontrol edilmiş tanımlarla modern bir jenerik sistem 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ı maliyetinden kaçınır.
Güçlü, kontrol edilmiş arayüzler. Bunlar, uygulama ayrıntılarındaki kazara bağımlılıkları azaltır ve daha açık bir sözleşme oluşturur.
Bellek Güvenliği
Carbon, C++’ı rahatsız eden önemli bir sorun olan bellek güvenliğini şu şekilde ele almaya çalışıyor:
Başlatılmamış durumları daha iyi izleme, başlatma zorlamasını artırma ve başlatma hatalarına karşı sağlamlaştırma.
Hata ayıklama ve sağlamlaştırılmış yapılarda dinamik sınır kontrollerini desteklemek için temel API’ler ve deyimler tasarlama.
C++’ın mevcut yapı modlarından daha kapsamlı bir varsayılan hata ayıklama yapı moduna sahip olmak.
Karbona Başlarken
Kod tabanını kontrol ederek ve Carbon explorer’ı kullanarak hemen Carbon’u keşfedebilirsiniz:
# Install bazelisk using Homebrew.
$ brew install bazelisk
# Install Clang/LLVM using Homebrew.
# Many Clang/LLVM releases aren’t built with options we rely on.
$ brew install llvm
$ export PATH=”$(brew –prefix llvm)/bin:${PATH}”
# Download Carbon’s code.
$ git clone https://github.com/carbon-language/carbon-lang
$ cd carbon-lang
# Build and run the explorer.
$ bazel run //explorer — ./explorer/testdata/print/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üyle takip etmeyi planlıyorlar.
Carbon’un Golang ve Kotlin gibi diğer dillerin başarısını yeniden üretip üretemeyeceği henüz belli değil.