Од свог почетка, Ц++ је био главни избор за изградњу апликација које захтевају високе перформансе. Али језик и даље садржи неке застареле праксе узроковане његовим „дизајном од стране комитета“.

Дана 19. јула 2022., током конференције ЦПП Нортх Ц++ у Торонту, Гоогле инжењер Чендлер Карут је представио Царбон.

Сазнајте шта је Царбон и како намерава да успе у Ц++.

Шта је угљеник?

Гоогле инжењери су развили Царбон програмски језик за решавање недостатака Ц++.

Многи постојећи језици попут голанга и Руст већ постоје који одражавају перформансе Ц++-а без његових недостатака. Нажалост, ови језици представљају значајне препреке за миграцију постојећих Ц++ база кода.

Царбон има за циљ да буде шта је ТипеСцрипт за ЈаваСцрипт, а Котлин је за Јаву. То није замена, већ језик наследник дизајниран око интероперабилности са Ц++. Има за циљ широко усвајање и миграцију за постојеће базе кода и програмере.

Кључне карактеристике угљеника

Неке од кључних карактеристика Царбон-а укључују Ц++ интероперабилност, модерне генерике и безбедност меморије.

instagram viewer

Интероперабилност са Ц++

Царбон има за циљ да обезбеди нежну криву учења за Ц++ програмере, са стандардним, доследним скупом језичких конструкција.

На пример, узмите овај Ц++ код:

// Ц++:
#укључити
#укључити
#укључити
#укључити

струцтЦирцле {
пловак р;
};

празнинаПринтТоталАреа(стд::спан кругови){
пловак област = 0;

за (конст Круг& ц: кругови) {
област += М_ПИ * ц.р * ц.р;
}

стд::цоут << "Укупна површина: " << област << ендл;
}

аутоглавни(инт аргц, цхар** аргв) ->; инт {
стд::вектор кругови = {{1.0}, {2.0}};

// Имплицитно конструише `спан` из `вектора`.
ПринтТоталАреа (кругови);
повратак0;
}

Преведено на угљеник, постаје:

// Угљеник:
пакет Геометри апи;
увозМатх;

класаЦирцле{
вар р: ф32;
}

фн ПринтТоталАреа(кругови: исечак (круг)) {
вар површина: ф32 = 0;

за (ц: Круг у круговима) {
област += Матх.Пи * ц.р * ц.р;
}

Штампај("Укупна површина: {0}", област);
}

фн Главни() ->; и32 {
// Низ динамичке величине, као што је `стд:: вецтор`.
вар кругови: Низ(Круг) = ({.р = 1.0}, {.р = 2.0});

// Имплицитно конструише `Слице` из `Мазива`.
ПринтТоталАреа (кругови);
повратак0;
}

Такође можете да мигрирате једну Ц++ библиотеку у Царбон у оквиру апликације или да додате нови Царбон код поврх постојећег Ц++ кода. На пример:

// Ц++ код који се користи у Царбон и Ц++:
струцтЦирцле {
пловак р;
};

// Угљеник открива функцију за Ц++:
пакет Геометри апи;
увоз Цпп библиотека "круг.х";
увоз Матх;

фн ПринтТоталАреа(кругови: Слице (Цпп. круг)){
вар област: ф32 = 0;

за (ц: Цпп. Круг у круговима) {
област += Матх. Пи * ц.р * ц.р;
}

Принт("Укупна површина: {0}", област);
}

// Ц++ позива Царбон:
#укључити
#укључити "круг.х"
#укључити "геометри.царбон.х"

аутоглавни(инт аргц, цхар** аргв) ->; инт {
стд::вектор кругови = {{1.0}, {2.0}};

// Царбонов `Слице` подржава имплицитну конструкцију из `стд:: вецтор`,
// слично `стд:: спан`.
Геометрија:: ПринтТоталАреа (кругови);
повратак0;
}

Савремени генерички систем

Царбон пружа модеран генерички систем са провереним дефиницијама. Али и даље подржава шаблоне за прихватање за беспрекорну Ц++ интероперабилност.

Овај генерички систем пружа много предности Ц++ шаблонима:

  • Провера типа за генеричке дефиниције. Ово избегава трошак времена компајлирања поновне провере дефиниција за сваку инстанцију.
  • Јаки, проверени интерфејси. Ово смањује случајне зависности од детаља имплементације и ствара експлицитнији уговор.

Мемори Сафети

Царбон настоји да се позабави безбедношћу меморије, кључним проблемом који мучи Ц++, тако што:

  • Боље праћење неиницијализованих стања, повећање примене иницијализације и отпорност на грешке у иницијализацији.
  • Дизајнирање основних АПИ-ја и идиома за подршку динамичких провера граница у дебуг и ојачаним верзијама.
  • Имати подразумевани режим градње за отклањање грешака који је свеобухватнији од постојећих Ц++ режима изградње.

Почетак рада са угљеником

Можете да истражите Царбон управо сада тако што ћете проверити базу кодова и користити Царбон екплорер:

# Инсталирајте базелиск користећи Хомебрев.
$ брев инсталл базелиск

# Инсталирајте Цланг/ЛЛВМ користећи Хомебрев.
# Многа Цланг/ЛЛВМ издања нису направљена са опцијама на које се ослањамо.
$ брев инсталл ллвм
$ извоз ПАТХ="$(брев --префик ллвм)/бин:${ПАТХ}"

# Преузмите Царбонов код.
$ гит клон https://github.com/carbon-language/carbon-lang
$ цд царбон-ланг

# Направите и покрените истраживач.
$ базел рун //екплорер -- ./екплорер/тестдата/принт/format_only.carbon

Карбонова мапа пута открива дугорочно размишљање

Према Царбон мапи пута, Гугл ће јавно објавити експеримент издавањем основне радне верзије (0.1) до краја 2022. Планирају да следе ово са верзијом 0.2 у 2023. и потпуном верзијом 1.0 у 2024–2025.

Остаје да се види да ли ће Гоогле моћи да репродукује успех својих других језика, голанга и котлина.