П’ять років тому команда розробників з компанії JetBrain вирішила, що світові потрібна більш лаконічна та типово-безпечніша мова ніж Java — й створила Kotlin. Мова прижилася, а Android визначив її як рекомендовану мову програмування для розробки застосунків.
Тепер програмісти, але уже з Google, думають над тим, щоби переосмислити С++ та пропонують замість неї нову, експериментальну мову програмування Carbon. У липні 2022 року на конференції СPP North C++ в Торонто розробку представив Чендлер Каррут, який керує напрямом технічних мов програмування в Google.
Раніше у Google уже були подібні проєкти — і успішні, і не дуже. Наприклад, у 2007 році троє розробників компанії спроєктували мову програмування Golang (або просто Go). Нова розробка чудово підійшла для високонавантажених систем, тому вже досить добре проявила себе у бекенді, веброзробці та десктопних застосунках.
«Gо — це мова невеликих, але дуже швидких сервісів. Однак, якщо «тягнути» її в enterprise з Agile-проєктами як основну, то може бути халепа зі швидкістю розробки. Зараз Go зайняла нішу атомарних сервісів, в якій раніше була мова С. Втім, попри створення деяких best practice, у ком’юніті не спостерігається якогось сталого фреймворку. Кожна аплікація на Go «особлива», відповідно, кожній команді потрібно робити свій «велосипед», — говорить Федір Мохонь, Solution Architect.
Через чотири роки Google реалізувала мову Dart — її задумували як прогресивну заміну JavaScript, яка на той момент мала проблеми з розширюваністю, продуктивністю та підтримкою роботи складних застосунків. Однак широкого використання ця мова не отримала, і зараз використовується хіба що разом з Flutter.
Навіщо потрібен Carbon?
На сторінці нової мови на GitHub Керрут пояснює: C++, яку застосовують для критично важливих для продуктивності застосунків, має низку проблем, які заважають сучасним розробникам. Це і десятиліття технічного боргу, і багато застарілих практик, які С++ забрала у своєї попередниці, мови С, і бюрократичний комітет, неповороткість якого значно сповільнювала оновлення та еволюцію мови.
Крім того, у С++ немає безпеки пам’яті, яку матиме Carbon. Зараз помилки у доступі до пам’яті є одними з найбільших ризик-факторів у плані безпеки. Розробники Carbon будуть шукати способи кращого відстеження неініціалізованих станів, розробки API та ідіом, які підтримують динамічні перевірки меж, і створювати комплексний режим збірки. Планується, що пізніше дизайнери створять безпечний піднабір для Carbon.
Розв'язувати перелічені проблеми за допомогою С++ справді складно, тож після досліджень та оцінки багатьох мов, інженери Google вирішили створити нову. Передбачається, що Carbon позбудеться багатьох недоліків С++, але водночас матиме схожий синтаксис та подібний функціонал.
Ось приклади коду, написані на С++ та Carbon:
Якою буде нова мова?
Carbon побудують на основі сучасних принципів програмування, включно із системою, яка позбавить необхідності переперевіряти код після кожного екземпляру. У ній є компілятор, бібліотеки, інструменти, документи, pavage manager та багато іншого. Компілятор коду написаний з використанням LLVM та напрацювань Clang — компілятора для C, C++, Objective-С й Objective-C+.
Відповідно до документації, мова матиме такі характеристики:
можливість створювати критично важливе для продуктивності ПЗ;
код, який легко читати, писати та підтримувати;
здатність взаємодіяти з кодом на С++ та мігрувати з нього;
можливість швидкої та масштабованої розробки;
підтримка сучасних ОС, апаратних архітектур та середовищ;
практична безпека та перевірка механізмів.
Команда розробників також збирається створити вбудований package manager, чого дуже бракує C++.
Де можна протестувати нову мову?
Вихідний код можна завантажити на GitHub. Google прагне зробити Carbon незалежним проєктом, тож всі охочі можуть долучитися до обговорення в Discord. Крім того, потестувати нову мову можна в браузері завдяки інтеграції з Compiler Explorer. Вихідний код проєкту розповсюджують за ліцензією Apache 2.0. В мережі вже є докладні відеогайди, як встановити собі карбон — з синтаксисом та прикладами.
У документації сказано, що мова поки не готова до повноцінного використання. Наразі вона не має конкретної семантики та повноцінної реалізації. Для порівняння, у 2007 році розробники побачили GoLang вже повністю готовим до використання.
«Go — це не випадковий успіх, а відповідь на декілька проблем. По-перше, це суттєве ускладнення бізнес-логіки застосунків в останнє десятиліття, що своєю чергою спричинило перехід до мікросервісної архітектури. Моноліт на Java, який компілювався годинами та вимагав гігабайти пам‘яті для роботи просто перестав вирішувати проблеми девелоперів. Для розробки мікросервісів, які швидко обробляють запити й ефективно використовують ресурси системи Go де-факто вже став стандартом. По-друге, на Go, крім вебзастосунків, швидко і зручно писати різноманітний тулінг, написання якого на тому ж C зайняло б набагато більше часу. Щонайменше, через manual memory management», — говорить Дмитро Гаранжа, Team Lead at Howly.
Тож зараз на Carbon можна лише переписати окрему бібліотеку та використати її в наявному проєкті на С++. Однак малоймовірно, що коли розробку мови завершать, її ключові принципи істотно зміняться.
А чому не обрати Rust
Одразу після презентації Чендлера Каррута в Торонто, в спільноті з'явилися думки про те, що Carbon може грати на полі Rust — ще однієї мови для низькорівневого програмування, яку розробляє Mozilla Research. За структурою мова Rust нагадує «плюси», але істотно відрізняється в деяких деталях реалізації синтаксису й семантики, а також орієнтацією на блокову організацію структури коду.
Утім, проєктам, що активно працюють з C++, досить важко перенести проєкт на Rust, адже мова має properties та модулі, яких не має в C++. З одного боку, поки не можна стверджувати, що Rust і Carbon конкуренти. З іншого, якщо Google буде активно промотувати свою мову, і з’являтимуться фахівці, що пишуть нею, Rust може бути посунутий. В чому основні відмінності двох мов?
Як далі розвиватиметься Carbon?
Відповідно до дорожньої карти, основну версію, яку можна буде використовувати для загальних цілей, планують закінчити до кінця 2022 року. До того часу розробники уже пропрацюють оператори, класи, універсальні шаблони, основні типи інтерфейсів, вказівники, і, власне, відшліфують сумісність з мовою С++.
Передбачити, чи замінить Carbon C++ повністю, важко — нова мова поки лише експериментальна. На її впровадження підуть роки, навіть якщо вона «злетить». До того ж достеменно не відомо, який саме рівень С++ Carbon зможе замінити: чи Google C++, чи С++, що містить класи, а від цього буде багато залежати. Однак навіть зараз можна помітити, що потенційний успіх мови лежить у царині використання кодових баз С++, які легко мігрують на Carbon. У спільноті фахівців побутує думка, що запорука потенційного успіху нової мови — можливість компіляції на різних платформах, а для цього Carbon має бути максимально портативним та простим для імпорту й міграції.
Comments