Carbon — «вбивця» С++ чи рожева мрія? Що айтівці думають про нову мову програмування від Google

Інженери Google запускають нову «експериментальну» мову програмування з відкритим вихідним кодом Carbon, яка має стати наступницею C++.

Чендлер Каррут, інженер компанії, вважає, що С++ має низку проблем, які заважають сучасним розробникам. Еволюцію мови гальмує, зокрема, бюрократичний комітет, орієнтований на стандартизацію. Це ускладнює додавання нових функцій, адже процес ухвалення важливих рішень може тривати роками.

Каррут прагне побудувати Carbon у більш відкритому середовищі під керівництвом спільноти. Проєкт підтримуватимуть на GitHub і обговорюватимуть у Discord, а у своїй презентації Каррут порадив тим, хто використовує Rust, продовжувати ним користуватися. Carbon призначена для тих розробників, які вже мають великі кодові бази на C++, які важко конвертувати в Rust.

DOU зібрав думки айтівців, аби зрозуміти, які характеристики матиме Carbon, чи справді нова мова має шанс замінити чи перевершити С++ та як саме розробники ставляться до такої ініціативи.

«Зараз Carbon схожа на розробку «на колінці»

Павло Суйков, R&D Consultant у GlobalLogic

У С++, безсумнівно, є низка проблем. Проте чи означає це, що її нагально потрібно замінювати іншою мовою — відповісти важко. Адже мова еволюціонує та з часом змінюється, і не можна сказати, що вона зайшла в глухий кут і стала непридатною до використання.

Кожне оновлення щось поліпшує у мові, враховує зміни в ніші, де її використовують. Тож не думаю, що є велика потреба робити «революційні» зміни та повністю змінювати одну мову на іншу.

Одна з головних проблем C++ полягає в тому, що це дуже складна, мультипарадигмальна мова, що розвивалася еволюційно. Сучасна версія С++ не передбачає розвʼязання задач єдино правильним чином — відповідно є чимало речей, які в С++ можна робити багатьма методами, а разом з цим є і труднощі, щоб уніфікувати проєкт.

Наступна проблема — це високий поріг входження. Мова складна для розробки компіляторів. А випуск нових версій компіляторів, як правило, займає багато часу. Причому тут це працює в обидві сторони: у мови складний синтаксис, там контекстно залежна граматика, тому фронтенд компілятора оновлюється повільно.

Наразі в Carbon немає конкретно визначеної семантики, тобто немає повного опису того, що мова конкретно означає, немає жодної стабільної версії. Є неповна документація, яка описує частину речей, які є у мові, і те, що хочеться отримати в результаті. Деякі з них написані доволі абстрактно.

Крім того, в мови немає реалізації. На сьогодні у мови взагалі немає тулчейну, навіть компілятора. Зараз Carbon схожа на розробку «на колінці». І першу версію мови ми отримаємо, ймовірно, не скоро. Можливо, за пів року чи рік.

Важливо те, що ми поки не знаємо, як розвиватиметься мова. Напрямів є два:

  1. Розробники мови заявили про велику та складну ціль — інтероперабельність з С++. С++ складна мова, відповідно забезпечити інтероперабельність з нею — теж важко. Якщо саме це буде пріоритетом, то, ймовірно, Carbon буде все більше схожа на С++, адже багато що зводитиметься до можливостей «плюсів».
  2. Ми отримаємо мову з геть відмінною від описаної зараз семантикою. Як саме це буде — наразі не знаємо, адже навіть самі розробники не мають чіткого плану розвитку Carbon.

Та ж С++ до своїх перших версій (наприкінці 1980-х) йшла до стандарту близько 10 років. Перший стандарт вийшов 1998-го. Carbon чекає схожий процес. До першої стабільної версії мови, яку можна буде предметно обговорювати, ще багато років і велика кількість роботи.

Зараз говорити про те, що Carbon розвʼязує певні проблеми С++, зарано, бо поки нею фактично не можна користуватись.

