Язык программирования C++, на котором написано 95% существующего программного обеспечения, был создан Бьерном Страуструпом, датским инженером со странноватой прической, в далеком 1985 году — очень давно!

Нет, все эти годы язык не стагнировал. Он продолжал свое развитие — пополнялся новыми функциями и обрастал синтаксическим сахаром. Мощный, гибкий, сложный, C++ заменил тогдашний C, добавив больше абстракций, присущих ООП — тот самый «Си с классами».

Но 40 лет — это много. Все это время IT-индустрия открывала инсайты, меняла подходы к разработке ПО, придумывала новые методологии и архитектуры, развивала другие языки и их синтаксисы. В общем, аспекты разработки сильно менялись, эволюционировали.

Поспевал ли за этими изменениями C++? Он старался. И старается до сих пор. НО!

Рабочая группа по стандартизации собирает новые идеи и имплементирует их. Добавление новых фич занимает годы — столько времени уходит на придумывание идей, проверку гипотез, тестирование функций, реализацию библиотек и т. д.

Разработка C++ децентрализована, а разработчиков компиляторов как минимум 3 — каждый понимает стандарт по своему и дополнительно добавляет собственные уникальные фичи. То же самое касается пакетных менеджеров и систем сборки. Говоря иначе — хаос. Хаос, тормозящий развитие языка, его понимание и поддержку.

Это что касается контекста. Если говорить о технических недостатках (они же, кстати, могут считаться и достоинствами, ибо тут с какой стороны посмотреть), то озвучиваются они обычно так: «Да, С++ очень быстрый, экономит память и батарею, но он совсем не безопасный — позволяет выходить за границы массивов, обращаться к освобожденным кускам памяти и все такое».

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

Многие крупные компании (об этом чуть ниже) стремятся объединить усилия, создав полную замену C++ — лаконичную, понятную, безопасную и такую же быструю. Сделать этого пока не удалось, но прогресс есть.

В статье мы разберем наиболее популярные и перспективные C-подобные языки, которые в ближайшем (ну или не очень ближайшем) будущем имеют право заменить C++, став его преемником. Важно подчеркнуть, «имеют право» — вполне возможно, они не сделают этого никогда.

1. Rust

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

Однако в отличие от «плюсов», он обеспечивает полную безопасность памяти — все ссылки указывают только на допустимую память. При этом Rust не использует автоматический сборщик мусора — вместо этого он отслеживает время жизни объекта и его ссылки еще на стадии компиляции программы.

Rust, как и C++, используется в системном программировании. Язык довольно нейтрален и не навязывает какую-либо парадигму программирования, но во многом он построен на идеях функционального программирования. Разумеется, в языке есть все необходимые типы данных и для ООП: структуры (struct), перечисления (enum), черты (trait) и методы (fn).

Вот небольшой пример кода на Rust:

// entry point в программу
fn main() {
  let width1 = 30;
  let height1 = 50;

  println!("Площадь прямоугольника: {} пикселей", area(width1, height1)); // здесь выполняется конвертация тип u32 при передаче аргументов в функцию
}

// пользовательская функция, считающая площадь прямоугольника
// принимает в качестве параметров и возвращает целочисленный тип u32
fn area(width: u32, height: u32) -> u32 {
  width * height
}

Изначально Rust появился как личный проект Грейдона Хоара в 2006 году, когда он работал в Mozilla Research.

«Rust» переводится как «ржавчина». Однако речь идет не о процессе окисления металла, а о грибковых патогенах, которые покрывают листья растений в характерный коричневый цвет, напоминающий ржавчину.

В 2009 году Mozilla начала спонсировать Rust официально и наняла десяток инженеров для помощи Грейдону.

В 2011 году, как часто бывает у языков программирования, компилятор Rust смог скомпилировать сам себя. Тогда же появился привычный логотип с шестеренкой — на самом деле это велосипедная передача для цепи.

До 2015 года Rust был внутренним проектом — о нем мало кто знал и он нигде не использовался. Но именно после 2015 года Rust стал выглядеть, как потенциальный преемник C++. тогда вышел первый стабильный релиз Rust 1.0.

