LINUX.ORG.RU
ФорумTalks

Carbon — преемник C++ от Google

 , carbon


1

4

На конференции Cpp North был представлен экспериментальный язык программирования Carbon – преемник С++ (по заявлению разработчиков). Видео презентации: https://www.youtube.com/watch?v=omrY53kbVoA

Разработчики обещают производительность, соответствующую C++, взаимодействие с существующим кодом C++, от наследования до шаблонов, быстрые и масштабируемые сборки, совместимые с существующими системами сборки C++, двунаправленную интероперабельность с C++ и многое другое.

Пример кода на Carbon:

// Carbon:
package Geometry api;
import Math;

class Circle {
  var r: f32;
}

fn PrintTotalArea(circles: Slice(Circle)) {
  var area: f32 = 0;
  for (c: Circle in circles) {
    area += Math.Pi * c.r * c.r;
  }
  Print("Total area: {0}", area);
}

fn Main() -> i32 {
  // A dynamically sized array, like `std::vector`.
  var circles: Array(Circle) = ({.r = 1.0}, {.r = 2.0});
  // Implicitly constructs `Slice` from `Array`.
  PrintTotalArea(circles);
  return 0;
}

тот же код на С++:

// C++:
#include <math.h>
#include <iostream>
#include <span>
#include <vector>

struct Circle {
  float r;
};

void PrintTotalArea(std::span<Circle> circles) {
  float area = 0;
  for (const Circle& c : circles) {
    area += M_PI * c.r * c.r;
  }
  std::cout << "Total area: " << area << "\n";
}

auto main(int argc, char** argv) -> int {
  std::vector<Circle> circles = {{1.0}, {2.0}};
  // Implicitly constructors `span` from `vector`.
  PrintTotalArea(circles);
  return 0;
}

Доп. информация: https://9to5google.com/2022/07/19/carbon-programming-language-google-cpp/

★★★★★

Последнее исправление: dotcoder (всего исправлений: 2)
Ответ на: комментарий от agentgoblin
  1. Проще парсинг.
  2. Необязательное написание типа там где возможен автоматический вывод типов.
  3. Привычка новых разработчиков. Новые языки с автоматическим выводом типов и записью типа справа: Scala, Kotlin, Rust, Swift, Go, тайп хинты в таких языках как TypeScript и Python
Aber ★★★★★
()

интероперабельность

Кто разбирался, что они под этим подразумевают? Оно умеет плюсовые хедеры с шаблонами к себе подгружать? Как это работает, через кишки clang?

Если так, то может быть годно.

snizovtsev ★★★★★
()
Последнее исправление: snizovtsev (всего исправлений: 1)
Ответ на: комментарий от Aber

Добавлю: из-за одинакового выравнивания имён нагляднее выглядит множество переменных, у которых тип указывается явно:

let name: string;
let callback: function() => void;
let x: int;

vs.

string name;
void function() callback;
int x;

runtime ★★★★
()

В очередь, сукины дети, в очередь! (с)

olelookoe ★★★
()
Ответ на: комментарий от xwicked

Есть же «D», зачем ещё один? Он тоже вроде обратносовместим с С++.

Если не ошибаюсь, то с точки зрения замены C++ проблемы у D были две:

  • Работать в нем без GC хоть и можно, но довольно проблематично, т.к. слишком много всего в стандартной библиотеке на него подвязано
  • Совместимость с C++ там была целенаправленно ограничена, чтобы не замусоривать язык костылями для C++

А в целом D выглядит довольно неплохо - очень практичен, минимум смузи, максимум полезных в реальных условиях конструкций. Шероховатости есть, но мало. Почти не замусорен всяким legacy. Много всего полезного для compile time вычислений и кодогенерации, на случай, если нужно максимум производительности. На мой скромный взгляд, язык сильно недооценен.

runtime ★★★★
()
Ответ на: комментарий от Aber

Если сообщество плюнет в гугл то гугл утрется.

Но если гугл плюнет в сообщество то оно утонет.

Гугл и так уже не спонсирует разработку libc++ в LLVM, довольно продолжительное время.

Разработка libc++ ведётся сообществом и Apple.

Они могут перестать вообще вливать средства в clang/LLVM, но есть и другие заинтересованные лица.

fsb4000 ★★★★★
()
Последнее исправление: fsb4000 (всего исправлений: 1)

сильно подозреваю, что карбон - это на самом деле не реальный проект для продакшна, а просто попытка публично (и сильно) пнуть комитет плюсовиков.