Із синтаксисом у Carbon дивна ситуація. Наразі мова семантично дуже близька до C++, при цьому синтаксис чомусь зроблений категорично відмінним від С++, що видається дивним, адже мета — перевести програміста саме з «плюсів» на нову хорошу високорівневу мову. А відмінний синтаксис це ускладнює. І це ми ще не бачили складних прикладів з порівнянням коду в C++ та Carbon.

Що видається цікавим у Carbon?

Використання інтерфейсів, на кшталт концептів (або класів типів з Haskell) для обмеження параметризованих типів певними сімействами. Втім, щоб порівняти підхід Carbon та С++20 до цього інструменту, маємо дочекатись можливості писати і збирати складні приклади на Carbon.

Ще одна потенційно цікава особливість — заміна конструкторів на вільні фабричні функції. Зараз, без алгебраїчних типів та можливості диспетчеризації по типах (власне фабрики), вона не має жодного практичного сенсу. Проте це крок у бік від C++, що може призвести до чогось корисного.

«Чи вірю я в потенціал цієї мови? 50 на 50»

Валентин Нечаєв, C/C++ Senior Software Engineer у Ciklum

Зараз Carbon перебуває на слуху, тому що її автором є Google. Попередня спроба компанії розробити мову програмування їм вдалася — Go має попит, відомих користувачів і втілені нею проєкти. Тож спільнота дивиться і думає: «О, Google вміє створювати нові мови».

В Carbon я бачу дві принципові проблеми:

  1. Carbon не створює нову нішу. Її намагаються втиснути туди, де точиться жорстока конкуренція, причому значною мірою конкуренція «хорошого з ще кращим»: наприклад, C, Google C++ (суттєво урізана C++) та повної C++. Можливо, в Google розраховують на повторення історії переходу з C на C++ з новим припливом розробників, які не вміють акуратно писати на С++.
  2. Carbon не готовий до використання. Він навіть не компілюється — щось зараз зламано. В самому проєкті в README сказано: «Carbon Language is currently an experimental project. There is no working compiler or toolchain». З попереднім схожим проєктом, Golang, так не було: коли його продемонстрували публіці, все вже працювало. Також у Carbon суттєво менші можливості для обговорення і впливу на розробку. Немає поштових розсилок, як go-nuts, і форуму. Є лише дискусія на GitHub, який належить Microsoft(!). Все це демонструє невпевненість Google. Це дивно, бо раніше компанія такого не робила.

І наразі зовсім незрозуміло, — що ж за риси «вбивці» C++ має Carbon? Чи вірю я в потенціал цієї мови? 50 на 50. Зараз все «сире». Вважаю, що мову зарано релізити.

Що маємо в нинішній редакції Carbon:

  • Вирівняли синтаксис означень даних. Так, корисно, важливо, в сучасному дусі, але не повністю. Для вказівника залишилось T* замість *T, якби реформа була б повною. І зовсім незрозуміло, чому інженери Google залишили це. В Go виправлено. Проте у простих випадках звикнути до вивернутого синтаксису C++ — один тиждень, а у складних навіть супердосвідчені спеціалісти починають волати «де моє using?»
  • Базовий рівень алгебри типів. Дуже корисно і перспективно, чекаємо на розвиток. Для цього дійсно вартувало вирівняти синтаксис.
  • Рядки тільки UTF-8, навіть не внутрішній UCS? Може, для внутрішніх процесів Google це придатно, але для зовнішніх — ні.
  • Скопійовані з C++ проблеми арифметики (як undefined behavior при переповненні). Приклади, як їх розвʼязати, можна знайти в інтернеті, але чомусь розробники це ігнорують.
  • Розділення інтерфейсу і реалізації. Це гарно для чогось на кшталт Java, але сумнівно для аналога C++: частина реалізації як inline в інтерфейсі необхідна для ефективної роботи.
  • Type erasure: якщо реалізовано повністю, тобто при виконанні система не знає, який тип бачив компілятор, протирічить ефективності (доведено на Java). Подивимось у розвитку.

Згідно з документацією, Carbon матиме легкий для прочитання й написання код. Він дещо легший за С++, це позитивна зміна, бо в перспективі знижує поріг входження і спонукатиме вивчати цю мову та ставати спеціалістами.