После коронавируса (в рамках реструктуризации) Mozilla стала увольнять сотрудников, многие из которых работали над Rust. В итоге из-за различных опасений в 2020 году был создан фонд — Rust Foundation. В него вошли пять компаний-основателей, заинтересованных в поддержке языка: Mozilla, AWS, Huawei, Google, Microsoft.

Более того, с 2021 года Google теперь поддерживает Rust в разработке приложений для Android наравне с C/C++.

Основные отличия Rust от C++:

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

  • Безопасная память. Rust использует так называемую систему «владения и заимствования» для управления памятью, тем самым предотвращая утечки и ошибки на уровне компиляции. Компилятор проверяет время жизни переменных и гарантирует отсутствие обращений к уже освобожденной памяти. C++, напротив, позволяет вручную управлять памятью с помощью соответствующих ключевых слов и функций: new, delete, malloc и free. Да, это увеличивает гибкость, но в то же время требует от программиста большей осторожности.

  • Единообразная компиляция. У Rust есть основной компилятор, который поставляется с пакетным менеджером Cargo для управления зависимостями и сборки проектов. В этом смысле Rust более един и централизован. А значит, в его инфраструктуре сложнее запутаться. А вот у C++ есть множество поставщиков компиляторов (GCC, Clang, MSVC), каждый из которых по-своему поддерживает общий стандарт языка. То же касается внешних систем сборки и пакетных менеджеров. Неопытному разработчику это может показаться одним большим беспорядком.

Мем virgin/chad про Rust и C++ (источник: Skillbox Media)
Мем virgin/chad про Rust и C++ (источник: Skillbox Media)

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

Год выпуска

2015

Разработчик

Mozilla (Грейдон Хоар), Rust Foundation

Расширение файлов

.rs и .rlib

Пакетный менеджер

Cargo

Официальный сайт

rust-lang.org

2. Golang

Golang — компилируемый язык программирования, разработанный компанией Google. Хотя обычно его называют просто Go. Но ни в коем случае не путайте Go с Go!последний имеет восклицательный знак в конце названия и является совершенно другим языком программирования.

С самого начала Go задумывался как более современная замена C и C++ — такая же высокоэффективная и способная работать на распределенных системах, вроде многоядерных процессоров.

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

Go стремился вобрать в себя простоту динамических языков, вроде Python или Ruby, и производительность компилируемых языков, вроде C и C++. Но, в отличие от «плюсов» и Rust, в Golang имеется сборщик мусора.

Вот пример простого HTTP-сервера на Go:

// объявление главного пакета
package main

// подключение библиотек консольного вывода и работы с HTTP-соединением
import (
    "fmt"
    "net/http"
)

// функция обработки запроса hello
func hello(w http.ResponseWriter, req *http.Request) {
    fmt.Fprintf(w, "hello\n") // вывод приветствия в консоль
}

// функция обработки запроса headers
func headers(w http.ResponseWriter, req *http.Request) {
    for name, headers := range req.Header {
        for _, h := range headers {
              fmt.Fprintf(w, "%v: %v\n", name, h) // вывод HTTP-заголовка в консоль
    }
  }
}

func main() {
    // поочередное добавление обработчиков запросов к роутеру
    http.HandleFunc("/hello", hello)
    http.HandleFunc("/headers", headers)

    // запуск сервера
    http.ListenAndServe(":8090", nil)
}

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

А еще у Golang есть собственный встроенный пакетный менеджер Go Package Manager.

Кстати, на Golang написали некоторые популярные инструменты разработки:

  • Docker. Самый известный и, возможно, самый сложный продукт, написанный на Go — открытая платформа для контейнеризации приложений.

  • Kubernetes. Система оркестрации контейнеров, тесно связанная с Docker, тоже написана на Go. Более того, Kubernetes написали сами создатели языка — разработчики из Google. Можно сказать, что Kubernetes — одна из внутренних разработок Google, для которых и задумывался Golang.

  • Container Linux. Не вся целиком, но большая часть компонентов этой легковесной операционной системы написаны на Golang.

Год выпуска

2009

Разработчик

Google

Расширение файлов

.go

Пакетный менеджер

Go Package Manager

Официальный сайт

