Включите исполнение JavaScript в браузере, чтобы запустить приложение.
16 янв 2025

Новый язык программирования Carbon от Google

Когда работа с устаревшими языками начинает замедлять развитие, индустрия неизбежно ищет способы преодолеть эти ограничения. Carbon от Google — пример такого осознанного подхода. Он нацелен на устранение устаревших аспектов C++, сохраняя при этом совместимость с его огромной экосистемой. Carbon открывает путь к модернизации существующего кода и внедрению в него новых лучших практик программирования.

Язык программирования Carbon: что это такое

Carbon — это экспериментальный язык программирования общего назначения с открытым исходным кодом. Разрабатывается он компанией Google для устранения некоторых недостатков распространенного сейчас C++, при этом целью также является желание обеспечить совместимость с программами на C++. Carbon был впервые представлен Чендлером Каррутом, инженером из Google, в 2022 году. Экспериментальную версию языка планируют выпустить в 2025 году, а полноценную — после 2027 года.

Зачем разрабатывается Carbon 

Сами разработчики языка называют следующие цели его создания:

  • расширение возможности взаимодействия с существующим кодом на C++ для плавной и доступной миграции на Carbon;
  • применение в языке современных подходов, функций и конструкций;
  • создание языка программирования с высокой производительностью и простым синтаксисом;
  • улучшение механизмов обеспечения безопасности памяти.

Практически же Carbon может применяться во многих проектах по разработке различного ПО: операционных систем, игр, десктопных приложений и прочих. Соответственно, в первую очередь Carbon может быть использован крупными организациями, которые движутся к модернизации своих программных решений, улучшению производительности и повышению безопасности кода.

Особенности языка Carbon

К основным особенностям Carbon можно отнести:

  • открытый исходный код. Вероятно, в будущем обновлениями и развитием языка будет в большей мере заниматься сообщество, а не компания Google;
  • Carbon довольно прост в изучении, особенно для разработчиков, знакомых с C++;
  • оптимизированные механизмы управления памятью, что позволяет снизить риски возникновения различных проблем, например, утечек;
  • высокая производительность, сопоставимая с C++ и обусловленная различными факторами, например, наличием компилятора, написанного с использованием LLVM;
  • разрабатывается по принципу Batteries-included — в язык включены компилятор, библиотеки, документация, инструменты, менеджер пакетов и другое;
  • Carbon двунаправленно совместим с C++. Это означает, что эти языки могут использоваться вместе. То есть, в одном проекте может содержаться код на обоих языках, что должно облегчить процесс перехода с C++ на Carbon. Или, например, в проектах, написанных на Carbon, могут использоваться библиотеки и другие компоненты, написанные на C++. Код на Carbon может вызывать функции, написанные на C++ и наоборот;
  • простой и понятный синтаксис, созданный так, что его могут читать не только разработчики на C++, но и другие программисты, в том числе начинающие.

В чем различия между Carbon и C++

Ключевые различия между языками приведены в таблице:

CarbonC++
Простой и интуитивно понятный синтаксис, что облегчает чтение кода и снижает вероятность ошибокБолее сложный и громоздкий синтаксис, а также наличие устаревших конструкций
Встроенные инструменты и механизмы для автоматизации управления и повышения безопасности использования памятиМенее эффективные механизмы управления памятью, что может стать причиной утечек. От разработчика требуется глубокое понимание методов работы с памятью
Производительность, сопоставимая с С++, которая достигается путем оптимизации использования ресурсов и улучшенного компилятораВысокая производительность, но от разработчика требуется оптимизировать код
Возможность регулярных обновлений: внедрение новых функций и конструкций, поддержка современных и эффективных решенийНаличие устаревших функций и подходов, а также затрудненный выпуск новых в связи с требованиями к обратной совместимости
Поддержка дженериковПоддержка шаблонов, которые усложняют синтаксис, могут увеличивать время компиляции и затруднять отладку

Carbon и Rust

Carbon и Rust — это два языка программирования, которые не являются прямыми конкурентами, хоть некоторые их цели и схожи. Они имеют кардинальные различия как в возможностях, так и в философии и синтаксисе.

Прежде всего основной целью разработки Carbon является создание языка, совместимого с C++, для постепенной миграции крупных проектов с него на Carbon без значительных затрат ресурсов. Rust же никогда не разрабатывался как совместимый с C++ язык или его замена. Целью разработки Rust было создание производительного и безопасного языка для системного программирования.

Также, несмотря на то что оба языка оптимизируют методы управления памятью и ее безопасность, механизмы для этого используются разные. По этому показателю скорее выигрывает Rust.

Синтаксис обоих языков более простой и читаемый, чем у C++. При этом у Rust он более выразительный. Также Rust предоставляет встроенные структуры данных, например, векторы.

Таким образом, Carbon и Rust — это языки, которые не конкурируют между собой, а используют разные методы для решения задач и созданы для разных целей: Carbon фокусируется на исправлении недочетов C++ и обеспечении совместимости с ним, в то время как Rust — на высокой производительности и безопасности памяти.

Как устроен Carbon: синтаксис и структуры данных

Carbon поддерживает различные типы и структуры данных, среди которых:

  • целые числа;
  • числа с плавающей запятой;
  • булевые значения;
  • строки;
  • массивы;
  • списки;
  • словари;
  • кортежи.

В этой статье уже упоминалось, что Carbon имеет упрощенный, по сравнению с C++, синтаксис. Рассмотрим это на примерах.

Объявление переменных осуществляется следующим образом:

var x: i32 = 2;

var name: String = "Hello, World!";
git

Можно заметить, что переменные объявляются с помощью ключевого слова var, а затем указывается тип данных, к которому принадлежит значение переменной.

Теперь рассмотрим функции:

fn Add(a: i164, b: i164) -> i164 {

  return a + b;

}
git

fn — это ключевое слово, с помощью которого функция вводится, а Add — это ее название. В круглых скобках указываются параметры, а после них — тип возвращаемого значения. Затем пишется тело функции.

Условные конструкции имеют стандартный вид:

if(condition) {

 //doSomething

} else if (condition) {

 //doSomething

} else {

  //doSomething

}
git

Цикл for (где names — это массив):

for (var name: String in names) {

  Print(name);

}
git

В результате выполнения выводятся все строковые элементы names.

Создание класса (используется ключевое слово class):

class Item {

  var x: i32;

  var y: i32;

  var payload: String;

}
git

Классы могут содержать собственные методы, как и в других языках программирования.

Будущее и перспективы Carbon

Сегодня размышлять о перспективах языка достаточно трудно, так как релиза еще не было. Тем не менее можно сделать некоторые предположения о его развитии.

Во-первых, Google, скорее всего, учитывает опыт других языков программирования, которые разрабатывались как замена уже существующим, например, Kotlin или TypeScript.

Во-вторых, через какое-то время после полноценного релиза Carbon, Google, вероятно, перестанет полностью контролировать обновления и развитие языка в широком смысле — эта задача перейдет к сообществу.

Несмотря на стремление к исправлению недочетов и проблем C++, о его полноценной и повсеместной замене сейчас говорить точно не приходится: для того чтобы Carbon достиг таких позиций, должно произойти еще очень много времени — от выпуска самого языка программирования до доказательства его удобства и надежности на практике.