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.
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::vektoripiirit = {{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::vektoripiirit = {{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.