C++ on alusta asti ollut ensisijainen valinta suorituskykyintensiivisten sovellusten rakentamiseen. Mutta kielessä on edelleen joitain vanhentuneita käytäntöjä, jotka johtuvat sen "komitean suunnittelusta".

19. heinäkuuta 2022 CPP North C++ -konferenssissa Torontossa Googlen insinööri Chandler Carruth esitteli Carbonin.

Ota selvää, mitä Carbon on ja miten se aikoo menestyä C++:ssa.

Mikä on hiili?

Googlen insinöörit kehittivät Hiili ohjelmointikieltä C++:n puutteiden korjaamiseksi.

Monet olemassa olevat kielet, kuten Golang ja Rust ovat jo olemassa, jotka heijastavat C++:n suorituskykyä ilman sen puutteita. Valitettavasti nämä kielet muodostavat merkittäviä esteitä olemassa olevien C++-koodikantojen siirtymiselle.

Carbon pyrkii olemaan mitä TypeScript on JavaScriptille, ja Kotlin on Javalle. Se ei ole korvaava kieli, vaan seuraajakieli, joka on suunniteltu yhteentoimivuuteen C++:n kanssa. Sen tavoitteena on laajamittainen käyttöönotto ja siirto olemassa oleville koodikantoille ja kehittäjille.

instagram viewer

Hiilen tärkeimmät ominaisuudet

Jotkut Carbonin tärkeimmistä ominaisuuksista ovat C++-yhteensopivuus, modernit geneeriset tuotteet ja muistin turvallisuus.

Yhteentoimivuus C++:n kanssa

Carbon pyrkii tarjoamaan lempeän oppimiskäyrän C++-kehittäjille standardin ja johdonmukaisen kielirakenteen avulla.

Otetaan esimerkiksi tämä C++-koodi:

// C++:
#sisältää
#sisältää
#sisältää
#sisältää

structYmpyrä {
kellua r;
};

mitätönTulostaTotalArea(std::span piirit){
kellua alue = 0;

varten (konst ympyrä& c: piirit) {
alue += M_PI * c.r * c.r;
}

std::cout << "Kokonaispinta-ala: " << alue << endl;
}

autopää(int argc, hiiltyä** argv) ->; int {
std::vektori piirit = {{1.0}, {2.0}};

// Muodostaa implisiittisesti "span" "vektorista".
TulostaTotalArea (ympyrät);
palata0;
}

Hiileksi käännettynä siitä tulee:

// Hiili:
paketti Geometria api;
tuontiMatematiikka;

luokkaaYmpyrä{
var r: f32;
}

fn TulostaTotalArea(ympyrät: Slice (Ympyrä)) {
var alue: f32 = 0;

for (c: Ympyrä piireissä) {
alue += Matematiikka.Pi * c.r * c.r;
}

Tulosta("Kokonaispinta-ala: {0}", alue);
}

fn Main() ->; i32 {
// Dynaamisesti kokoinen taulukko, kuten "std:: vektori".
var piirit: Array(Ympyrä) = ({.r = 1.0}, {.r = 2.0});

// Muodostaa implisiittisesti 'Slice':n 'Array'sta.
TulostaTotalArea (ympyrät);
palata0;
}

Voit myös siirtää yksittäisen C++-kirjaston Carboniin sovelluksessa tai lisätä uuden Carbon-koodin olemassa olevan C++-koodin päälle. Esimerkiksi:

// C++-koodi, jota käytetään sekä Carbonissa että C++:ssa:
structYmpyrä {
kellua r;
};

// Hiili paljastaa funktion C++:lle:
paketti Geometria api;
tuonti Cpp-kirjastoympyrä.h";
tuonti Matematiikka;

fn TulostaTotalArea(ympyrät: Slice (Cpp. Ympyrä)){
var alue: f32 = 0;

varten (c: Cpp. Ympyrä piireissä) {
alue += Math. Pi * c.r * c.r;
}

Print("Kokonaispinta-ala: {0}", alue);
}

// C++ kutsuva hiili:
#sisältää
#sisältää "ympyrä.h"
#sisältää "geometria.hiili.h"

autopää(int argc, hiiltyä** argv) ->; int {
std::vektori piirit = {{1.0}, {2.0}};

// Carbonin "Slice" tukee implisiittistä rakentamista "std:: vektorista",
// samanlainen kuin "std:: span".
Geometria:: TulostaTotalArea (ympyrät);
palata0;
}

Moderni geneerinen järjestelmä

Carbon tarjoaa nykyaikaisen geneerisen järjestelmän tarkistetuilla määritelmillä. Mutta se tukee silti opt-in-malleja saumattoman C++-yhteentoimivuuden takaamiseksi.

Tämä yleinen järjestelmä tarjoaa monia etuja C++-malleille:

  • Yleisten määritelmien tyyppitarkistukset. Näin vältytään käännösajan kustannuksilta, jotka aiheutuvat määritelmien uudelleentarkistamisesta jokaiselle ilmentymälle.
  • Vahvat, tarkastetut rajapinnat. Nämä vähentävät vahingossa tapahtuvaa riippuvuutta toteutuksen yksityiskohdista ja luovat selkeämmän sopimuksen.

Muistin turvallisuus

Carbon pyrkii käsittelemään muistin turvallisuutta, joka on keskeinen C++:aa vaivaava ongelma:

  • Alustamattomien tilojen parempi seuranta, alustuksen tehostaminen ja alustusvirheiden torjunta.
  • Suunnittelemme perussovellusliittymiä ja idioomeja tukemaan dynaamisia rajojen tarkistuksia virheenkorjaus- ja kovetetuissa versioissa.
  • Oletusvirheenkorjaustila on kattavampi kuin C++:n nykyiset koontitilat.

Carbonin käytön aloittaminen

Voit tutkia Carbonia juuri nyt tarkistamalla koodikannan ja käyttämällä Carbon exploreria:

# Asenna bazelisk Homebrewilla.
$ brew asenna bazelisk

# Asenna Clang/LLVM Homebrew'n avulla.
# Monia Clang/LLVM-julkaisuja ei ole rakennettu vaihtoehdoilla, joihin luotamme.
$ brew asenna llvm
$ viedä PATH="$(brew --prefix llvm)/bin:${PATH}"

# Lataa Carbonin koodi.
$ git klooni https://github.com/carbon-language/carbon-lang
$ CD hiili-lang

# Rakenna ja käytä Exploreria.
$ bazel run //explorer -- ./explorer/testdata/Tulosta/format_only.carbon

Carbonin tiekartta paljastaa pitkän aikavälin ajattelun

Carbon tiekartan mukaan Google julkistaa kokeilun julkaisemalla ydintyöversion (0.1) vuoden 2022 loppuun mennessä. He aikovat seurata tätä 0.2-versiolla vuonna 2023 ja täyden 1.0-julkaisulla vuosina 2024–2025.

Nähtäväksi jää, pystyykö Google toistamaan muiden kielensä, Golangin ja Kotlinin, menestyksen.