go.dev

3. Swift

Swift — это язык программирования от компании Apple, который предназначен для разработки приложений на закрытых платформах компании: iOS и macOS. На удивление (учитывая тотальную закрытость всех разработок Apple), язык имеет открытый исходный код.

Также, как и Golang, язык Swift имеет собственный официальный пакетный менеджер The Swift Package Manager — сокращенно просто SwiftPM.

Вот пример кода на Swift, в котором реализована логика отгадывания числа через консоль:

// подключение библиотеки для работы с консолью
import Foundation

// генерация случайного числа от 1 до 100
let secretNumber = Int.random(in: 1...100)
var guess: Int?
var attempts = 0

print("Попробуйте угадать число от 1 до 100.")

// цикл, внутри которого выполняется работа с консолью
while guess != secretNumber {
    print("Введите число: ", terminator: "")

    if let input = readLine(), let number = Int(input) {
        guess = number
        attempts += 1

        if number < secretNumber {
            print("Мое число больше.")
        } else if number > secretNumber {
            print("Мое число меньше.")
        } else {
            print("Поздравляем! Вы угадали число за \(attempts) попыток.")
        }
  } else {
            print("Некорректное число. Введите еще раз.")
  }
}

Из-за закрытости платформ Apple язык Swift подойдет только для:

  • мобильных разработчиков, которые пишут приложения под операционную систему iOS;

  • десктопных разработчиков, которые пишут приложения под операционную систему macOS;

  • геймдев-разработчиков, которые пишут игры игры под все платформы Apple;

  • бэкенд-разработчиков сайтов, которые работают с веб-библиотеками Swift;

То есть любые другие платформы, будь то Windows, Linux или Android, не подойдут для финального запуска приложений, написанных на Swift.

Более того, с большей вероятностью разработчикам, которым нужна качественная поддержка нативных функций Apple, просто придется погрузиться в Swift. Благо его синтаксис похож на другие C-подобные языки.

Год выпуска

2014

Разработчик

Apple

Расширение файлов

.swift

Пакетный менеджер

The Swift Package Manager (SwiftPM)

Официальный сайт

swift.org

4. Carbon

Carbon — это абсолютно новый (он появился в 2022 году) компилируемый язык общего назначения от компании Google, который позиционируется как более синтаксически элегантный преемник C++.

Язык имеет открытый исходный код, поэтому любой желающий может ознакомится с его реализацией в официальном репозитории на GitHub.

На момент 2024 года Carbon все еще находится на стадии экспериментальной версии — готовая к производству ожидается только после 2027 года.

Вот небольшой пример кода на Carbon:

package Geometry; // код ниже будет содержимым пакета Geometry
import Math; // подключение библиотеки с математическими функциями

// пользовательский класс
class Circle {
      var radius: f32; // переменная типа float32
}

// пользовательская функция
fn PrintTotalArea(circles: Slice(Circle)) {
      var area: f32 = 0;

      for (circle: Circle in circles) {
              area += Math.Pi * circle.radius * circle.radius;
      }

      Print("Площадь круга: {0}", area);
}

// entry point, который возвращает переменную типа int32
fn Main() -> i32 {
      // Array является аналогом динамического массива std::vector
      var circles: Array(Circle) = ({.radius = 1.0}, {.radius = 2.0});

      // при передаче аргументов в функцию происходит неявная конвертация типа Array в Slice
PrintTotalArea(circles);

      return 0;
}

Кстати синтаксис Carbon очень похож на синтаксис Rust, хотя и не полностью. Есть 2 причины появления Carbon. Ну или мотивации его создания:

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

  • Бизнес-решение. Google — это огромная корпорация мирового уровня. Большая часть того, что нас окружает (поисковик, сервисы, Android) — это все Google. И именно он использует C++ больше всего. По этой причине Google на протяжении последних 20 лет вкладывал огромные ресурсы в поддержку и улучшение этого языка, его компиляторов, инструментов (например, Clang-Tidy и Google C++ Style Guide) и библиотек. Во многом он влиял на философию написания кода, которая окутывает язык. А еще долгое время состоял национальной рабочей группе по стандартизации С++. А теперь представьте, что вы хотите внести серьезное (а, возможно, и не серьезное) изменение в язык, но не можете этого сделать — огромный легаси, написанный 20 лет назад и который нечем заменить (либо это очень дорого) просто сломается. Это сильно ограничивает Google в решении технических задач и заставляет сервисы компании стагнировать. Поэтому Carbon — следствие бизнес-потребности Google.

