Alates selle loomisest on C++ olnud parim valik jõudlusmahukate rakenduste ehitamiseks. Kuid keeles on endiselt mõned vananenud tavad, mis on põhjustatud selle "komisjoni kavandamisest".

Google'i insener Chandler Carruth tutvustas 19. juulil 2022 Torontos CPP North C++ konverentsi ajal Carbonit.

Uurige, mis on Carbon ja kuidas see kavatseb C++-s edu saavutada.

Mis on süsinik?

Google'i insenerid töötasid välja Süsinik programmeerimiskeelt, et kõrvaldada C++ puudused.

Paljud olemasolevad keeli nagu Golang ja Rust on juba olemas, mis peegeldavad C++ jõudlust ilma selle puudusteta. Kahjuks kujutavad need keeled olemasolevate C++ koodibaaside migratsioonile olulisi takistusi.

Süsiniku eesmärk on olla mis on TypeScript JavaScriptile, ja Kotlin on Javasse. See ei ole asenduskeel, vaid järglane keel, mis on loodud C++-ga koostalitlusvõimele. Selle eesmärk on olemasolevate koodibaaside ja arendajate ulatuslik kasutuselevõtt ja migreerimine.

Süsiniku peamised omadused

Mõned Carboni põhifunktsioonid hõlmavad C++ koostalitlusvõimet, kaasaegseid üldisi ravimeid ja mälu ohutust.

instagram viewer

Koostalitlusvõime C++-ga

Carboni eesmärk on pakkuda C++ arendajatele leebe õppimiskõverat standardse ja ühtse keelekonstruktsioonide komplektiga.

Näiteks võtke see C++ kood:

// C++:
#sisaldama
#sisaldama
#sisaldama
#sisaldama

struktuurRing {
ujuk r;
};

tühinePrintTotalArea(std::span ringid){
ujuk ala = 0;

jaoks (konst Ring ja c: ringid) {
ala += M_PI * c.r * c.r;
}

std::cout << "Kogupindala: " << pindala << endl;
}

autopeamine(int argc, char** argv) ->; int {
std::vektor ringid = {{1.0}, {2.0}};

// Ehitab kaudselt vahemiku 'vektor'.
PrintTotalArea (ringid);
tagasi0;
}

Süsinikeks tõlgituna saab sellest:

// Süsinik:
pakett Geomeetria api;
importidamatemaatika;

klassRing{
var r: f32;
}

fn PrintTotalArea(ringid: viil (ring)) {
var pindala: f32 = 0;

for (c: ringkond ringides) {
ala += matemaatika.Pi * c.r * c.r;
}

Prindi("Kogupindala: {0}", ala);
}

fn Peamine() ->; i32 {
// Dünaamilise suurusega massiiv, näiteks "std:: vektor".
var ringid: Massiiv(Ring) = ({.r = 1.0}, {.r = 2.0});

// Ehitab kaudselt massiivist 'Slice'.
PrintTotalArea (ringid);
tagasi0;
}

Samuti saate rakenduses migreerida ühe C++ teegi Carboni või lisada olemasolevale C++ koodile uue süsinikukoodi. Näiteks:

// C++ kood, mida kasutatakse nii süsiniku kui ka C++ puhul:
struktuurRing {
ujuk r;
};

// Süsinik paljastab C++ funktsiooni:
pakett Geomeetria api;
importida CPP teek "ring.h";
importida matemaatika;

fn PrintTotalArea(ringid: viil (Cpp. Ring)){
vari pindala: f32 = 0;

jaoks (c: Cpp. Ring suhtlusringides) {
ala += matemaatika. Pi * c.r * c.r;
}

Print("Kogupindala: {0}", ala);
}

// C++ kutsuv süsinik:
#sisaldama
#sisaldama "ring.h"
#sisaldama "geomeetria.süsinik.h"

autopeamine(int argc, char** argv) ->; int {
std::vektor ringid = {{1.0}, {2.0}};

// Carboni 'Slice' toetab kaudset konstrueerimist std:: vektorist,
// sarnane `std:: span`ga.
Geomeetria:: PrintTotalArea (ringid);
tagasi0;
}

Kaasaegne geneeriliste ravimite süsteem

Carbon pakub kontrollitud määratlustega kaasaegset geneeriliste ravimite süsteemi. Kuid see toetab siiski sujuva C++ koostalitlusvõime jaoks lubatavaid malle.

See üldine süsteem pakub C++ mallidele palju eeliseid:

  • Ülddefinitsioonide tüübikontroll. See väldib definitsioonide uuesti kontrollimise iga eksemplari kompileerimisaja kulu.
  • Tugevad, kontrollitud liidesed. Need vähendavad juhuslikku sõltuvust rakendamise üksikasjadest ja loovad selgesõnalisema lepingu.

Mälu ohutus

Carbon püüab lahendada mälu ohutuse, mis on C++ põhiprobleem, järgmiselt:

  • Initsialiseerimata olekute parem jälgimine, initsialiseerimise jõustamise suurendamine ja initsialiseerimisvigade vastu võitlemine.
  • Põhiliste API-de ja idioomide kujundamine, et toetada dünaamiliste piiride kontrollimist silumisel ja tugevdatud järgus.
  • Vaikimisi silumise ehitusrežiim, mis on põhjalikum kui C++ olemasolevad ehitusrežiimid.

Carboniga alustamine

Saate kohe uurida Carbonit, kontrollides koodibaasi ja kasutades Carbon explorerit:

# Installige bazelisk, kasutades Homebrew'i.
$ brew installige bazelisk

# Installige Clang / LLVM, kasutades Homebrew'i.
# Paljud Clangi/LLVM-i versioonid ei ole koostatud valikutega, millele me tugineme.
$ brew installige llvm
$ eksportida PATH="$(pruulima --prefix llvm)/bin:${PATH}"

# Laadige alla Carboni kood.
$ git kloon https://github.com/carbon-language/carbon-lang
$ cd süsinik-lang

# Ehitage ja käivitage explorer.
$ bazel run //explorer -- ./explorer/testdata/printida/format_only.carbon

Carboni tegevuskava näitab pikaajalist mõtlemist

Carboni tegevuskava kohaselt teeb Google katse avalikuks, tuues välja põhilise tööversiooni (0.1) 2022. aasta lõpuks. Nad kavatsevad seda järgida 0.2 versiooniga 2023. aastal ja täieliku versiooniga 1.0 aastatel 2024–2025.

Kas Google suudab reprodutseerida nende teiste keelte, Golangi ja Kotlini, edu, jääb alles näha.