Megalakulása óta a C++ az első számú választás a teljesítményintenzív alkalmazások építéséhez. De a nyelv még mindig tartalmaz néhány elavult gyakorlatot, amelyet a „bizottság általi tervezés” okoz.
2022. július 19-én, a CPP North C++ konferencián Torontóban Chandler Carruth, a Google mérnöke bemutatta a Carbont.
Tudja meg, mi az a Carbon, és hogyan kívánja sikeressé tenni a C++-t.
Mi az a szén?
A Google mérnökei fejlesztették ki a Szén programozási nyelv a C++ hiányosságainak kiküszöbölésére.
Sok létező nyelvek, mint a Golang és a Rust már létezik, amelyek a C++ teljesítményét tükrözik hiányosságai nélkül. Sajnos ezek a nyelvek jelentős akadályokat jelentenek a meglévő C++ kódbázisok migrációja előtt.
A szén célja, hogy az legyen mi a TypeScript a JavaScript számára, Kotlin pedig Jávára van. Ez nem helyettesítő, hanem egy utódnyelv, amelyet a C++-szal való együttműködésre terveztek. Célja a meglévő kódbázisok és fejlesztők nagyszabású átvétele és migrációja.
A szén főbb jellemzői
A Carbon néhány kulcsfontosságú funkciója közé tartozik a C++ interoperabilitás, a modern generikusok és a memóriabiztonság.
Együttműködés C++-szal
A Carbon célja, hogy szelíd tanulási görbét biztosítson a C++ fejlesztők számára szabványos, konzisztens nyelvi konstrukciókkal.
Vegyük például ezt a C++ kódot:
// C++:
#tartalmazza
#tartalmazza
#tartalmazza
#tartalmazzastructKör {
úszó r;
};üresTotalArea nyomtatása(std::span
körök) {
úszó terület = 0;számára (const Kör& c: körök) {
terület += M_PI * c.r * c.r;
}std::cout << "Összterület: " << terület << endl;
}autofő-(int argc, char** argv) ->; int {
std::vektorkörök = {{1.0}, {2.0}};
// Implicit módon összeállítja a `span`-ot a `vektorból'.
Összes terület nyomtatása (körök);
Visszatérés0;
}
Carbonra lefordítva ez lesz:
Szén:
csomag Geometry api;
importMath;osztályKör{
var r: f32;
}fn TotalArea nyomtatása(körök: Szelet (Kör)) {
var terület: f32 = 0;for (c: Kör a körökben) {
terület += Math.Pi * c.r * c.r;
}Nyomtatás("Teljes terület: {0}", terület);
}fn Fő() ->; i32 {
// Dinamikus méretű tömb, például `std:: vector`.
var körök: Sor(Kör) = ({.r = 1.0}, {.r = 2.0});
// Implicit módon létrehozza a "Slice"-t az "Array"-ből.
Összes terület nyomtatása (körök);
Visszatérés0;
}
Egyetlen C++ könyvtárat is migrálhat a Carbonba egy alkalmazáson belül, vagy új Carbon kódot adhat hozzá a meglévő C++ kódhoz. Például:
// A Carbonban és a C++-ban is használt C++ kód:
structKör {
úszó r;
};// A szén egy függvényt tesz közzé C++ esetén:
csomag Geometry api;
import Cpp könyvtár "kör.h";
import matematika;fn TotalArea nyomtatása(körök: Szelet (Cpp. Kör)){
var terület: f32 = 0;számára (c: Cpp. Kör a körökben) {
terület += Math. Pi * c.r * c.r;
}Print("Teljes terület: {0}", terület);
}// C++ hívó szén:
#tartalmazza
#tartalmazza "kör.h"
#tartalmazza "geometry.carbon.h"autofő-(int argc, char** argv) ->; int {
std::vektorkörök = {{1.0}, {2.0}};
// A Carbon "Slice" támogatja az "std:: vector" implicit felépítését,
// hasonló: `std:: span`.
Geometria:: Összes terület nyomtatása (körök);
Visszatérés0;
}
Modern generikus rendszer
A Carbon modern generikus rendszert biztosít ellenőrzött definíciókkal. De továbbra is támogatja a választható sablonokat a zökkenőmentes C++ interoperabilitás érdekében.
Ez az általános rendszer számos előnnyel rendelkezik a C++ sablonokhoz:
- Az általános definíciók típusellenőrzése. Ezzel elkerülhető a fordítási idő költsége a definíciók újraellenőrzésével minden példányosításnál.
- Erős, ellenőrzött interfészek. Ezek csökkentik a véletlen függőséget a megvalósítás részleteitől, és egyértelműbb szerződést hoznak létre.
A memória biztonsága
A Carbon a C++-t sújtó kulcsfontosságú probléma, a memóriabiztonság megoldására törekszik az alábbiakkal:
- Az inicializálatlan állapotok jobb nyomon követése, az inicializálás fokozott érvényesítése és az inicializálási hibák elleni védekezés.
- Alapvető API-k és idiómák tervezése a dinamikus határellenőrzés támogatására hibakeresési és megerősített buildekben.
- Alapértelmezett hibakeresési móddal rendelkezik, amely átfogóbb, mint a C++ meglévő építési módjai.
Kezdő lépések a szénnel
Már most felfedezheti a Carbont, ha megnézi a kódbázist, és használja a Carbon Explorert:
# Telepítse a bazelisket a Homebrew segítségével.
$ brew install bazelisk# Telepítse a Clang/LLVM-et a Homebrew segítségével.
# Sok Clang/LLVM kiadás nem olyan opciókkal készült, amelyekre támaszkodunk.
$ brew install llvm
$ export PATH="$(brew --prefix llvm)/bin:${PATH}"# Töltse le a Carbon kódját.
$ git klón https://github.com/carbon-language/carbon-lang
$ CD szén-lang
# Építsd meg és futtasd a felfedezőt.
$ bazel run //explorer -- ./explorer/testdata/nyomtatás/format_only.carbon
A Carbon útiterve a hosszú távú gondolkodást mutatja be
A Carbon ütemterv szerint a Google nyilvánosságra hozza a kísérletet egy alapvető működő verzió (0.1) kiadásával 2022 végéig. Ezt tervezik egy 0.2-es verzióval 2023-ban, és egy teljes 1.0-s kiadással 2024–2025-ben.
Hogy a Google képes lesz-e reprodukálni más nyelveik, a golang és a kotlin sikerét, az majd kiderül.