Код
#новости

Google выпустил в общий доступ язык Carbon, который должен заменить C++

Язык имеет простой синтаксис и может легко интегрироваться в код на С++.

Что случилось

На конференции «CPP North» в Торонто Google Principal Software Engineer Чендлер Карус впервые представил новый язык Carbon, разрабатываемый сотрудниками Google. Главная задача этого языка — перенести кодовые базы с C++ на более современный язык.

Разработчики из Google считают, что Rust не подходит для этих целей, потому что он не поддерживает двухстороннюю совместимость с разными инструментами. Это создаёт языковой барьер при переходе между языками.

Что это за язык

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

Язык Carbon должен стать подобием TypeScript для JavaScript или Kotlin для Java. Он не будет полной заменой C++, а лишь надстройкой над всеми функциями из C++.

Так, например, выглядит код, который вычисляет площадь круга, на C++ и Carbon:

// C++:
#include <math.h>
#include <iostream>
#include <span>
#include <vector>

struct Circle {
  float r;
};

void PrintTotalArea(std::span<Circle> circles) {
  float area = 0;
  for (const Circle& c : circles) {
    area += M_PI * c.r * c.r;
  }
  std::cout << "Total area: " << area << "\n";
}

auto main(int argc, char** argv) -> int {
  std::vector<Circle> circles = {{1.0}, {2.0}};
  // Неявное преобразование из «span» в «vector»
  PrintTotalArea(circles);
  return 0;
}
// Carbon:
package Geometry api;
import Math;

class Circle {
  var r: f32;
}

fn PrintTotalArea(circles: Slice(Circle)) {
  var area: f32 = 0;
  for (c: Circle in circles) {
    area += Math.Pi * c.r * c.r;
  }
  Print("Total area: {0}", area);
}

fn Main() -> i32 {
  // Динамический массив, похожий на «std::vector»
  var circles: Array(Circle) = ({.r = 1.0}, {.r = 2.0});
  // Неявное преобразование из «Slice» в «Array»
  PrintTotalArea(circles);
  return 0;
}

В чём он лучше C++

Обратная совместимость. Это главное преимущество языка Carbon над Rust. Он прост в освоении, а ещё на Carbon легко перевести любую программу с C++, не изменяя её поведение.

Современные дженерики. Carbon поддерживает современные системы дженериков с проверенными определениями (checked definitions). А ещё язык умеет работать со встроенными шаблонами на C++, а также даёт дополнительные возможности:

  • проверка типов для определения дженериков — это позволит уменьшить время компиляции для уже определённых объектов;
  • строгие и проверяемые интерфейсы — это уменьшит случайную зависимость от деталей реализации.

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

  • обращением к области памяти после её освобождения;
  • разыменованием нулевых указателей;
  • выходом за границы буфера.

Что ещё

Пока Carbon — это экспериментальный язык, который активно развивается программистами из Google. Официальная дата выхода стабильной версии будет зависеть только от популярности языка в сообществе.

Подробнее познакомиться с Carbon можно на GitHub-странице языка, где есть документация и примеры использования.



Онлайн-школа для детей Skillbox Kids
Учим детей программированию, созданию игр, сайтов и дизайну. Первое занятие бесплатно! Подробности — по клику.
Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована