Od svého založení je C++ hlavní volbou pro vytváření aplikací náročných na výkon. Jazyk však stále obsahuje některé zastaralé postupy způsobené jeho „designem by Committee“.

Dne 19. července 2022, během konference CPP North C++ v Torontu, inženýr Google Chandler Carruth představil Carbon.

Zjistěte, co je Carbon a jak hodlá uspět v C++.

Co je uhlík?

Inženýři společnosti Google vyvinuli Uhlík programovací jazyk, který řeší nedostatky C++.

Mnoho existujících jazyky jako Golang a Rust již existují, které zrcadlí výkon C++ bez jeho nedostatků. Bohužel tyto jazyky představují značné překážky pro migraci stávajících kódových základen C++.

Carbon si klade za cíl být co je TypeScript pro JavaScripta Kotlin je na Javě. Nejedná se o náhradu, ale o nástupnický jazyk navržený pro interoperabilitu s C++. Jeho cílem je rozsáhlé přijetí a migrace pro stávající kódové základny a vývojáře.

Klíčové vlastnosti karbonu

Některé z klíčových funkcí Carbonu zahrnují interoperabilitu C++, moderní generika a bezpečnost paměti.

instagram viewer

Interoperabilita s C++

Carbon si klade za cíl poskytnout vývojářům C++ jemnou křivku učení se standardní, konzistentní sadou jazykových konstrukcí.

Vezměme například tento kód C++:

// C++:
#zahrnout
#zahrnout
#zahrnout
#zahrnout

strukturovatKruh {
plovák r;
};

prázdnotaTisk Celková plocha(std::rozpětí kruhy){
plovák plocha = 0;

pro (konst Circle& c: circles) {
plocha += M_PI * c.r * c.r;
}

std::cout << "Celková plocha: " << plocha << endl;
}

autohlavní(int argc, char**argv) ->; int {
std::vektor kruhy = {{1.0}, {2.0}};

// Implicitně vytvoří `span` z `vector`.
PrintTotalArea (kruhy);
vrátit se0;
}

V překladu do uhlíku to znamená:

// Uhlík:
balík Geometrie api;
importMatematika;

třídaKruh{
var r: f32;
}

fn Tisk Celková plocha(kruhy: Slice (Kruh)) {
var plocha: f32 = 0;

for (c: Kruh v kruzích) {
plocha += Matematika.Pi * c.r * c.r;
}

Tisk("Celková plocha: {0}", plocha);
}

fn Hlavní() ->; i32 {
// Pole s dynamickou velikostí, například `std:: vector`.
var kruhy: Pole(Kruh) = ({.r = 1.0}, {.r = 2.0});

// Implicitně vytvoří `Slice` z `Array`.
PrintTotalArea (kruhy);
vrátit se0;
}

Můžete také migrovat jednu knihovnu C++ na Carbon v rámci aplikace nebo přidat nový kód Carbon nad stávající kód C++. Například:

// Kód C++ používaný v Carbonu i C++:
strukturovatKruh {
plovák r;
};

// Uhlík odhalující funkci pro C++:
balíček Geometry api;
import Knihovna Cpp"kruh.h";
import Matematika;

fn Tisk Celková plocha(kruhy: Slice (Cpp. Kruh)){
var plocha: f32 = 0;

pro (c: Cpp. Kruh v kruzích) {
plocha += Mat. Pi * c.r * c.r;
}

Print("Celková plocha: {0}", plocha);
}

// C++ volá Carbon:
#zahrnout
#zahrnout "kruh.h"
#zahrnout "geometrie.carbon.h"

autohlavní(int argc, char**argv) ->; int {
std::vektor kruhy = {{1.0}, {2.0}};

// Carbonův `Slice` podporuje implicitní konstrukci z `std:: vector`,
// podobné jako `std:: span`.
Geometrie:: PrintTotalArea (kruhy);
vrátit se0;
}

Moderní generický systém

Carbon poskytuje moderní generický systém s ověřenými definicemi. Stále však podporuje nepovinné šablony pro bezproblémovou interoperabilitu C++.

Tento obecný systém poskytuje šablonám C++ mnoho výhod:

  • Typové kontroly pro obecné definice. Tím se vyhnete nákladům v době kompilace na opětovnou kontrolu definic pro každou instanci.
  • Silná, prověřená rozhraní. Ty snižují náhodné závislosti na detailech implementace a vytvářejí explicitnější smlouvu.

Bezpečnost paměti

Carbon se snaží řešit bezpečnost paměti, klíčový problém sužující C++, pomocí:

  • Lepší sledování neinicializovaných stavů, zvýšení vynucení inicializace a posílení proti chybám inicializace.
  • Navrhování základních API a idiomů pro podporu dynamických kontrol hranic v ladicích a zesílených sestavách.
  • Mít výchozí režim sestavení ladění, který je obsáhlejší než stávající režimy sestavení C++.

Začínáme s uhlíkem

Carbon můžete prozkoumat hned teď, když si prohlédnete kódovou základnu a použijete Carbon explorer:

# Nainstalujte bazelisk pomocí Homebrew.
$ brew install bazelisk

# Nainstalujte Clang/LLVM pomocí Homebrew.
# Mnoho vydání Clang/LLVM není postaveno s možnostmi, na které se spoléháme.
$ brew install llvm
$ vývozní PATH="$(brew --prefix llvm)/bin:${PATH}"

# Stáhněte si kód Carbon.
$ git klon https://github.com/carbon-language/carbon-lang
$ CD uhlík-lang

# Sestavte a spusťte průzkumníka.
$ bazel spustit //explorer -- ./explorer/testdata/tisk/format_only.carbon

Carbonův plán odhaluje dlouhodobé myšlení

Podle plánu Carbon zpřístupní Google experiment veřejnosti vydáním základní pracovní verze (0.1) do konce roku 2022. Plánují to následovat s verzí 0.2 v roce 2023 a plnou verzí 1.0 v letech 2024–2025.

Zda bude Google schopen reprodukovat úspěch jejich dalších jazyků, Golang a Kotlin, se teprve uvidí.