От самото си създаване C++ е основният избор за изграждане на приложения с висока производителност. Но езикът все още включва някои остарели практики, причинени от неговия „дизайн от комитет“.

На 19 юли 2022 г., по време на конференцията CPP North C++ в Торонто, инженерът на Google Чандлър Карут представи Carbon.

Разберете какво е Carbon и как възнамерява да успее в C++.

Какво е въглерод?

Инженерите на Google разработиха въглерод език за програмиране за справяне с недостатъците на C++.

Много съществуващи езици като Golang и Rust вече съществуват, които отразяват производителността на C++ без неговите недостатъци. За съжаление, тези езици представляват значителни пречки пред миграцията на съществуващи C++ кодови бази.

Carbon се стреми да бъде какво е TypeScript за JavaScript, а Kotlin е към Java. Това не е заместител, а наследник на езика, проектиран около оперативна съвместимост със C++. Той има за цел широкомащабно приемане и миграция за съществуващи кодови бази и разработчици.

Основни характеристики на въглерода

instagram viewer

Някои от ключовите характеристики на Carbon включват оперативна съвместимост на C++, модерни генерични продукти и безопасност на паметта.

Оперативна съвместимост с C++

Carbon има за цел да осигури лека крива на обучение за C++ разработчиците със стандартен, последователен набор от езикови конструкции.

Например вземете този C++ код:

// C++:
#включват
#включват
#включват
#включват

структуракръг {
плавам r;
};

невалиденPrintTotalArea(std::span кръгове){
плавам площ = 0;

за (конст Кръг& c: кръгове) {
площ += M_PI * c.r * c.r;
}

std::cout << "Обща площ: " << площ << endl;
}

Автоматиченосновен(вътр argc, въглен** argv) ->; вътр {
std::вектор кръгове = {{1.0}, {2.0}};

// Неявно конструира `span` от `vector`.
PrintTotalArea (кръгове);
връщане0;
}

Преведено на въглерод, става:

// Въглерод:
пакет API за геометрия;
импортиранематематика;

класкръг{
вар r: f32;
}

fn PrintTotalArea(кръгове: Срез (Кръг)) {
вар област: f32 = 0;

за (c: Кръг в кръгове) {
площ += математика.Pi * c.r * c.r;
}

Печат("Обща площ: {0}", ■ площ);
}

fn Основен() ->; i32 {
// Масив с динамичен размер, като `std:: vector`.
вар кръгове: Масив(Кръг) = ({.r = 1.0}, {.r = 2.0});

// Неявно конструира `Slice` от `Array`.
PrintTotalArea (кръгове);
връщане0;
}

Можете също така да мигрирате една C++ библиотека към Carbon в рамките на приложение или да добавите нов Carbon код върху съществуващия C++ код. Например:

// C++ код, използван както в Carbon, така и в C++:
структуракръг {
плавам r;
};

// Carbon разкрива функция за C++:
пакет Geometry api;
импортиране Cpp библиотека "кръг.h";
импортиране математика;

fn PrintTotalArea(кръгове: Срез (Cpp. кръг)){
променлива област: f32 = 0;

за (c: Cpp. Кръг в кръгове) {
площ += Мат. Pi * c.r * c.r;
}

Print("Обща площ: {0}", ■ площ);
}

// C++ извикване на Carbon:
#включват
#включват "кръг.h"
#включват "geometry.carbon.h"

Автоматиченосновен(вътр argc, въглен** argv) ->; вътр {
std::вектор кръгове = {{1.0}, {2.0}};

// `Slice` на Carbon поддържа имплицитна конструкция от `std:: vector`,
// подобно на `std:: span`.
Геометрия:: PrintTotalArea (кръгове);
връщане0;
}

Модерна генерична система

Carbon предоставя модерна генерична система с проверени дефиниции. Но все още поддържа шаблони за включване за безпроблемна оперативна съвместимост на C++.

Тази генерична система предоставя много предимства на C++ шаблоните:

  • Типови проверки за общи дефиниции. Това избягва разходите по време на компилиране за повторна проверка на дефиниции за всяко инстанциране.
  • Силни, проверени интерфейси. Те намаляват случайните зависимости от детайлите на изпълнението и създават по-ясен договор.

Безопасност на паметта

Carbon се стреми да се справи с безопасността на паметта, ключов проблем, тормозещ C++, чрез:

  • По-добро проследяване на неинициализирани състояния, увеличаване на прилагането на инициализацията и защита срещу грешки при инициализацията.
  • Проектиране на основни API и идиоми за поддръжка на проверки на динамични граници при отстраняване на грешки и засилени компилации.
  • Наличие на режим на изграждане по подразбиране за отстраняване на грешки, който е по-всеобхватен от съществуващите режими на изграждане на C++.

Първи стъпки с въглерод

Можете да изследвате Carbon точно сега, като проверите кодовата база и използвате Carbon explorer:

# Инсталирайте bazelisk с помощта на Homebrew.
$ brew инсталирайте bazelisk

# Инсталирайте Clang/LLVM с помощта на Homebrew.
# Много версии на Clang/LLVM не са изградени с опции, на които разчитаме.
$ brew инсталирайте llvm
$ износ PATH="$(brew --prefix llvm)/bin:${PATH}"

# Изтеглете кода на Carbon.
$ git клонинг https://github.com/carbon-language/carbon-lang
$ cd въглерод-ланг

# Създайте и стартирайте изследователя.
$ bazel run //explorer -- ./explorer/testdata/печат/format_only.carbon

Пътната карта на Carbon разкрива дългосрочно мислене

Според пътната карта на Carbon, Google ще направи експеримента публичен с пускането на основна работна версия (0.1) до края на 2022 г. Те планират да последват това с версия 0.2 през 2023 г. и пълна версия 1.0 през 2024–2025 г.

Дали Google ще успее да възпроизведе успеха на другите си езици, Golang и Kotlin, остава да видим.