На самом деле Apple сделала то же самое. Компании надоело возиться с крайне инертным C++, и она заменила его его на Swift. Не полностью, но заменила — ядро ОС по-прежнему на «плюсах», а клиентские приложения уже на Swift.

Вот несколько важных особенностей Carbon:

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

  • Централизованная поддержка. Изменения в языке решают только руководством Carbon — никаких комитетов и рабочих групп с многочисленными участниками. С другой стороны, это не исключает получения полезной обратной связи от разработчиков других крупных компаний и IT-гигантов.

  • Регулярные обновления. Новые функции в язык C++ приходится ждать десятилетиями. Пока кто-то придумает новую фичу в виде отдельной библиотеки, пока кто-то ее протестирует, пока о ней узнают в комитете, пока согласуют, доработают, добавят в стандарт и так далее и тому подобное. Короче, целая вечность. С Carbon все иначе — обновления языка, даже самые незначительные, будут выходить регулярно. CI/CD во всей красе!

  • Модульная система. Carbon имеет более интуитивную систему модулей — файлы с кодом объединяются в абстракцию, под названием «пакет». Каждый такой пакет можно импортировать и использовать его функции. В C++ с этим немного сложнее. Нужно выполнять «инклуды» и в явном виде помогать препроцессору языка собрать все воедино. Тем не менее, пакетный менеджер для управления зависимости пока на уровне дискуссии в GitHub — некоторые разработчики, разумеется, желают увидеть официальный пакетный менеджер Carbon.

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

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

Год выпуска

2022

Разработчик

Google (Чендлер Каррут)

Расширение файлов

.carbon

Пакетный менеджер

-

Официальный сайт

github.com/carbon-language/carbon-lang

Заключение

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

Тем не менее стоять на месте нельзя. Относительно «древний» каркас C++, берущий свое начало в прошлом столетии, все еще работает и разумеется решает задачи, но не поспевает за современной разработкой.

Даже сам создатель C++ как-то сказал:

Бьерн Страуструп, компьютерный инженер, разработчик первых версий C++
Бьерн Страуструп, компьютерный инженер, разработчик первых версий C++

«Эволюция необходима, чтобы справляться с вызовами меняющегося мира и реализовывать новые идеи».

Evolution is necessary to meet the challenges of a changing world and to incorporate new ideas»)

Старые дома можно реставрировать до поры до времени. Построить же новый мегаполис можно только полностью с нуля — после сноса старого. С соблюдением всех современных стандартов.


НЛО прилетело и оставило здесь промокод для читателей нашего блога:
-15% на заказ любого VDS (кроме тарифа Прогрев) — HABRFIRSTVDS

