×

Google запускає нову мову програмування Carbon — експериментальну заміну C++

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

Головне

  • Розчаровані повільною еволюцією C++, інженери Google запустили нову «експериментальну» мову програмування з відкритим вихідним кодом під назвою Carbon. Інженер Google Чендлер Каррут представив мову цього тижня на конференції CPP North C++ у Торонто.
  • С++, за словами Каррута, має низку проблем, які заважають сучасним розробникам. Еволюцію мови гальмує, зокрема, бюрократичний комітет, орієнтований на стандартизацію. Це ускладнює додавання нових функцій, адже процес прийняття важливих рішень може тривати роками.
  • Carbon буде побудовано на основі сучасних принципів програмування. Компілятор коду Carbon написаний за допомогою LLVM (Low Level Virtual Machine). Також у ньому використовували напрацювання з Clang — компілятора для C, C++, Objective-С й Objective-C++.
  • Згідно з документацією, Carbon матиме наступні характеристики: легкий для прочитання й написання код; здатність взаємодіяти з наявним кодом C++ і мігрувати з нього; підтримуватиме сучасні ОС, апаратні архітектури та середовища тощо. Розробники Carbon шукатимуть способи кращого відстеження неініціалізованих станів, розробки API. Команда планує написати інструменти перекладу для перенесення коду C++ у код Carbon.
  • Ось як виглядає код код C++ і та сама функція, написана на Carbon:

Деталі

У своїй презентації на CPP North Кфррут порадив тим, хто використовує Rust, продовжувати ним користуватися. Carbon призначений для тих розробників, які вже мають великі кодові бази на C++, які важко конвертувати в Rust.

Каррут хоче побудувати Carbon у більш відкритому середовищі під керівництвом спільноти. Проєкт підтримуватиметься на GitHub і обговорюватиметься на Discord. Хоча Carbon починався як внутрішній проєкт Google, команда розробників хоче скоротити внески від Google або будь-якої іншої окремої компанії до менш як 50% до кінця року. Зрештою вони хочуть передати проєкт незалежному фонду програмного забезпечення, де його розробкою керуватимуть волонтери.

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

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

Схожі статті




52 коментарі

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

Каждый раз, когда Google что-то запускает, прикидываю, как быстро Google это закроет. Как там успехи у Dart, кстати?

Скільки вже не вигадали нових мов за останні 25 років, а все одно краще Java нічого немає

Ви, мабуть, так на 25 років і застрягли:
1) Для різних доменів — різні мови. Java не вміє в manual memory management. Carbon — саме для цього домена і Java тут не піде.
2) C# покращив Java багато у чому. Якби MS не застигла з Windows, тої Java ніхто б і не знав.
3) Kotlin витісняє Java з багатьох попередніх ролей.

А що таке

manual memory management.

?

Коли GC нема, і програміст має сам слідкувати за вказівниками, і звати free/delete саме тоді коли треба.
Ви дійсно не знаєте цього?

Зрозуміло, я це знаю, але вважаю це worst practice через потенційно велику кількість пов’язаних проблем і ніколи не використовував.

вважаю це worst practice

Наааааайс...
ви розумієте, що GC придатний, мʼяко кажучи, не всюди?

С разморозкой. Вы сильно отстали. Уже как как 22 года есть C#.

Какое-то очень половинчатое получилось изделие.

Как объявить идентификатор, совпадающий с ключевым словом? (критично для всякого легаси)

Запрет неявных форвардов — чего пытаемся доказать? Всё равно области видимости важнее.

> Underscores _ may be used as digit separators, but for decimal and hexadecimal literals, they can only appear in conventional locations.

То есть разделить десятичную константу по 2 цифры я уже не могу?

Арифметику не исправили:

> Unsigned integer types wrap around on overflow

Почему?

> In a development build, overflow will be caught immediately when it happens at runtime.

Почему только in development, когда для ~95% кода это нужно всегда, а остальной даже в debug требует спецмер?

Escape sequences: вы по-прежнему сохраняете эти калечные \\?
Язык для системного программирования, и там нет \e? Серьёзно?
Строки только UTF-8? Серьёзно?

Определение типа развёрнуто (x: int вместо int x), но при этом тип-указатель это x*, а не *x? Серьёзно?

> The type of an array of holding 4 i32 values is written [i32; 4].

Ааа за что?

struct { .x: int, .y: int } - за что? Стоит ли «унификация» таких мучений?
И почему в struct так, а в class нужен var?

Всякие = +=:

> Unlike C++, these assignments are statements, not expressions, and don’t return a value.

Сложно было take добавить для такого случая?

Не ввели elif — продолжаем мучаться с каскадами вложенных else if?

Где break, continue не самого внутреннего цикла?

Явное требование пометки base class — чего пытаемся-то доказать?

Где package-visible доступ в классы? (всяко удобнее friend)
Почему умолчание видимости — public?

