При наличии множества языков программирования нам действительно нужен еще один? Как говорит Google — конечно, да.
Официально представленный миру в прошлом месяце Чандлером Каррутом на CppNorth, Carbon заставил сообщество программистов заговорить о себе.
Но что это за язык? Как это работает? И работает ли?
C++ работает, но в чем проблема?
C++ существует намного дольше, чем некоторые из нас живут. Разработанный в 1982 году и выпущенный в 1985 году, C++ нашел свое применение в операционных системах, браузерах и играх.
Хотя C++ не самый крутой язык для изучения (если только вы не хотите идти по пути разработки игр), он по-прежнему используется в приложениях, требующих производительности, скорости и немного ограниченных в доступности ресурсов.
Короче говоря, C++ — это язык программирования общего назначения, в котором есть все обычные навороты, такие как классы и объекты, абстракция, инкапсуляция, полиморфизм и наследование. Он строго типизирован, чувствителен к регистру, использует указатели и имеет обширную библиотеку функций.
Но что не так с С++?
В целом критика C++ состоит в том, что он слишком сложен. IntelliSense вообще отстой, отсутствует поддержка first-class функций и кортежей, а списки инициализаторов считаются «хаком». В дополнение к этому, есть несколько причуд, таких как повторяющийся синтаксис и операторы, такие как &, являющийся одновременно логическим оператором и ссылкой.
Кроме того, существует проблема, связанная с тем, что каждый поставщик компилятора придумывает свои собственные имена и предотвращает связывание модулей от разных компиляторов.
Полно и других проблем, но если коротко, C++ работает, но у него есть свои проблемы.
Что делает Carbon
Как и любой язык программирования, созданный до появления многих из нас, C++ имел смысл во время своего создания — но сейчас уже устарел.
По мере того, как инженеры-программисты, программисты и разработчики становятся все более сведущими в искусстве воплощения идей в логику, мы находим лучшие способы воплощения их в коде.
Go, Swift, Kotlin и Rust являются производными от связанных с ними языков программирования. Все они были созданы с целью упростить сложность. Carbon выполняет ту же миссию.
Согласно официальному репозиторию GitHub, Carbon является языком-преемником. Это означает, что он не стремится улучшить C++, а полностью заменить его.
Он имеет аналогичные подходы, такие как сопоставимую производительность, но с более легкой кривой обучения, чтобы сделать его более доступным для большей группы разработчиков.
Подход похож на Kotlin и TypeScript, где вам не нужно избавляться от существующей кодовой базы, а просто можно наложить Carbon на C++ проект и все будет работать.
Вот фрагмент кода Carbon, работающего с C++:
// C++ code used in both Carbon and C++: struct Circle { float r; }; // Carbon exposing a function for C++: package Geometry api; import Cpp library "circle.h"; import Math; fn PrintTotalArea(circles: Slice(Cpp.Circle)) { var area: f32 = 0; for (c: Cpp.Circle in circles) { area += Math.Pi * c.r * c.r; } Print("Total area: {0}", area); } // C++ calling Carbon: #include <vector> #include "circle.h" #include "geometry.carbon.h" auto main(int argc, char** argv) -> int { std::vector<Circle> circles = {{1.0}, {2.0}}; // Carbon's `Slice` supports implicit construction from `std::vector`, // similar to `std::span`. Geometry::PrintTotalArea(circles); return 0; }
Круто. Итак, у нас есть апгрейд C++, но каковы на самом деле преимущества?
- Дженерики: в C++ дженерики являются только дженериками до тех пор, пока типы не будут заменены в рантайме. Шаблоны решают эту проблему, но это не окончательное решение. Carbon предлагает правильные дженерики, параметризируя код, а не создавая почти дубликаты, как это сейчас работает в шаблонах.
- Наследование: C++ дает абстрактные базовые классы и не имеет элементов данных. Carbon предлагает неполиморфное наследование.
- Перегрузка операторов: вы можете определить, как операторы Carbon применяются в пользовательских типах.
Это общая суть. Другие преимущества — более быстрая и повышенная масштабируемость разработки за счет лучшей организации кода и модульных структур, поддержка всех современных ОС и сред, безопасные механизмы тестирования. Еще одним важным преимуществом Carbon является то, что в нем учли все знания и ловушки, найденные в C++, чего не было у предшественника из-за среды, в которой он был создан.
Когда релиз?
В настоящее время Carbon находится на экспериментальной стадии. Текущая дорожная карта выглядит следующим образом:
- Выпуск основной рабочей версии (0.1) к концу 2022 г.
- 0.2 в 2023 г.
- Релиз 1.0 в 2024–2025 гг.
Это в основном все на данный момент. Документация по Carbon в целом лаконична и доступна даже для тех, кто не является разработчиком C++.
В целом, должно быть интересно, как Google будет продвигать Carbon, когда он будет полностью готов. Вытеснит ли он Kotlin из Android-разработки, как тот когда то вытеснил Java? Или, возможно, он будет связан с разработкой игр для Android?
Каким бы ни было будущее, Carbon наступает. Чем это закончится, мы, вероятно, узнаем через несколько лет.