Комментарии (21)


  1. Gay_Lussak
    27.08.2024 09:41
    +2

    C++, напротив, позволяет вручную управлять памятью с помощью соответствующих ключевых слов и функций: new, delete, malloc и free.

    Уже давно ручное управление памятью является bad practice. RAII-концепция захватывает все больше вещей в С++, начиная с просто умных указателей, заканчивая автоматическим управлением потоками - std::jthread. Проблем конечно хватает даже с умными указателями. Но так манипулировать тоже не стоит.


    1. codecity
      27.08.2024 09:41

      Проблем конечно хватает даже с умными указателями.

      Одна из - перемещение не отслеживается. Но у Rust так же реализовано топорно - если вы переместили внутри некого блока, который даже никогда не исполнится и потом попробуете использовать возможно перемещенное значение - оно уже не даст скомпилировать такой код.


  1. bvvbvv
    27.08.2024 09:41

    Привет,
    только что разместил здесь этот скриншот.
    Давайте обсудим, как это может быть.
    BTW эта зависимость существует для всех проблем, которые я решил там.
    Я имею в виду время и память.


    1. bvvbvv
      27.08.2024 09:41
      +2

      Может быть, все VM для Python и C/C++ перегружены, а для Rust - нет?


    1. domix32
      27.08.2024 09:41
      +1

      Насколько я понимаю память считается вместе с виртуалкой/докером, на которой запускается С/С++. Она же даёт какой-то оверхед на рантайм. Минимальный размер по памяти у С++ в районе 10 мб. На некоторых задачах видел ~8, но никогда меньше. У раста минимальный рантайм отъедает примерно 2 мб.

      А так - если алгоритмы написаны одинаково на Rust и на C/C++, то рантайм на литкоде будет различаться на пару миллисекунд. Судя по отъедаемой памяти - код не был эквивалентен.

      Ещё один нюанс - автовекторизация. С/С++ используют два компилятора - gcc и clang. rust только clang. Поэтому велик шанс, что у раста сгенерировались векторные вставки, а у плюсов - нет.

      Третий вариант - то как читаются данные. Раньше для ускорения можно было использовать олимпиадный трюк

      auto gucciGang = []() {
        std::ios::sync_with_stdio(false);
        cin.tie(nullptr);
        cout.tie(nullptr);
        return 0;
      }();

      Но похоже в какой-то момент они это прописали где-то в своём бойлерплейте и трюк больше не добавляет ускорение. Повторные ресабмишны С++, кстати, примерно по той же причине могут отдать сильно иные цифры.


  1. menelion_elensule
    27.08.2024 09:41
    +2

    А что скажете по поводу Zig? Вроде как тоже претендент на замену Плюсов.


    1. voidinvader
      27.08.2024 09:41
      +1

      Впервые слышу про этот язык, но надеюсь, что среда его исполнения называется не Hile.


  1. domix32
    27.08.2024 09:41
    +4

    После коронавируса (в рамках реструктуризации) Mozilla стала увольнять сотрудников,

    насколько мне известно сокращения начались раньше из-за сокращения финансирования из-за того что гугл вляпался в антимонопольную историю и сократил плату за дефолтный поисковик в браузере.

    Более того, с 2021 года Google теперь поддерживает Rust в разработке приложений для Android наравне с C/C++.

    А есть ссылка? Насколько мне изестно официальная поддержка раст только в проекте Fuchsia - операционная система для IoT-like устройств. Ну и в кодовой базе появилось несколько переписанных модулей, имевших застарелые проблемы безопасности, связанные с памятью, в частности bluetooth модуль.

    Из-за закрытости платформ Apple язык Swift подойдет только для:

    Там недавно вроде кроссплатформенность какую-то базовую завезли.

    Кстати синтаксис Carbon очень похож на синтаксис Rust,

    Он похож скорее на D, чем на Rust. И вероятно имеет такие же успехи стать заменой С++ как и D.

    Более вероятными "убийцами" С++ могут стать Zig, CppFront и Odin.

    Zig во многом похож на Go, однако не имеет сборки мусора и в среднем находится где-то между Си и Go.

    CppFront - фактически C++ без легаси - то как язык должен был бы выглядеть, если бы не бремя легаси - консистентный синтаксис вместо спирали смерти C/C++, нормальные дефолты, сокращение бойлерплейта, адекватные ошибки, современные фишки, полная обратная совместимость с С++. Фактически оно всё это конвертит в тот же С++ активно обмазывая это кусками GSL, как в своё время он это делал с С++, конвертируя его в С.

    Odin - ещё один С-подобный язык, во многом синтактически похожий на Go и Zig. Целью языка был лаконичный и быстрый компилятор - по заветам Джона Блоу - который можно было бы также легко написать как и компилятор Си. Синтаксис языка устроен таким образом, чтобы его рефакторинг происходил как можно проще и эволюция программы от этого страдала меньше. При этом сборочная система языка требует только компилятор этого самого языка, что опять же отлично сказывается на экосистеме.

    Zig и Odin топят за ручное управление памятью, но с синтаксическим сахаром, что делает их на порядок безопаснее того же Си и C++, при том что по производительности они не уступают. У обоих имеется свой вариант Tagged Union (в Rust они представлены как enum), что также облегчает работу со многим вещами, такими как машины состояний. Ну и кажется у обоих имеется рефлексия на уровне языка.


  1. AnROm
    27.08.2024 09:41
    +4

    Можно писать сколько угодно статей "Язык Х - убийца C++", но уже написанный C++ код никто полностью переписывать не будет, это потребует много времени и денег. Да и после реанимации языка, начиная со стандарта C++09, все не так плохо.


    1. DarkTranquillity
      27.08.2024 09:41
      +3

      Я например просто устал от этих растаманов и прочих, которые не осилили плюсы.

      Они все еще живут в страхе от new/delete, которые, как сказали выше, уже давно практически моветон.

      Зато жутко уродский синтаксис ржавого никого не смущает.


      1. BenGunn
        27.08.2024 09:41

        Бро, про синтаксис прямо в точку. Мне иногда кажется, что Rust синтаксис был придуман как бунт против плюсов. Главное что бы не так как у них.


    1. 0x00fe
      27.08.2024 09:41

      нету такого стандарта


  1. rukhi7
    27.08.2024 09:41

    А вставки на Ассемблере или целые функции какая-нибудь из предлагаемых замен позволяет писать?

    Тема осталась не раскрытой.


    1. 0x6b73ca
      27.08.2024 09:41

      https://doc.rust-lang.org/reference/inline-assembly.html


    1. codecity
      27.08.2024 09:41

      А вставки на Ассемблере или целые функции какая-нибудь из предлагаемых замен позволяет писать?

      А вот с C++ это работает не везде. Так, начиная с Visual Studio 2022, Microsoft больше не поддерживает ассемблерные вставки (inline assembly) в компиляторе Visual C++ при компиляции с использованием режима x64 (64-битного кода).


  1. firehacker
    27.08.2024 09:41
    +3

    C++, выглядит громоздким и архаичным

    Что за субстанция в голове у людей, которые вот так искренне считают...

    fn funcname() -> rettype

    Вместо

    rettype funcname()

    И эти люди смеют заикаться о громоздкости... Что касается архаичного, якобы, внешнего вида, то это чистой воды NIH-синдром и юношеское революционерство, желание стать Страуструпом 21-го века и дистанцироваться от предыдущих поколений.


    1. BenGunn
      27.08.2024 09:41

      На плюсах тоже можно так писать нынче. Просто бойзы не в курсе что так можно :)


      1. Melirius
        27.08.2024 09:41

        Там не fn, там auto - на целых две буквы больше!


  1. NeoCode
    27.08.2024 09:41
    +2

    Обратная совместимость. Код C++ можно включать в файлы Carbon. 

    Вот это очень важно. Чтобы прямо в рамках одного проекта работало - старое можно до поры до времени (или навсегда) оставить на С++, новое писать на новом языке. И чтобы все среды разработки из коробки поддерживали такие гибридные проекты.

    Собственно, и в рамках самого С++ можно было бы так сделать - развитие текущего С++ заморозить навсегда, выпустить некую очередную версию языка без всех костылей и легаси, несовместимую со старым кодом, назвать это С++2, старый код от нового отличать за счет другого расширения файла или #pragma version 2 в начале файла. Но чтобы можно было легко собирать гибридные проекты. Тогда у разработчиков будет стимул постепенно переходить на новый язык, новые проекты сразу на новом, в старых - добавлять новые файлы на новом языке и переписывать старый код лишь по мере необходимости (или вообще не переписывать, если таковой необходимости нет).


    1. BenGunn
      27.08.2024 09:41

      Не нравится старый стиль - не используй! У тебя есть древний код из эпохи древних стандартов или вообще некросишный код? Напиши враперы и юзай современные плюсы и даже новый язык придумывать не надо. Считаю, что у плюсов три серьезный минуса - это медленная сборка, распространение кода(надо запарится, что бы какую нибудь либу слинковать с проектом) и системы сборки которое шо то шо это. Одинаковое г-но.


  1. codecity
    27.08.2024 09:41

    По итогу - надежды на Carbon. А так пока ничего толкового нет.

    Теперича C++ уже не тот, что давеча. Неудобства конечно есть, но не так чтобы сильно критичные.