Параллельность package и namespace — зачем создавать конфликты?

Alias есть, а почему нет «type X = new Y»?

Дженерики — почему в объявлениях [], а в применении ()?

Type erasure — и с этим они собираются сохранить совместимость с C++?

Console.WriteLine() - серьёзно? Авторы этого понимают, что не везде винда и соответственно Console — неадекватное понятие?

Зачем в пакаджах отделение library?

Ну хоть восьмеричные константы убрали — хоть какой-то прогресс за последние 50 лет. Ура.

Технологическое: зачем в доке постоянно ссылки на pull requests с уже удалёнными ветками? Чтобы читатель помучился?

Что остроумно: загнать operator overloading в именные интерфейсы. Хотя надо ещё посмотреть на побочки.

Самое главное: где место для публичных обсуждений? Хотя бы штатная область в google groups, или форум. Они будут чего-то там себе варить, а всем остальным смотреть на полученный ужас?

В общем, проба интересная, плюсы есть, но сильно меньше, чем ожидалось.

I’m going to build my own CPP with blackjack and hook(er)s

Язык придумали для того, чтоб С++ -шники привыкали к синтаксису Rust

Це вам за те, що не молитеся

Мужику для промоушена в гуглі треба було показати щось нестандартне.
Чувак отримав промоушн, гугл отримав рекламу, доу ще одну тему і цей комент. Все можна розходитись.

Очередной убийца.... нет, не с++, а скорее rust’а

Написано же, «порадив тим, хто використовує Rust, продовжувати ним користуватися».
Судячи по прикладу — це проміжна сходина до раста а не його кілер.

Загалом накидувати на швидкість розвитку плюсів зараз це моветон.

стандарти виходять регулярно і навіть дуже оперативно. C++11, C++14, C++17, C++20, і C++23 в процесі.
Розробка, випуск нової мови програмування разом з обкаткою, та появою хоча би базого набору бібліотек займе мабуть навіть більше ніж поява нового стандарту с++

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

та посуті з більшости притензій, тільки швидкість розробки має хоч якесь підгрунтя.

все решта це наслідки з тих принципів і парадигм які були закладені у мову.

Rust, дуже навіть і летить. Просто він не для всіх.
Не варто очікувати шо в нього буде комюніті як в JS. Там мало, але вдало.

А Carbon для С++ може бути чимось подібним по духу як Objective-С для C.
І я б не сказав, що Objective-C був невдалою мовою.

Тоді чому «був»?

Розчаровані повільною еволюцією C++

тобто тим — що міжнародний комітет відмовив на їх пропозицію, зламати усю зворотню співмісніть з існуючим кодом щоб вони отримали 6% пририст в своїх задачах. Насправді, зправа усього лише такий собі клон Rust, який скоріше за усе хтось робив як сайд проект щоб показати на annual performance review. А щодо коду з прикладу С++, Скот Маєрс зараз десь материтсь має.

Маєрс давно відійшов від справ. Час жити.

Ок, почитав їх документацію. План у хлопців такий:
1. Зафігачити класні інструменти автоматичної трансляції С++ коду в Carbon
2. Зафігачити класні інструменти для уникнення неініціалізованих станів, гонок, меморі ліків, тощо
3. Реалізувати підмножину «safe», код в якій буде позбавлений всього зазначеного в пункті 2
4. Примусити весь світ писати на «safe Carbon»
5. Profit !

Наміри чудові. Поглянемо на реалізацію років за 5.

Дивлюсь на код праворуч — а що стало краще?

Може вони хотіли показати, що код ліворуч треба знати як писати. Наприклад замінити std::vector на std::array та уникнути динамічної алокації пам’яті, передавати аргументи функці по константній силці, або передати ітератори на початок та кінець щоб уникнути будь яких перетворень контейнеру. std::endl замість ’\n’ та додати ось таку штуку

  std::ios::sync_with_stdio(false); 
  std::cin.tie(nullptr);

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

Не знаю, я незнаю ще технічних методів програмувати низько кваліфікованими программістами. Мова програмування під відповідний рвіень абстракції і доменнеий рівень це зрозуміло, а вбивць С++ пишуть і рекламують з 1985 року. Де там поділись Object Pascal, Objective C та іньщі десятки мов ?

Не чув шоб ці мови позиціонувалися як кілери с++.
Це мови програмування для бізнес-проектів (а не системних чи ігрових).
До того ж в своїй ніші набагато успішніші ніж с++.

Object Pascal та Objective C — запросто замінять C++ тільки конкуренцію вони програли. Apple послідовно замінила обидві мови, зараз SWIFT. Натомість C, C++ та UNIX продовжують домінацію. Це доволі складні концепції які треба вчити як ними користуватись, але є і не найскладніші. Будь яка людина зможе засвоїти в прийнятні строки. Повно інформації і інструментів статичного аналізу — як робити можна, як не можна, як можна але не треба, та коли точно знаєш, що можна хочь і не реба — то можна, але краще всеодно не треба тощо.

