Kopš tās pirmsākumiem C++ ir bijusi galvenā izvēle lietojumprogrammu veidošanai ar intensīvu veiktspēju. Taču valodā joprojām ir dažas novecojušas prakses, ko izraisa tās “komitejas projektēšana”.
2022. gada 19. jūlijā Toronto konferencē CPP North C++ Google inženieris Čendlers Kerūts iepazīstināja ar Carbon.
Uzziniet, kas ir Carbon un kā tas plāno gūt panākumus C++.
Kas ir ogleklis?
Google inženieri izstrādāja Ogleklis programmēšanas valoda, lai novērstu C++ trūkumus.
Daudzi esošie tādas valodas kā Golang un Rust jau pastāv, kas atspoguļo C++ veiktspēju bez tā trūkumiem. Diemžēl šīs valodas rada ievērojamus šķēršļus esošo C++ kodu bāzu migrācijai.
Oglekļa mērķis ir būt kas TypeScript ir JavaScript, un Kotlins ir uz Java. Tā nav aizstājējvaloda, bet gan pēcteču valoda, kas izstrādāta sadarbspējai ar C++. Tā mērķis ir liela mēroga pieņemšana un migrācija esošajām kodu bāzēm un izstrādātājiem.
Galvenās oglekļa īpašības
Dažas no Carbon galvenajām funkcijām ietver C++ savietojamību, modernas vispārīgās ierīces un atmiņas drošību.
Sadarbspēja ar C++
Carbon mērķis ir nodrošināt maigu mācīšanās līkni C++ izstrādātājiem ar standarta, konsekventu valodas konstrukciju kopu.
Piemēram, ņemiet šo C++ kodu:
// C++:
#ietver
#ietver
#ietver
#ietverstruktūraAplis {
peldēt r;
};nederīgsDrukātTotalArea(std::span
apļi) {
peldēt platība = 0;priekš (konst Aplis& c: apļi) {
platība += M_PI * c.r * c.r;
}std::cout << "Kopējā platība: " << platība << endl;
}autogalvenais(starpt argc, char** argv) ->; starpt {
std::vektorsapļi = {{1.0}, {2.0}};
// Netieši konstruē "span" no "vector".
PrintTotalArea (apļi);
atgriezties0;
}
Tulkots uz oglekli, tas kļūst:
// Ogleklis:
iepakojums Ģeometrija api;
importsMatemātika;klasēAplis{
var r: f32;
}fn DrukātTotalArea(apļi: Šķēle (Aplis)) {
var laukums: f32 = 0;for (c: aplis lokos) {
platība += Matemātika.Pi * c.r * c.r;
}Drukāt("Kopējā platība: {0}", platība);
}fn Galvenā() ->; i32 {
// Dinamiska izmēra masīvs, piemēram, "std:: vektors".
var apļi: Masīvs(Aplis) = ({.r = 1.0}, {.r = 2.0});
// Netieši konstruē "Slice" no "Array".
PrintTotalArea (apļi);
atgriezties0;
}
Varat arī migrēt vienu C++ bibliotēku uz Carbon lietojumprogrammā vai pievienot jaunu oglekļa kodu papildus esošajam C++ kodam. Piemēram:
// C++ kods, ko izmanto gan Carbon, gan C++:
struktūraAplis {
peldēt r;
};// Ogleklis, kas atklāj C++ funkciju:
pakete Ģeometrija api;
imports Cpp bibliotēka "aplis.h";
imports Matemātika;fn DrukātTotalArea(apļi: Šķēle (Cpp. Aplis)){
mainīgais apgabals: f32 = 0;priekš (c: Cpp. Aplis lokos) {
apgabals += Matem. Pi * c.r * c.r;
}Print("Kopējā platība: {0}", apgabals);
}// C++ izsaukšanas ogleklis:
#ietver
#ietver "aplis.h"
#ietver "ģeometrija.ogleklis.h"autogalvenais(starpt argc, char** argv) ->; starpt {
std::vektorsapļi = {{1.0}, {2.0}};
// Carbon's "Slice" atbalsta netiešu konstruēšanu no "std:: vektora",
// līdzīgs `std:: span`.
Ģeometrija:: PrintTotalArea (apļi);
atgriezties0;
}
Mūsdienu ģenērisko sistēmu sistēma
Carbon nodrošina modernu vispārīgu sistēmu ar pārbaudītām definīcijām. Taču tas joprojām atbalsta izvēles veidnes, lai nodrošinātu netraucētu C++ savietojamību.
Šī vispārīgā sistēma sniedz daudz priekšrocību C++ veidnēm:
- Tipa pārbaudes vispārīgām definīcijām. Tas ļauj izvairīties no kompilēšanas laika izmaksām, kas saistītas ar definīciju atkārtotu pārbaudi katrai instancē.
- Spēcīgas, pārbaudītas saskarnes. Tie samazina nejaušu atkarību no ieviešanas detaļām un izveido precīzāku līgumu.
Atmiņas drošība
Carbon cenšas risināt atmiņas drošību, kas ir galvenā problēma, kas nomoka C++, veicot:
- Labāka neinicializēto stāvokļu izsekošana, inicializācijas izpildes palielināšana un aizsardzība pret inicializācijas kļūdām.
- Pamata API un idiomu izstrāde, lai atbalstītu dinamisko robežu pārbaudes atkļūdošanas un stingrās būvēs.
- Noklusējuma atkļūdošanas veidošanas režīms, kas ir visaptverošāks nekā esošie C++ veidošanas režīmi.
Darba sākšana ar oglekli
Jūs varat izpētīt Carbon jau tagad, pārbaudot kodu bāzi un izmantojot Carbon Explorer:
# Instalējiet bazelisk, izmantojot Homebrew.
$ brew instalēt bazelisk# Instalējiet Clang/LLVM, izmantojot Homebrew.
# Daudzi Clang/LLVM laidieni nav izstrādāti ar iespējām, uz kurām mēs paļaujamies.
$ brew instalēt llvm
$ eksportēt PATH="$(brew --prefix llvm)/bin:${PATH}"# Lejupielādēt Carbon kodu.
$ git klons https://github.com/carbon-language/carbon-lang
$ cd oglekļa-lang
# Izveidojiet un palaidiet pētnieku.
$ bazel palaist //explorer -- ./explorer/testdata/drukāt/format_only.carbon
Oglekļa ceļvedis atklāj ilgtermiņa domāšanu
Saskaņā ar oglekļa ceļvedi Google eksperimentu publiskos, līdz 2022. gada beigām izlaižot galveno darba versiju (0.1). Viņi plāno tam sekot ar 0.2 versiju 2023. gadā un pilnu 1.0 izlaidumu 2024.–2025. gadā.
Tas, vai Google spēs reproducēt citu valodu, Golang un Kotlin, panākumus, vēl ir redzams.