Взаємодія з кодом C++ і міграція з нього — постає питання, з якого саме C++? У кращому випадку це «Google C++» з масою обмежень, як заборона винятків. А найімовірніше, це навіть рівень «C з класами».

Ще одна з характеристик Carbon, про яку згадано в документації, — мова підтримуватиме сучасні операційні системи. Але насправді немає проблеми, для розвʼязання якої необхідно вдаватись до створення цілої нової мови.

І наостанок — зараз особливо немає чого підтримувати за допомогою апаратних архітектур та середовищ. Є GPU, але всі адаптації до них зараз — це тип bfloat16. Підтримки GPU-паралельності немає. В C++ можна було б зробити те ж саме, OpenMP вже налагоджений роками.

На мій погляд, варто дочекатись компілятора, зібраного хоча б під Linux, який дає робочу версію, наприклад, простого HTTP-сервера. Тоді можна повертатись до обговорення. Адже сьогодні нічого не зрозуміло — на публіку виклали навіть не напівфабрикат, а приблизний рецепт того, що буде.

«Важливо розуміти, що Carbon — це експериментальний продукт»

Ярослав Недашковський, СТО, Co-Founder в a-Gnostics

Важко сказати, що С++ як стара мова програмування має свої особливості, через які їй важко приваблювати нове покоління розробників. Йдеться про складність для вивчення, «ручну» роботу з пам’яттю, відсутність збірки сміття (garbage collector). С++ не створена за принципом «все включено», де містяться компілятор, бібліотеки, документи, інструменти, менеджер пакетів та багато іншого. Це більше мова для «митців», аніж для програмістів, які створюють типові програми.

З іншого боку, якщо вам потрібно зробити продукт, який потребує інтенсивних обчислень, має витримувати велике навантаження, працювати на багатьох платформах, при цьому з мінімальним споживанням ресурсів, C++ однозначно стане у пригоді. Саме через ці аргументи моя команда обрала «плюси», щоб написати цифровий двійник, який емулює роботу нафтової свердловини.

Важливо розуміти, що С++ розвивається та не стоїть на місці: з’являються нові фреймворки та стандарти, наприклад, фреймворк для написання асинхронного коду Seastar. Саме з використанням цієї бібліотеки створили базу даних ScyllaDB, аналог Apache Cassandra (написана на Java), яка у швидкості перевершує Cassandra в рази.

Важливо розуміти, що Carbon — це експериментальний продукт, для якого буде потрібен довгий процес адаптації. Тому, щоб фахівці почали довіряти Carbon на тому ж рівні, як С++, якій 37 років, потрібен час.

Я не вірю в те, що спеціалісти масово підхоплять та відразу перейдуть на Carbon. У планах розвитку Carbon зазначено, що потенційна ціль наступного року — закінчити версію 0.2. І тільки у 2024–2025 роках ми, можливо, побачимо версію 1.0.

З іншого боку, якщо розробникам Carbon вдасться зробити мову більш привабливою і простою для навчання, розвʼязати проблему з garbage collector (якщо взагалі це можливо), а ще при цьому збережеться велика швидкість роботи та кросплатформеність — це буде великий крок уперед, який зможе привабити чимало програмістів у майбутньому. Хоча мені складно уявити, як саме вони зможуть все це реалізувати.

Що буде далі з Carbon — побачимо. Можливо, ця експериментальна мова стане затребуваною для нішевих проєктів.

«Синтаксис Carbon справив на мене доволі приємне враження»

Максим Гузєєв, Senior Software Developer в ELEKS

Не впевнений, що Carbon може «перевершити» С++, але серйозну конкуренцію скласти може. Сам С++ виріс із С, але так і не зміг повноцінно стати окремою мовою. А підтримка зворотної сумісності тягне за собою технічний борг як С, так і С++. Думаю, розробники Carbon добре обізнані в проблемах С/С++ і проєктують мову з огляду на це.