Objective C чудова мова і міг би замінити C with classes, але там немає метапрограмування, з плюсами середини 90-х воно вже тягатись не могло.

В цьому прикладі, читабельніcть просто жахлива у цього карбону)
І всі ці package, slice натякають, що це якийсь викидень Go.

package, import, var. :)

ще залишилось зробити caseof замість switch

Ні. Турбо Паскалем. Або Модулою.
Але так — ідея модуля який експортує щось з явним описом дуже розумна і прискорює збирання проекту.

Плюсова компіляція повільна не через відсутністю модулів, а через метапрограмування, яке не закладали в мову від початку, а реалізували на шаблонах які взагалі не для того робилися. А прискорення завдяки «модулям» легко досягається використанням прекомпілених хідерів і, в залежності від компілятора і проекта, воно може бути помірним або незначним.

Ні. Це настільки стара історія що піднімати статті 20+ річної давності не маю бажання.

З одного боку, класно, давно пора, з іншого боку, який за рахунком це вже вбивця C++?

Не другий, тай це ше не мова.
Кілери все ще живі і розвиваються: Rust, Go (?), Zig, NIM ... мож ще шось появилося.
І все це дуже навіть непогані мови із досить великими комюніті.
Не варто думати, шо с++ — це навічно

Жодна з цих мов не є (і не задумувалася) як «вбивця С++». Вбивця плюсів мав би бути простішим за плюси — цьому критерію не відповідає Rust. Він не може бути на garbage collector — цьому критерію не відповідають Go та NIM. Щодо Zig — з нього може і було б діло, якби за ним стояла якась багатомільярдна корпорація, але вона не стоїть.

Rust простіший. Просто потрібно побороти ломку від нестандартних рішень

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

Ви явно людина яка начиталася багато статей але сама не пробувала

Це не моя думка, подивіться на Мозіллу. Плюс те саме каже і Chandler Carruth в презентації Карбону (www.youtube.com/watch?v=omrY53kbVoA). Не те, щоб це автоматично робило Карбон чимось хорошим, але вони принаймні вважають можливим досягти прямої крос-компіляції коду на плюсах в карбон і навпаки. Ви можете уявити такий інструмент для расту?

>

Код на плюсах не трасформується в код на расті автоматично.

1. Код з с++ не трансформується ні в шо крім асемблера по причині складності. Є сумніви? ... попробуйте написати компілятор в стандартний «С».
2. Навіть якшо б компілятор cpp->rust існував, це буде код який не використовує borrow-checker, макроси, no-null і багато інших фіч. Тобто це той-же небезпечний с++ код який може seg-фаултити на кожному кроці. Кому це потрібно ? Нікому — краще переписати руками. Писати штучний інтелект для цього — це занадто багато честі для с++.
3. Можна не трансформувати а використовувати: rust-lang.github.io/...​p.html#supported-features
4. Недавній огляд софта написаного/перпеписаного на Rust: deprogrammaticaipsum.com/...​he-state-of-rust-in-2022

Удачі, і бажаю освоювати мови програмування (крім с++) а не тільки ю-туб відео

Ви чомусь уже вдруге намагаєтесь перейти від обговорення мов на особистості, не розумію того. А щодо расту — я маю до нього велику повагу і впевнений, що в деяких місцях він витіснить і С і плюси. Хотілося б дожити до часів, коли якусь там прошивку медичного приладу чи автопілот буде дозволено писати лише на чомусь типу расту (чи ще більш безпечному). Просто це будуть далеко не всі місця, і навіть навряд чи 1% коду на С та плюсах колись буде заміщено растом, це гарно підтверджує наведене Вами посилання № 4 (що було переписано на расті з відомого? нічого. «bat» замість «cat», ага). Тому термін «вбивця плюсів» до нього важко застосувати. А так-то чудова мова, заперечень нема.

Вибачаюся, якшо перегнув, але цікаво шо ви побачили в статті «bat vs cat» (одна із десятків таких утиліт), але не побачили «Rust received knighthood status as the second official language of the Linux Kernel.» ... на відміну від с++

Можете погуглити і переконатися шо раст проліз майже у всі ніші які займав c/с++.
Суть не тільки в безпечності — це просто зручніше, швидше і приємніше.
Мова, звичайно, ще молода, але достатня для того шоб писати серйозні речі. Наприклад (не сприйміть як остаточний список):
— parceljs.org
— www.redox-os.org
— github.com/tauri-apps/tauri
— github.com/sigp/lighthouse
— github.com/meilisearch/MeiliSearch
— github.com/swc-project/swc

Ну правильно, надо же что-то делать, чтоб восстановить найм в Гугле.

Там проблеми з ціною на акції.

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