Od svog početka, C++ je bio glavni izbor za izradu aplikacija koje zahtijevaju velike performanse. Ali jezik još uvijek sadrži neke zastarjele prakse uzrokovane njegovim "dizajnom odbora".
19. srpnja 2022., tijekom CPP North C++ konferencije u Torontu, Googleov inženjer Chandler Carruth predstavio je Carbon.
Saznajte što je Carbon i kako namjerava naslijediti C++.
Što je ugljik?
Googleovi inženjeri razvili su Ugljik programski jezik za rješavanje nedostataka C++.
Mnogi postojeći jezika poput Golanga i Rust već postoje koji odražavaju performanse C++-a bez njegovih nedostataka. Nažalost, ovi jezici predstavljaju značajne prepreke za migraciju postojećih C++ kodnih baza.
Carbon ima za cilj biti što je TypeScript za JavaScript, a Kotlin je Javi. To nije zamjena, već nasljednik jezika dizajniranog oko interoperabilnosti s C++. Cilj mu je usvajanje velikih razmjera i migracija za postojeće baze kodova i programere.
Ključne značajke ugljika
Neke od ključnih značajki Carbona uključuju C++ interoperabilnost, moderne generike i sigurnost memorije.
Interoperabilnost s C++
Carbon ima za cilj pružiti blagu krivulju učenja za C++ programere, sa standardnim, dosljednim skupom jezičnih konstrukcija.
Na primjer, uzmite ovaj C++ kod:
// C++:
#uključiti
#uključiti
#uključiti
#uključitistrukturiratiKrug {
plutati r;
};poništitiIspiši ukupnu površinu(std:: raspon
krugovi) {
plutati površina = 0;za (konst Krug& c: krugovi) {
površina += M_PI * c.r * c.r;
}std::cout << "Ukupna površina: " << površina << endl;
}autoglavni(int argc, char** argv) ->; int {
std::vektorkrugovi = {{1.0}, {2.0}};
// Implicitno konstruira `span` iz `vektora`.
PrintTotalArea (krugovi);
povratak0;
}
Prevedeno na ugljik, to postaje:
// Ugljik:
paket Geometry api;
uvozmatematika;razredaKrug{
var r: f32;
}fn Ispiši ukupnu površinu(krugovi: Kriška (Krug)) {
var područje: f32 = 0;za (c: Krug u krugovima) {
površina += matematika.Pi * c.r * c.r;
}Ispis("Ukupna površina: {0}", površina);
}fn Glavni() ->; i32 {
// Niz dinamičke veličine, poput `std:: vector`.
var krugovi: Niz(Krug) = ({.r = 1.0}, {.r = 2.0});
// Implicitno konstruira `Slice` iz `Array`.
PrintTotalArea (krugovi);
povratak0;
}
Također možete migrirati jednu C++ biblioteku na Carbon unutar aplikacije ili dodati novi Carbon kod povrh postojećeg C++ koda. Na primjer:
// C++ kod koji se koristi u Carbonu i C++:
strukturiratiKrug {
plutati r;
};// Carbon izlaže funkciju za C++:
paket Geometry api;
uvoz Cpp biblioteka "krug.h";
uvoz matematika;fn Ispiši ukupnu površinu(zaokružuje: Slice (Cpp. Krug)){
promjenljivo područje: f32 = 0;za (c: Cpp. Krug u krugovima) {
područje += mat. Pi * c.r * c.r;
}Print("Ukupna površina: {0}", površina);
}// C++ poziva Carbon:
#uključiti
#uključiti "krug.h"
#uključiti "geometry.carbon.h"autoglavni(int argc, char** argv) ->; int {
std::vektorkrugovi = {{1.0}, {2.0}};
// Carbon's `Slice` podržava implicitnu konstrukciju iz `std:: vector`,
// slično kao `std:: span`.
Geometry:: PrintTotalArea (krugovi);
povratak0;
}
Suvremeni generički sustav
Carbon pruža moderan generički sustav s provjerenim definicijama. Ali još uvijek podržava predloške za uključivanje za besprijekornu C++ interoperabilnost.
Ovaj generički sustav pruža puno prednosti C++ predlošcima:
- Provjere tipa za generičke definicije. Time se izbjegava trošak vremena kompajliranja ponovne provjere definicija za svaku instanciju.
- Jaka, provjerena sučelja. To smanjuje slučajne ovisnosti o detaljima implementacije i stvara eksplicitniji ugovor.
Sigurnost memorije
Carbon nastoji riješiti sigurnost memorije, ključni problem koji muči C++, tako što:
- Bolje praćenje neinicijaliziranih stanja, povećanje provedbe inicijalizacije i zaštita od inicijalizacijskih grešaka.
- Dizajn temeljnih API-ja i idioma za podršku dinamičkih provjera granica u ispravljanju pogrešaka i pojačanim verzijama.
- Imati zadani način izrade za otklanjanje pogrešaka koji je sveobuhvatniji od postojećih načina izrade C++-a.
Početak rada s ugljikom
Možete istražiti Carbon upravo sada tako da provjerite bazu kodova i koristite Carbon explorer:
# Instalirajte bazelisk koristeći Homebrew.
$ kuhati instalirati bazelisk# Instalirajte Clang/LLVM koristeći Homebrew.
# Mnoga Clang/LLVM izdanja nisu izgrađena s opcijama na koje se oslanjamo.
$ kuhati instalirati llvm
$ izvoz PATH="$(brew --prefix llvm)/bin:${PATH}"# Preuzmite Carbonov kod.
$ git klon https://github.com/carbon-language/carbon-lang
$ CD ugljik-lang
# Izradite i pokrenite istraživač.
$ bazel run //explorer -- ./explorer/testdata/ispisati/format_only.carbon
Carbon's Roadmap otkriva dugoročno razmišljanje
Prema karti puta za Carbon, Google će eksperiment objaviti izdavanjem osnovne radne verzije (0.1) do kraja 2022. Planiraju to pratiti s verzijom 0.2 2023. i punim izdanjem 1.0 2024.–2025.
Hoće li Google uspjeti reproducirati uspjeh svojih drugih jezika, Golang i Kotlin, ostaje za vidjeti.