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.
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
#zahrnoutstrukturovatKruh {
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::vektorkruhy = {{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::vektorkruhy = {{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í.