И попытка пока кажется вполне удачная: на всех профильных ресурсах, которые я вижу, только и обсуждают что хреновую STL, никому не нужную стабильность ABI, и то как комитетчики не хотят это все фиксить

Lrrr ★★★★★
()

Ну чиво хипсторы апять садитесь за учебники бугага. Вангую что к версии одын тучка нуль. Этот пример в шапке не будет работать и выглядеть будет вообще по другому.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от m0rph

Эти люди говорят о сравнимой производительности с C++ и при этом считают дженерики преимуществом перед шаблонами

Неужели в этом карбоне дженерики не мономорфизуются? А если да, то откуда разница в плане производительности?

DarkEld3r ★★★★★
()
Ответ на: комментарий от Lrrr

Где ты видишь удачную попытку? Наоборот, есть недоумение, что у гугла бомбануло насчёт неэффективности стандартной библиотеки из-за стабильности ABI, когда они вместо стандартной библиотеки используют свою abseil. Ну, и продолжали бы дальше пилить abseil. Всем побарабану.

rupert ★★★★★
()
Ответ на: комментарий от runtime

На мой скромный взгляд, язык сильно недооценен.

Язык сильно переоценен. После С++14 он уже не был конкурентом крестам, а после С++20 в нем вообще нет смысла.

Siborgium ★★★★★
()
Ответ на: комментарий от unsigned

Дженерики вместо шаблонов?

-1. Там что-то говорилось про такую же скорость как у плюсов? Вон в жаве дженерики, и чо: автоматические переменные? не, не слышали. Ладно бы написали бы не «вместо» а «вместе»…

Одиночное наследование?

-1. Как и всякая экзотика, множественное наследование нужно редко, но когда оно нужно а его нет… Хотя помнится, в scala довольно много всего на миксинах было запилено – и в стандартной либе, и в третьесторонних.

Неявные интерфейсы?

  1. Хз что такое.

Сомнительно для замены плюсов.

+1. Одного типа справа, упрощающего парсинг и соответственно весь тулинг, маловато будет. Тем более что парсинг для тулинга давно уже шлангом сделан – прикручивай и юзай.

dimgel ★★★★★
()
Ответ на: комментарий от Siborgium

Да и сам Волтер не сильно сёк в С++, хотя и написал для него компилятор. Идиомы С++ прошли мимо него, и поэтому D не дотягивает до С++. Как-то я видел презентацию Волтера, где он даже vector<int> написал с явной ошибкой, которую просто невозможно не заметить, если ты вообще когда-либо на C++ писал.

Не знаю, что привлекло Александреску в D. Наверное, метапрограммирование через строчки. Александреску работал в Facebook, где сильно толкал D. Но D не взлетел, и он ушёл.

rupert ★★★★★
()
Последнее исправление: rupert (всего исправлений: 1)
Ответ на: комментарий от dimgel

автоматические переменные

Про какие автоматические переменные идёт речь? auto? В Java есть var с примерно аналогичной функциональностью.

EXL ★★★★★
()
Ответ на: комментарий от agentgoblin

Это калька с раста.

Rust далеко не пионер в backward declaration.

Python, Scala, Go, Swift, Kotlin, Nim, V, Zig, Hare и т. д. используют именно такой способ записи типов.

EXL ★★★★★
()
Ответ на: комментарий от Aber

Старина Вирт это понял еще страшно подумать сколько лет назад, но сишники его в итоге заклевали. Теперь сами потихоньку умнеют. Скоро и до нормальных словесных конструкций языка дойдут вместо write-only клинописи.

quwy
()
Ответ на: комментарий от EXL

Про какие автоматические переменные идёт речь?

Про те которые на стеке. В отличие от templates, generics это runtime-полиморфизм. И размер полиморфного объекта для размещения его на стеке неизвестен, поэтому в жаве всё кроме указателей и примитивов – в куче. И это – одна из двух главных причин, почему жава по сравнению с плюсами по скорости сосёт со свистом с реактивным рёвом. И новое поделие тоже будет сосать.

dimgel ★★★★★
()
Ответ на: комментарий от dimgel

Но тут дело не в дженериках, жаба вообще не делает аллокацию new Integer(5) в стеке хотя класс финальный (не расширяемый) и размеры его известны, потому там и не нужны темплейты с их киллер фичей.
Так что тут больше вопрос а помешают ли generics компилятору в момент компиляции разместить переменную в стеке? Я считаю нет.

Aber ★★★★★
()
Ответ на: комментарий от dimgel

почему жава по сравнению с плюсами по скорости сосёт со свистом

А этого нет.