Якщо подивитися на документацію Carbon, то там практично всі розділи позначені як досі обговорювані, з посиланнями на пул-реквести (по кілька на кожен розділ) і описом пропозицій (наприклад, втілити конкретну ідею аналогічно до того, як це реалізовано в С/С++, або по-іншому). Тобто робота над помилками проводиться — і чимала.

Найпростішими прикладами є заборона на арифметику з вказівниками та каст int у вказівник, що може порушити цілісність даних, відмова від nullptr. При цьому самі вказівники все ж використовуються. Суворий контроль типів та їхніх перетворень, заборона множинного успадкування (крім інтерфейсів) та контроль перетворення типів (derived->base) і ще багато цікавого.

Загалом замінити можна не лише С++, а будь-яку мову програмування. Втім С++ уже має репутацію, прихильників і величезну кількість коду, який треба підтримувати і модифікувати. Це все ще довго підтримуватиме на плаву і мову, і фахівців. Навколо зʼявляються чимало нових мов, що займають свої ніші. C++, хоч і стара й має конкурентів, та все ще «жива». Як і C.

Згідно з документацією, Carbon матиме такі характеристики:

1. Легкий для прочитання й написання код.

Загалом синтаксис Carbon справив на мене доволі приємне враження. Враховуючи, що його розглядають як «покращений С++», він містить багато запозичень з «плюсів». При цьому розробники наголошують на значному скороченні кількості тексту для запису команд: наприклад, замість «const uint32_t someVar;» буде «let someVar : u32;». Навіть оператор match може суттєво скоротити кількість тексту, якщо порівнювати з вкладеними switch. На великих проєктах це може значно зменшити час компіляції.

Читаючи документацію та приклади коду, швидко звикаєш до синтаксису, і через деякий час код читати справді легко. Добре помітними є запозичення з Rust (на цю мову міститься багато посилань у документації), Python, Java.

2. Здатність взаємодіяти з кодом C++ і мігрувати з нього.

Так, interop заявлений як пріоритет. Розробники приділили увагу можливості використання коду та бібліотек, написаних як на Carbon, так і на С/С++, а також поступової міграції на Carbon із С/С++ проєктів.

Carbon використовує ту саму модель пам’яті (memory model), що і «плюси», — це дає змогу легко обмінюватися даними між реалізаціями. Також має бути підтримка не лише окремих функцій у межах коду, а й класів/структур, шаблонів, навіть ідіом!

3. Підтримка сучасних ОС, апаратних архітектур і середовищ.

Тут варто відзначити компілятор LLVM. На відміну від GCC, він має модульну структуру і відкриту специфікацію для IR-формату, що дає змогу додавати підтримку операційних систем, чипсетів тощо швидше і краще.

Крім того, відкритий код і набагато менш бюрократизована процедура рев’ю пул-реквестів мають підвищити швидкість виходу оновлень або підтримки нових платформ.

Поки що у Carbon недоліків фактично немає, бо немає самої реалізованої мови :) Ця мова цілком схожа на будь-яку іншу сучасну мову. Питання в тому, як саме все реалізують «під капотом». З документації зрозуміло, що проєктують Carbon з урахуванням особливостей як С/С++, так і компіляторів. Це, безперечно, фундаментальний підхід.

Все про українське ІТ в телеграмі — підписуйтеся на канал DOU

👍ПодобаєтьсяСподобалось4
До обраногоВ обраному1
LinkedIn



26 коментарів

Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.

Не взлетить

І лише Java переживе всіх

Дуже довго чекати нових вбивць C++.
Якщо потрібно «легке» входження в C++ то QT частково допоможе.
Але там і JS і QML ... дива не буде :)
Вчитися Вчитися і ще раз Вчитися!

Легко в С++ через ембедед. Там, зазвичай, старі стандарти, і не так чіпляються на співбесідах.

Чекаю на модульність, вбудовану підтримку часткової компіляції, безпечне розповсюдження бінарників та стабільний і простий у користуванні ABI. Мабуть, не станеться ніколи.

Назвати мову так щоб вона нормально гуглилась і книги для неї теж я так розумію неможливо для цих інженерів? Як? При таких рівнях співбесід туди в результаті люди не можуть елементарних речей зробити..

