Od svojho vzniku je C++ hlavnou voľbou pre vytváranie aplikácií náročných na výkon. Jazyk však stále obsahuje niektoré zastarané postupy spôsobené jeho „dizajnom výborom“.
Dňa 19. júla 2022, počas konferencie CPP North C++ v Toronte, inžinier Google Chandler Carruth predstavil Carbon.
Zistite, čo je Carbon a ako chce uspieť v C++.
Čo je uhlík?
Inžinieri Google vyvinuli Uhlík programovací jazyk na riešenie nedostatkov C++.
Mnohé existujúce jazyky ako Golang a Rust už existujú, ktoré odzrkadľujú výkon C++ bez jeho nedostatkov. Žiaľ, tieto jazyky predstavujú značné prekážky pri migrácii existujúcich kódových báz C++.
Carbon má za cieľ byť čo je TypeScript pre JavaScript, a Kotlin je na Jave. Nejde o náhradu, ale o nástupnícky jazyk navrhnutý na základe interoperability s C++. Jeho cieľom je rozsiahle prijatie a migrácia pre existujúce kódové základne a vývojárov.
Kľúčové vlastnosti karbónu
Niektoré z kľúčových funkcií Carbonu zahŕňajú interoperabilitu C++, moderné generiká a bezpečnosť pamäte.
Interoperabilita s C++
Cieľom Carbonu je poskytnúť vývojárom C++ jemnú krivku učenia so štandardnou, konzistentnou sadou jazykových konštrukcií.
Vezmime si napríklad tento kód C++:
// C++:
#zahŕňajú
#zahŕňajú
#zahŕňajú
#zahŕňajúštrukturovaťKruh {
plavák r;
};neplatnéPrintCelková plocha(std::span
kruhy) {
plavák plocha = 0;pre (konšt Kruh& c: kruhy) {
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}};
// Implicitne vytvorí `span` z `vector`.
PrintTotalArea (kruhy);
vrátiť0;
}
V preklade do uhlíka to znamená:
// Uhlík:
balík Geometria api;
importovaťMatematika;triedaKruh{
var r: f32;
}fn PrintCelková plocha(kruhy: Plátok (kruh)) {
var plocha: f32 = 0;pre (c: Kruh v kruhoch) {
plocha += Matematika.Pi * c.r * c.r;
}Tlačiť ("Celková plocha: {0}", oblasť);
}fn Hlavné() ->; i32 {
// Pole dynamickej veľkosti, napríklad `std:: vector`.
var kruhy: Pole(Kruh) = ({.r = 1.0}, {.r = 2.0});
// Implicitne vytvorí `Slice` z `Array`.
PrintTotalArea (kruhy);
vrátiť0;
}
Môžete tiež migrovať jednu knižnicu C++ na Carbon v rámci aplikácie alebo pridať nový kód Carbon nad existujúci kód C++. Napríklad:
// Kód C++ používaný v Carbon aj C++:
štrukturovaťKruh {
plavák r;
};// Uhlík odhaľujúci funkciu pre C++:
balík Geometry api;
importovať Knižnica Cpp "kruh.h";
importovať matematika;fn PrintCelková plocha(kruhy: Plátok (Cpp. Kruh)){
var plocha: f32 = 0;pre (c: Cpp. Kruh v kruhoch) {
plocha += Mat. Pi * c.r * c.r;
}Print("Celková plocha: {0", oblasť);
}// C++ volá Carbon:
#zahŕňajú
#zahŕňajú "kruh.h"
#zahŕňajú "geometria.uhlík.h"autohlavné(int argc, char**argv) ->; int {
std::vektorkruhy = {{1.0}, {2.0}};
// Carbonov `Slice` podporuje implicitnú konštrukciu z `std:: vector`,
// podobne ako `std:: span`.
Geometria:: PrintTotalArea (kruhy);
vrátiť0;
}
Moderný systém generík
Carbon poskytuje moderný generický systém s overenými definíciami. Stále však podporuje voliteľné šablóny pre bezproblémovú interoperabilitu C++.
Tento generický systém poskytuje šablónam C++ mnoho výhod:
- Typové kontroly pre všeobecné definície. Tým sa vyhnete nákladom v čase kompilácie na opätovnú kontrolu definícií pre každú inštanciu.
- Silné, kontrolované rozhrania. Tým sa znížia náhodné závislosti od detailov implementácie a vytvorí sa explicitnejšia zmluva.
Bezpečnosť pamäte
Carbon sa snaží riešiť bezpečnosť pamäte, kľúčový problém, ktorý sužuje C++,:
- Lepšie sledovanie neinicializovaných stavov, zvýšenie vynútiteľnosti inicializácie a zabezpečenie proti inicializačným chybám.
- Navrhovanie základných rozhraní API a idiómov na podporu dynamických kontrol hraníc v ladiacich a spevnených zostavách.
- Mať predvolený režim zostavovania ladenia, ktorý je komplexnejší ako existujúce režimy zostavovania C++.
Začíname s uhlíkom
Carbon môžete preskúmať práve teraz tak, že si pozriete kódovú základňu a použijete Carbon explorer:
# Nainštalujte bazelisk pomocou Homebrew.
$ brew nainštalovať bazelisk# Nainštalujte Clang/LLVM pomocou Homebrew.
# Mnohé vydania Clang/LLVM nie sú postavené s možnosťami, na ktoré sa spoliehame.
$ brew install llvm
$ export PATH="$(brew --prefix llvm)/bin:${PATH}"# Stiahnite si kód Carbon.
$ git klonovať https://github.com/carbon-language/carbon-lang
$ cd uhlík-lang
# Zostavte a spustite prieskumníka.
$ bazel spustiť //explorer -- ./explorer/testdata/vytlačiť/format_only.carbon
Carbon's Roadmap odhaľuje dlhodobé myslenie
Podľa plánu Carbon zverejní Google experiment s vydaním základnej pracovnej verzie (0.1) do konca roka 2022. Plánujú to nasledovať s verziou 0.2 v roku 2023 a úplným vydaním 1.0 v rokoch 2024–2025.
Či bude Google schopný reprodukovať úspech ich ďalších jazykov, Golang a Kotlin, sa ešte len uvidí.