Nuo pat įkūrimo C++ buvo pagrindinis pasirinkimas kuriant programas, kurios reikalauja daug našumo. Tačiau kalba vis dar pasižymi kai kuriomis pasenusiomis praktikomis, kurias sukelia „komiteto projektavimas“.
2022 m. liepos 19 d. Toronte vykusioje CPP North C++ konferencijoje Google inžinierius Chandleris Carruthas pristatė Carbon.
Sužinokite, kas yra Carbon ir kaip ji ketina sėkmingai mokytis C++.
Kas yra Anglis?
„Google“ inžinieriai sukūrė Anglies programavimo kalba, kad pašalintų C++ trūkumus.
Daugelis esamų tokiomis kalbomis kaip golangas ir Rust jau egzistuoja, kurie atspindi C++ našumą be trūkumų. Deja, šios kalbos kelia didelių kliūčių esamų C++ kodų bazių perkėlimui.
Anglies siekia būti kas „TypeScript“ yra „JavaScript“., o Kotlinas yra Java. Tai ne pakaitalas, o įpėdinė kalba, sukurta atsižvelgiant į sąveiką su C++. Juo siekiama didelio masto pritaikymo ir perkėlimo esamoms kodų bazėms ir kūrėjams.
Pagrindinės anglies savybės
Kai kurios pagrindinės „Carbon“ funkcijos apima C++ sąveiką, šiuolaikinius bendruosius vaistus ir atminties saugumą.
Sąveika su C++
„Carbon“ siekia suteikti švelnų mokymosi kreivę C++ kūrėjams su standartiniu, nuosekliu kalbos konstrukcijų rinkiniu.
Pavyzdžiui, paimkite šį C++ kodą:
// C++:
#įtraukti
#įtraukti
#įtraukti
#įtrauktistruktūraApskritimas {
plūdė r;
};tuštumaSpausdinti TotalArea(std::span
apskritimai) {
plūdė plotas = 0;dėl (konst Apskritimas& c: apskritimai) {
plotas += M_PI * c.r * c.r;
}std::cout << "Bendras plotas: " << plotas << endl;
}automatinispagrindinis(tarpt argc, char** argv) ->; tarpt {
std::vektoriusapskritimai = {{1.0}, {2.0}};
// Netiesiogiai sukuria „span“ iš „vektoriaus“.
Spausdinti TotalArea (apskritimai);
grąžinti0;
}
Išvertus į anglį, tai tampa:
// Anglis:
paketą Geometrijos api;
importuotiMatematika;klasėApskritimas{
var r: f32;
}fn Spausdinti TotalArea(apskritimai: Slice (Circle)) {
var plotas: f32 = 0;for (c: apskritimas ratuose) {
plotas += Matematika.Pi * c.r * c.r;
}Spausdinti ("Bendras plotas: {0}", plotas);
}fn Pagrindinis() ->; i32 {
// Dinaminio dydžio masyvas, pvz., "std:: vektorius".
var ratai: Masyvas(Apskritimas) = ({.r = 1.0}, {.r = 2.0});
// Netiesiogiai sukuria „Slice“ iš „Array“.
Spausdinti TotalArea (apskritimai);
grąžinti0;
}
Taip pat galite perkelti vieną C++ biblioteką į „Carbon“ programoje arba pridėti naują „Carbon“ kodą prie esamo C++ kodo. Pavyzdžiui:
// C++ kodas, naudojamas ir „Carbon“, ir „C++“:
struktūraApskritimas {
plūdė r;
};// Anglies atskleidžianti C++ funkciją:
paketas Geometry api;
importuoti Cpp bibliotekaratas.h";
importuoti matematika;fn Spausdinti TotalArea(apskritimai: Slice (Cpp. Apskritimas)){
var plotas: f32 = 0;dėl (c: Cpp. Apskritimas ratuose) {
sritis += Mat. Pi * c.r * c.r;
}Print("Bendras plotas: {0}“, plotas);
}// C++ skambinanti anglis:
#įtraukti
#įtraukti "ratas.h"
#įtraukti "geometry.carbon.h"automatinispagrindinis(tarpt argc, char** argv) ->; tarpt {
std::vektoriusapskritimai = {{1.0}, {2.0}};
// Carbon's "Slice" palaiko numanomą konstrukciją iš "std:: vector",
// panašus į „std:: span“.
Geometrija:: Spausdinti TotalArea (apskritimai);
grąžinti0;
}
Šiuolaikinė generinė sistema
Carbon suteikia modernią generinių vaistų sistemą su patikrintais apibrėžimais. Tačiau jis vis tiek palaiko pasirenkamus šablonus, užtikrinančius sklandų C++ sąveiką.
Ši bendroji sistema suteikia daug privalumų C++ šablonams:
- Bendrųjų apibrėžimų tipo patikros. Taip išvengiama kompiliavimo laiko sąnaudų pakartotinai tikrinant kiekvienos kartojimo apibrėžimus.
- Stiprios, patikrintos sąsajos. Tai sumažina atsitiktinę priklausomybę nuo įgyvendinimo detalių ir sukuria aiškesnę sutartį.
Atminties sauga
Carbon siekia išspręsti atminties saugą – pagrindinę C++ problemą:
- Geresnis neinicijuotų būsenų stebėjimas, inicijavimo vykdymo didinimas ir apsauga nuo inicijavimo klaidų.
- Pagrindinių API ir idiomų kūrimas, kad būtų palaikomas dinaminis ribų tikrinimas derinant ir sugriežtintose versijose.
- Turėti numatytąjį derinimo kūrimo režimą, kuris yra išsamesnis nei esami C++ kūrimo režimai.
Darbo su anglimi pradžia
Galite tyrinėti Carbon dabar, patikrinę kodų bazę ir naudodami Carbon explorer:
# Įdiekite bazeliską naudodami „Homebrew“.
$ brew įdiegti bazeliską# Įdiekite Clang / LLVM naudodami Homebrew.
# Daugelis Clang / LLVM leidimų nėra sukurti naudojant parinktis, kuriomis pasitikime.
$ brew įdiegti llvm
$ eksportuoti PATH="$(brew --prefix llvm)/bin:${PATH}"# Atsisiųskite „Carbon“ kodą.
$ git klonas https://github.com/carbon-language/carbon-lang
$ cd anglies langas
# Sukurkite ir paleiskite naršyklę.
$ bazel paleisti //explorer -- ./explorer/testdata/spausdinti/format_only.carbon
„Carbon“ veiksmų planas atskleidžia ilgalaikį mąstymą
Remiantis anglies dioksido planu, „Google“ paskelbs eksperimentą viešai, iki 2022 m. pabaigos išleisdama pagrindinę darbinę versiją (0.1). Jie planuoja tai tęsti su 0.2 versija 2023 m. ir visa 1.0 versija 2024–2025 m.
Ar „Google“ pavyks atkurti kitų savo kalbų – golango ir kotlino – sėkmę, dar reikia pamatyti.