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++

instagram viewer

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::vektor kruhy = {{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::vektor kruhy = {{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í.