Carbon language — що ненормального в цьому пошуковому запиті? Перші сторінки дають виключно релевантні результати.

Carbon language — що ненормального в цьому пошуковому запиті? Перші сторінки дають виключно релевантні результати.

Чудова ілюстрація того, що насправді гугл не пошукова система))

Якщо шукати книгу на сайті з книгами по javascript то ви вбиваєте назву мови і отримуєте результат і для programming in javascript і javascript cookbook і тд. А тут прийдеться гуглити по сайту з inurl з додаванням мова. Ну їхні інженери так і думають мовляв «а чо?» Те що потенційно мільйони людей будуть змушені писати в пошуковий запит лишнє слово і це незручно не доходить.. Так ще і людям які шукають речі з карбону(матеріалу) буде насипати хріні з цієї мови.

Ну, людям, які шукають інформацію про пітонів, певно, теж сиплють книги по Python, a тим, кого цікавлять стрижі, сиплеться інформація про Swift...

Скорее программисты на С++ вымрут раньше, чем появится убийца С++

Так новые появляются:)

В этом вся суть коммента)

Уявляю собі кількість мемів про senõr cabron developer

“10 years experience in Carbon is a must”. Any HR site, 2022, холст, масло, чёрствый хлеб.

жодного порівняння з існуючими «вбивцями»

Carbon сделали, чтоб C++ программисты могли привыкнуть к синтаксису Rust.

Який вплив Carbon може мати на C++ важко сказати, може навіть ніякий. А от Rust він може знищити, бо вирішує схожі задачі і за ним стоїть Google. Може буде як з Go, спочатку Google буде писати на Carbon свої сервіси, потім його потягнуть стартапи та корпорації. Google буде вливати бабло в промоут мови і споснсорувати Open Source проекти на цій мові. І з часом вакансій стане більше і Carbon стане логічним вибором для новогу проекту, замість Rust (на який і зараз важко знайти розробника). А може буде як з Dart (він зараз десь використовується крім Flutter?) який мав вбити JS.

Скоріше буде як Дарт. Щоб переплюнути Раст зараз у цій ніші треба *дуже* постаратись і навіть вливання бабла тут не допоможе. Те що Карбон інтероперує над С++ це скоріше мінус, аніж плюс в цьому сенсі. Раст взлетів (відносно) якраз тому що це *не* плюси, а пропонує набагато сучасніший і потужніший підхід до низькорівневої мови.

Ну і про вбивцю С++ теж смішно, вже як Раст при свій своїй потужності не зможе до кінця «вбити» плюси, то новенька іграшка, навіть від Гугла, тим більше.

Сам пишу на Расті і не бачу причин дивитись в сторону Карбону. Якщо я буду писати низькорівневе щось з нуля, то Раст це автоматичний вибір. А якщо у мене буде якась легасі кодова база на плюсах, то вже краще на плюсах і сидіти ніж намагатись притулити щось зверху.

Раст з функціональщиною та садомазокомпілятором незвичний для звичайних програмістів.
Го чи Пітон отримали популярність за простоту та зручність кодінгу.

Та я тільки за Rust, але я щось не бачу для нього багото вакансій. Може я помиляюсь, але не пригадую великих компаній хто б вкладавля в нього чи писав на ньому свої продукти. Хоча я останній раз цікавився Rust 2 роки тому. Тоді я зустрічав якісь трабли з Rust MSVC на вінді.

На Джині постійно пробігають в рубриці С++, здебільшого — блокчейн.

Може я помиляюсь, але не пригадую великих компаній хто б вкладавля в нього чи писав на ньому свої продукти.

Amazon, Facebook, Google и Microsoft это большие компании?

Так можно, я все проспав — визнаю. Здається викоростиння Rust великими компаніями сильно виросло за останні 5 років. Проспав Rust Foundation.
Як його використовує Microsoft зараза хз. Знайшов, що вони на ньому якісь компоненти вінди переписували, заради експеременту, але що саме вони переписали і чи пішло це в продакшн — не знайшов

Як його використовує Microsoft зараза хз.

например, www.reddit.com/...​streams_built_with_actix

Підписатись на коментарі