Язык программирования 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++
Ключевые различия между языками приведены в таблице:
Carbon | C++ |
Простой и интуитивно понятный синтаксис, что облегчает чтение кода и снижает вероятность ошибок | Более сложный и громоздкий синтаксис, а также наличие устаревших конструкций |
Встроенные инструменты и механизмы для автоматизации управления и повышения безопасности использования памяти | Менее эффективные механизмы управления памятью, что может стать причиной утечек. От разработчика требуется глубокое понимание методов работы с памятью |
Производительность, сопоставимая с С++, которая достигается путем оптимизации использования ресурсов и улучшенного компилятора | Высокая производительность, но от разработчика требуется оптимизировать код |
Возможность регулярных обновлений: внедрение новых функций и конструкций, поддержка современных и эффективных решений | Наличие устаревших функций и подходов, а также затрудненный выпуск новых в связи с требованиями к обратной совместимости |
Поддержка дженериков | Поддержка шаблонов, которые усложняют синтаксис, могут увеличивать время компиляции и затруднять отладку |
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!";
Можно заметить, что переменные объявляются с помощью ключевого слова var, а затем указывается тип данных, к которому принадлежит значение переменной.
Теперь рассмотрим функции:
fn Add(a: i164, b: i164) -> i164 {
return a + b;
}
fn — это ключевое слово, с помощью которого функция вводится, а Add — это ее название. В круглых скобках указываются параметры, а после них — тип возвращаемого значения. Затем пишется тело функции.
Условные конструкции имеют стандартный вид:
if(condition) {
//doSomething
} else if (condition) {
//doSomething
} else {
//doSomething
}
Цикл for (где names — это массив):
for (var name: String in names) {
Print(name);
}
В результате выполнения выводятся все строковые элементы names.
Создание класса (используется ключевое слово class):
class Item {
var x: i32;
var y: i32;
var payload: String;
}
Классы могут содержать собственные методы, как и в других языках программирования.
Будущее и перспективы Carbon
Сегодня размышлять о перспективах языка достаточно трудно, так как релиза еще не было. Тем не менее можно сделать некоторые предположения о его развитии.
Во-первых, Google, скорее всего, учитывает опыт других языков программирования, которые разрабатывались как замена уже существующим, например, Kotlin или TypeScript.
Во-вторых, через какое-то время после полноценного релиза Carbon, Google, вероятно, перестанет полностью контролировать обновления и развитие языка в широком смысле — эта задача перейдет к сообществу.
Несмотря на стремление к исправлению недочетов и проблем C++, о его полноценной и повсеместной замене сейчас говорить точно не приходится: для того чтобы Carbon достиг таких позиций, должно произойти еще очень много времени — от выпуска самого языка программирования до доказательства его удобства и надежности на практике.