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

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

Carbon — это экспериментальный язык программирования от Google, который создавался как преемник C++. В этой статье разберемся, кому и зачем нужен Carbon, чем он отличается от C++ и как связан с Rust.

Кому нужен Carbon

Прежде, чем начать говорить, что такое Carbon (Карбон) и его преимуществах, вспомним, для чего нужен его прародитель, C++. Это один из самых популярных и влиятельных языков программирования в мире. Он широко используется для разработки высокопроизводительных приложений, системного программирования, игр, встраиваемых систем и многого другого. Однако C++ также имеет свои сложности и недостатки:

  1. Сложный и запутанный синтаксис
  2. Низкая безопасность памяти и управление ресурсами
  3. Проблемы с абстракцией и композицией
  4. Несовместимость между разными компиляторами и стандартами   
  5. Отсутствие модульности и пакетного менеджера
  6. Большой объем легаси-кода.  

Carbon устраняет эти недостатки, сохраняя возможности C++.

Кто разрабатывает новый язык Carbon

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

Carbon — это открытый проект, который хостится на GitHub под лицензией Apache-2.0-with-LLVM-Exception. Его документация, дизайн, реализация и связанные инструменты находятся в стадии разработки. Ожидается, что версия 1.0 Carbon будет выпущена в 2024 или 2025 году.

Чем Carbon отличается от C++

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

  1. Carbon использует ключевые слова для введения переменных, функций, классов и интерфейсов, вместо сложных правил объявления и определения C++. Например, var x: i32 = 42; вместо int x = 42;, fn foo() -> i32 { ... } вместо int foo() { ... }, class Bar { ... } вместо class Bar { public: ... };.
  2. Carbon делает параметры функций доступными только для чтения по умолчанию, что повышает безопасность и читаемость кода. Для изменения параметров необходимо использовать указатели или ссылки. Например, fn swap(x: *i32, y: *i32) { ... } вместо void swap(int& x, int& y) { ... }.
  3. Carbon поддерживает выведение типов для переменных с помощью ключевого слова auto, которое работает как auto в C++. Например, var s: auto = "Hello"; вместо std::string s = "Hello";.
  4. Carbon использует выражения для именования типов, а не сложные правила для указателей и ссылок. Например, *i32 означает указатель на целое число, а &i32 означает ссылку на целое число. Это делает код более понятным и единообразным.
  5. Carbon имеет единое корневое пространство имен пакет (package). Пакеты могут быть импортированы с помощью ключевого слова import. Например, import std.io; вместо #include <iostream>. Пакеты также служат модулями для организации кода и управления зависимостями.
  6. Carbon поддерживает одиночное наследование (inheritance) для классов, но классы являются финальными (final) по умолчанию.

Carbon и Rust

Carbon и Rust – это два современных языка программирования, создатели которых вдохновлялись C++. Однако они имеют разные цели, философии и подходы к дизайну языка. Вот некоторые из их сходств и различий:

  1. Carbon и Rust — статически типизированные и компилируемые языкаи с высокой производительностью и эффективностью. Они оба поддерживают обобщения, интерфейсы, модули и пакеты.
  2. Carbon и Rust стремятся повысить безопасность памяти и управление ресурсами, но делают это по-разному. Carbon использует указатели и ссылки для изменения параметров функций и данных, а также проверяет границы массивов во время выполнения. Rust использует систему владения и заимствования для контроля доступа к данным, а также проверяет границы массивов во время компиляции.
  3. Carbon и Rust поддерживают одиночное наследование для классов, но Rust по умолчанию делает классы не финальными, а Carbon – финальными. Кроме того, Rust поддерживает множественное наследование для методов traits, которые аналогичны интерфейсам в Carbon.
  4. Carbon и Rust имеют упрощенный и понятный синтаксис по сравнению с C++, но у Rust он более выразительный и функциональный синтаксис и позволяет использовать замыкания, сопоставление с образцом (pattern matching), алгебраические типы данных (algebraic data types) и макросы.

Развитие и спецификации Carbon

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

  1. ISO C++ для совместимости и миграции с C++;  
  2. LLVM для компиляции и оптимизации кода;  
  3. Clang для анализа и  трансформации кода;  
  4. LSP для интеграции с IDE и редакторами;  
  5. Cargo для управления пакетами и зависимостями;  
  6. Pathfinder для обмена информацией о углеродном следе.  

Carbon также учитывает опыт и достижения других языков программирования, таких как Rust, Swift, Kotlin, TypeScript и других, чтобы предложить лучшие решения для современных задач и потребностей.

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