Даже если глянуть на computer language benchmark game то там, казалось бы, будет подтверждение твоих слов, только все версии CPP кода где жаба резко сливает внезапно во всю используют SIMD (вплоть до AVX512). А версиям CPP кода где нет использования SIMD жаба не уступает.
Но встроенный regex движок у жабы тормозной.

Aber ★★★★★
()
Последнее исправление: Aber (всего исправлений: 2)
Ответ на: комментарий от Lrrr

никому не нужную стабильность ABI

Мне нужную. Не раз меня спасала. А несогласные могут пользоваться карбонами, питонами, да хоть чертом в ступе.

aiqu6Ait ★★★★
()
Ответ на: комментарий от fluorite

Логично писать на самом себе

Программистов много, а Николас Вирт такой один. Вы еще предложите вручную транслировать исходники первого компилятора в машинный код.

aiqu6Ait ★★★★
()

То есть ржавчины вам было мало? Теперь ещё и это?

posixbit ★★
()
Ответ на: комментарий от eternal_sorrow

Конечно тоже аргумент. Однако «какое НЕХ» имхо удобнее синтаксиса «НЕХ какое». Во втором случае вы сначала видите НЕХ.
Но тут на вкус и цвет фломастеры разноцветные.

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 1)
Ответ на: комментарий от fluorite

Убийца c++. В лучших традициях, написан на c++.

если уж в этих категориях рассуждать, то убийца ассемблера был написан на ассемблере.

ergo ★★★
()
Ответ на: комментарий от quwy

Убийца c++. В лучших традициях, написан на c++.

C++ – убит?!? OMG, holly shit…

pr849
()

А кто-нибудь разбирался уже с ним? Интересно, как они обеспечивают связь с С++ кодом, при этом «заменяя» Тьюринг-полные шаблоны дженериками, отказываясь от множественного наследования и т.п. И вообще, как технически они подцепляют интерфейс С++ библиотеки? Парсят заголовочные файлы? Header-only шаблонную лапшу? И стандартные плюсовые контейнеры они тоже целиком поддерживают?

filosofia
()
Ответ на: комментарий от dimgel

Неистово лорчую. :)))

А мне вообще пофиг. Я на двух я зыках писал. Главное, чтобы когда пишешь ты знал какой язык и чтобы не запутаться, а так пофиг. После долгого кодинга на C++, я легко написал маленькую прожку на Lazarus. Не путался.

xwicked ★★☆
()

Они лезут на свет! /thread

thunar ★★★★★
()

Это не язык а какой то лютый мутант полученный в подземных лабораториях путём ужасных экспериментов по скрещиванию ужа с ежом. К сожалению, согласно фундаментального закона о полированном говне, эта штука имеет шансы взлететь.

rekket
()
Ответ на: комментарий от rekket

Ну а что ещё может получиться у крестовиков? Надо бы строго с этим: знаешь C++, сразу недопуск к разработке новых ЯП. Идеальный кандидат это чучоный из криокамеры, никогда не видевший сишку даже.

bread
()
Последнее исправление: bread (всего исправлений: 1)
Ответ на: комментарий от Aber

Если внимательно почитать условия задач, станет ясно, что это все не имеет смысла – большая часть из них меряют скорость сисколлов и/или IO. После некоторого порога оптимизации программы вопрос лишь в том, у кого на сисколл окажется меньше накладных расходов.

Про подтасовку бенчмарков под нравящийся автору сайта результат я как-то уже писал.

Siborgium ★★★★★
()
Ответ на: комментарий от ergo

Так и C уже давно узкоспецифичный язык. C++ тоже стремительно падает в ту же категорию. Так можно докатиться до того, что только джаваскрипты с питонами живы.

quwy
()
Ответ на: комментарий от anc

В чем особенность auto? В смысле чем оно «более другое»?

Я к тому, что видеть сначала тип, а потом имя становится менее важным, если тип всё равно выводится.

DarkEld3r ★★★★★
()
Ответ на: комментарий от dimgel

В отличие от templates, generics это runtime-полиморфизм

А ты уверен, что в каргоне дженерики рантаймовые? Вон в расте это тоже дженериками обозвали, но работают они как плюсовые шаблоны (в этом аспекте).

DarkEld3r ★★★★★
()

Я знаю, это новая задача на литкоде появилась «напиши свой ЯП» вот гуглошлепы и шлепают кто во что горазд. Только, как всегда у гуглошлепов, получился не ЯП, а обертка над плюсами. Программировать-то они не умеют :-)

untitl3d
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.