Od svojega začetka je bil C++ glavna izbira za gradnjo visokozmogljivih aplikacij. Toda jezik še vedno vsebuje nekaj zastarelih praks, ki jih je povzročilo njegovo "oblikovanje odbora".
19. julija 2022 je med konferenco CPP North C++ v Torontu Googlov inženir Chandler Carruth predstavil Carbon.
Ugotovite, kaj je Carbon in kako namerava naslediti C++.
Kaj je Carbon?
Googlovi inženirji so razvili Ogljik programskega jezika za odpravo pomanjkljivosti C++.
Veliko obstoječih jezikov, kot je golang in Rust že obstajata, ki odražata delovanje C++ brez njegovih pomanjkljivosti. Na žalost ti jeziki predstavljajo pomembne ovire za selitev obstoječih kodnih baz C++.
Carbon želi biti kaj je TypeScript za JavaScript, Kotlin pa za Javo. Ne gre za nadomestek, ampak za naslednika jezika, zasnovanega na podlagi interoperabilnosti s C++. Prizadeva si za obsežno sprejetje in selitev za obstoječe kodne baze in razvijalce.
Ključne značilnosti ogljika
Nekatere ključne lastnosti Carbona vključujejo interoperabilnost C++, sodobne generike in varnost pomnilnika.
Interoperabilnost s C++
Cilj Carbon je zagotoviti nežno učno krivuljo za razvijalce C++ s standardnim, doslednim nizom jezikovnih konstruktov.
Na primer, vzemite to kodo C++:
// C++:
#vključujejo
#vključujejo
#vključujejo
#vključujejostructKrog {
lebdi r;
};prazninaPrintTotalArea(std::razpon
krogi) {
lebdi območje = 0;za (konst Krog& c: krogi) {
območje += M_PI * c.r * c.r;
}std::cout << "Skupna površina: " << površina << konec;
}avtoglavni(int argc, char** argv) ->; int {
std::vektorkrogi = {{1.0}, {2.0}};
// Implicitno sestavi `span` iz `vektorja`.
PrintTotalArea (krogi);
vrnitev0;
}
Prevedeno v ogljik postane:
// Ogljik:
paket Geometry api;
uvozmatematika;razredKrog{
var r: f32;
}fn PrintTotalArea(obkroži: rezina (krog)) {
var območje: f32 = 0;za (c: krog v krogih) {
območje += matematika.Pi * c.r * c.r;
}Natisni ("Skupna površina: {0}", območje);
}fn Glavni() ->; i32 {
// Dinamična matrika, kot je `std:: vector`.
var krogi: Array(Krog) = ({.r = 1.0}, {.r = 2.0});
// Implicitno sestavi `Slice` iz `Array`.
PrintTotalArea (krogi);
vrnitev0;
}
Posamezno knjižnico C++ lahko tudi preselite v Carbon znotraj aplikacije ali dodate novo kodo Carbon poleg obstoječe kode C++. Na primer:
// Koda C++, uporabljena v Carbonu in C++:
structKrog {
lebdi r;
};// Carbon izpostavi funkcijo za C++:
paket Geometry api;
uvoz Cpp knjižnica "krog.h";
uvoz matematika;fn PrintTotalArea(obkroži: Rezina (Cpp. Krog)){
var območje: f32 = 0;za (c: Cpp. Krog v krogih) {
območje += Math. Pi * c.r * c.r;
}Print("Skupna površina: {0}", območje);
}// C++ kliče Carbon:
#vključujejo
#vključujejo "krog.h"
#vključujejo "geometry.carbon.h"avtoglavni(int argc, char** argv) ->; int {
std::vektorkrogi = {{1.0}, {2.0}};
// Carbonov `Slice` podpira implicitno konstrukcijo iz `std:: vector`,
// podobno kot `std:: span`.
Geometrija:: PrintTotalArea (krogi);
vrnitev0;
}
Sodoben generični sistem
Carbon ponuja sodoben generični sistem s preverjenimi definicijami. Vendar še vedno podpira opt-in predloge za brezhibno interoperabilnost C++.
Ta generični sistem ponuja veliko prednosti predlogam C++:
- Preverjanje tipov za generične definicije. S tem se izognete stroškom v času prevajanja ponovnega preverjanja definicij za vsako instanciacijo.
- Močni, preverjeni vmesniki. Ti zmanjšajo nenamerne odvisnosti od podrobnosti izvedbe in ustvarijo bolj jasno pogodbo.
Varnost pomnilnika
Carbon poskuša rešiti varnost pomnilnika, ključno težavo, ki pesti C++, tako da:
- Boljše sledenje neinicializiranim stanjem, povečanje uveljavljanja inicializacije in odpornost proti napakam pri inicializaciji.
- Oblikovanje temeljnih API-jev in idiomov za podporo preverjanj dinamičnih meja pri odpravljanju napak in utrjenih zgradbah.
- Imeti privzeti način gradnje za odpravljanje napak, ki je bolj celovit od obstoječih načinov gradnje C++.
Začetek uporabe ogljika
Carbon lahko raziščete zdaj, tako da preverite kodno zbirko in uporabite Carbon explorer:
# Namestite bazelisk z uporabo Homebrew.
$ brew namestite bazelisk# Namestite Clang/LLVM z uporabo Homebrew.
# Številne izdaje Clang/LLVM niso zgrajene z možnostmi, na katere se zanašamo.
$ brew namestite llvm
$ izvoz PATH="$(brew --prefix llvm)/bin:${PATH}"# Prenesite kodo Carbon.
$ git klon https://github.com/carbon-language/carbon-lang
$ cd ogljikov-lang
# Zgradite in zaženite raziskovalca.
$ bazel run //raziskovalec -- ./explorer/testdata/tiskanje/format_only.carbon
Carbon's Roadmap razkriva dolgoročno razmišljanje
V skladu z načrtom Carbon bo Google eksperiment javno objavil z izdajo osnovne delovne različice (0.1) do konca leta 2022. Temu nameravajo slediti z različico 0.2 leta 2023 in popolno izdajo 1.0 v letih 2024–2025.
Ali bo Googlu uspelo ponoviti uspeh njihovih drugih jezikov, Golang in Kotlin, bomo še videli.