Программирование
Google выпустил Carbon, новый язык программирования. Что теперь?
Каким бы ни было будущее, Carbon наступает. Чем это закончится, мы, вероятно, узнаем через несколько лет.
При наличии множества языков программирования нам действительно нужен еще один? Как говорит 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 наступает. Чем это закончится, мы, вероятно, узнаем через несколько лет.