Carbon - "to C++ what Kotlin is to Java"

Permalänk
Datavetare

Carbon - "to C++ what Kotlin is to Java"

Snubblade över ett nytt programspråk från Google tidigare idag. Frågan som infann sig direkt var: ännu ett språk, vad är poängen här? Startade rejält skeptisk, men ju mer jag kikade på språket och framförallt vilket problem man försöker lösa ju mer gick det mot att "det kanske finns en relevant poäng ändå"!

C++ används fortfarande väldigt mycket, det är det klart vanligaste programspråket så fort prestanda är ett top-prioritet.

Ett stort problem med C++ är att språket ("by design" då vissa definerande egenskaper hos C++ inte vore praktiskt möjligt annars) saknar en väldefinierad ABI. Därför väldigt svårt att på en helt generellt sätt interagera med C++ från andra miljöer, framförallt om templets och liknande är del av gränssnittet.

Varför?

En av grundpelarna i Carbon är detta

"Seamless, bidirectional interoperability with C++, such that a library anywhere in an existing C++ stack can adopt Carbon without porting the rest."

Det är väldigt mycket hur Kotlin förhåller sig till Java. Även om Rust (som Carbon tagit väldigt mycket inspiration från sett till syntax) är "C++ done right" är problemet med Rust att man kan (och bör) använda det språket över C++ om man startar från scratch. Men värdet i C++ är att så mycket är redan skrivet i C++ och finns inget bra sätt att egentligen anropa till C++ kod från andra språk (förutom Carbon då).

Så Rust är skitbra om man börjar på något nytt och i den bästa av världar skulle t.ex. spelmotorer skrivas om i Rust för att få fördelarna med samma prestanda som C++, men långt bättre säkerhet och fantastiskt stöd för att skriva korrekt kod som använder flera trådar. Men "ingen" kommer skriva om gigantiska kodbaser som spelmotorer, MS Office och de massiva mängder C++ kod som finns inom Google, Microsoft och liknande företag.

Även om man försöker göra C++ till ett bättre språk med tiden, kommer en uppdateringen till standarden vart 3:e år senaste är C++20 och nästa blir C++23 (rätt uppenbart att man i många lägen sneglar på saker Rust fått till "helt rätt"), så har man hela tiden problemet att nya finesser måste implementeras med begränsningen att "all existerande C++ kod måste fortsätta fungera". Det begränsar en hel del vad som är möjligt + ett redan stort och komplext språk blir än större och komplexare ju mer saker som läggs till vilket bl.a. ger problemet att olika personer tenderar använda olika delar som i sin tur ställer till det i större kodbaser (ett annat populärt språk som också har uppenbar växtvärk på liknande sätt är C#).

En stor fördel med Kotlin är att man kan enkelt börja använda det för en delmängd av ett större Java-projekt då det är kompatibelt i båda riktningarna. Rust och C++ kan i praktiken bara interagera med varandra genom att gå via C (båda har explicit kompatibilitet med C, i stort sätt alla programspråk har någon form av kompatibilitet med C).

Carbon gör för C++ vad Kotlin gör för Java, man kan designa ett modernt språk som kan starta med ett blankt papper.

Det skrivet: det kommer nya programspråk hela tiden, de flesta kommer aldrig få någon större spridning. Carbon har en ganska smal nisch mellan "gå till senaste C++ versionen och gör det bästa av situationen" och "vi startar relativt fräscht så Rust är fullt rimligt", och det i nischen: prestanda är superkritiskt så endast C, C++ eller Rust fungerar.

C++ fortsätter att vara populärt, inte för att det längre kan anses vara ett jättebra språk, utan för att det finns en hyfsat stor klass av problem där C++ i praktiken är det enda praktiskt användbara alternativet.

Fråga

Någon som tror Carbon har någon chans?

Skulle vara kul om det tog fart för t.ex. spelutveckling, men finns problem i Unreal Engine 4/5 då de utökat C++ på lite egna sätt med sin meta-kompilator...
Personligen tror jag detta är DoA, men hoppas ha fel på den punkten då C++ börjar bli löjligt komplext men är ändå nödvändigt om man jobbar med prestandakritisk programvara!

Referenser

För de som vill läsa mer

https://thenewstack.io/google-launches-carbon-an-experimental...
https://9to5google.com/2022/07/19/carbon-programming-language...

Video av designen av språket Odin som går igenom specifikationen av Carbon. Är en bra genomgång i videoformat (av någon som uppenbarligen gillar sitt eget språk mer, vilket är naturligt), men hade mycket hellre sett motsvarande med jämförelse mot Rust istället för Odin (har aldrig använt Odin, har använt Rust både privat och professionellt)

Klicka för mer information
Visa mer

Och är finns beskrivning av syntax av de grundläggande byggstenarna
https://github.com/carbon-language/carbon-lang/tree/trunk/doc...

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem

Inte ointressant.

Jag blir lite kär när man tvingar folk att använda måsvingar även för enskilda kodrader. Och jag gillar att x=y är ett statement, inte ett expression.

Jag blir lite tveksam när man skriver att det inte finns någon pekararitmetik. Antag att jag har en tag-length-value-fil som någon skapat för tjugo år sedan genom att dumpa C-structar på disk med känd endianness. Hur tolkar jag den i Carbon effektivt? Kan jag casta en minnesadress till en struct/klass baserat på taggen?

Metaprogrammeringsavsnittet är en platshållare så hur man implementerar deserialisering på ett någorlunda generellt sätt i ovanstående exempel (som alternativ till att casta en minnesposition till en struct) är också lite av en gåta. De tycks hinta om att C#-lik reflection ska bli möjlig, men ger inga detaljer.

På det hela taget är jag tveksam till att språket ger tillräckligt med mervärde för att speciellt många ska orka klabba med en utökad toolchain.

Permalänk
Medlem
Skrivet av Yoshman:

Snubblade över ett nytt programspråk från Google tidigare idag. Frågan som infann sig direkt var: ännu ett språk, vad är poängen här? Startade rejält skeptisk, men ju mer jag kikade på språket och framförallt vilket problem man försöker lösa ju mer gick det mot att "det kanske finns en relevant poäng ändå"!

C++ används fortfarande väldigt mycket, det är det klart vanligaste programspråket så fort prestanda är ett top-prioritet.

Ett stort problem med C++ är att språket ("by design" då vissa definerande egenskaper hos C++ inte vore praktiskt möjligt annars) saknar en väldefinierad ABI. Därför väldigt svårt att på en helt generellt sätt interagera med C++ från andra miljöer, framförallt om templets och liknande är del av gränssnittet.

Varför?

En av grundpelarna i Carbon är detta

"Seamless, bidirectional interoperability with C++, such that a library anywhere in an existing C++ stack can adopt Carbon without porting the rest."

Det är väldigt mycket hur Kotlin förhåller sig till Java. Även om Rust (som Carbon tagit väldigt mycket inspiration från sett till syntax) är "C++ done right" är problemet med Rust att man kan (och bör) använda det språket över C++ om man startar från scratch. Men värdet i C++ är att så mycket är redan skrivet i C++ och finns inget bra sätt att egentligen anropa till C++ kod från andra språk (förutom Carbon då).

Så Rust är skitbra om man börjar på något nytt och i den bästa av världar skulle t.ex. spelmotorer skrivas om i Rust för att få fördelarna med samma prestanda som C++, men långt bättre säkerhet och fantastiskt stöd för att skriva korrekt kod som använder flera trådar. Men "ingen" kommer skriva om gigantiska kodbaser som spelmotorer, MS Office och de massiva mängder C++ kod som finns inom Google, Microsoft och liknande företag.

Även om man försöker göra C++ till ett bättre språk med tiden, kommer en uppdateringen till standarden vart 3:e år senaste är C++20 och nästa blir C++23 (rätt uppenbart att man i många lägen sneglar på saker Rust fått till "helt rätt"), så har man hela tiden problemet att nya finesser måste implementeras med begränsningen att "all existerande C++ kod måste fortsätta fungera". Det begränsar en hel del vad som är möjligt + ett redan stort och komplext språk blir än större och komplexare ju mer saker som läggs till vilket bl.a. ger problemet att olika personer tenderar använda olika delar som i sin tur ställer till det i större kodbaser (ett annat populärt språk som också har uppenbar växtvärk på liknande sätt är C#).

En stor fördel med Kotlin är att man kan enkelt börja använda det för en delmängd av ett större Java-projekt då det är kompatibelt i båda riktningarna. Rust och C++ kan i praktiken bara interagera med varandra genom att gå via C (båda har explicit kompatibilitet med C, i stort sätt alla programspråk har någon form av kompatibilitet med C).

Carbon gör för C++ vad Kotlin gör för Java, man kan designa ett modernt språk som kan starta med ett blankt papper.

Det skrivet: det kommer nya programspråk hela tiden, de flesta kommer aldrig få någon större spridning. Carbon har en ganska smal nisch mellan "gå till senaste C++ versionen och gör det bästa av situationen" och "vi startar relativt fräscht så Rust är fullt rimligt", och det i nischen: prestanda är superkritiskt så endast C, C++ eller Rust fungerar.

C++ fortsätter att vara populärt, inte för att det längre kan anses vara ett jättebra språk, utan för att det finns en hyfsat stor klass av problem där C++ i praktiken är det enda praktiskt användbara alternativet.

Fråga

Någon som tror Carbon har någon chans?

Skulle vara kul om det tog fart för t.ex. spelutveckling, men finns problem i Unreal Engine 4/5 då de utökat C++ på lite egna sätt med sin meta-kompilator...
Personligen tror jag detta är DoA, men hoppas ha fel på den punkten då C++ börjar bli löjligt komplext men är ändå nödvändigt om man jobbar med prestandakritisk programvara!

Referenser

För de som vill läsa mer

https://thenewstack.io/google-launches-carbon-an-experimental...
https://9to5google.com/2022/07/19/carbon-programming-language...

Video av designen av språket Odin som går igenom specifikationen av Carbon. Är en bra genomgång i videoformat (av någon som uppenbarligen gillar sitt eget språk mer, vilket är naturligt), men hade mycket hellre sett motsvarande med jämförelse mot Rust istället för Odin (har aldrig använt Odin, har använt Rust både privat och professionellt)

Klicka för mer information
Visa mer

Och är finns beskrivning av syntax av de grundläggande byggstenarna
https://github.com/carbon-language/carbon-lang/tree/trunk/doc...

Hej Yoshman

Jag har också sett den här nyheten i ett par dagar nu. Och jag kan inte osökt fundera på om det löser de "problem" jag ser hos C++ i nuläget. Idag bestämde jag mig faktiskt för att jag ska kolla närmare på detta och pröva. Så man får se efter lite utvärdering

Visa signatur

Ryzen 9 5950X, 32GB 3600MHz CL16, SN850 500GB SN750 2TB, B550 ROG, 3090 24 GB
Har haft dessa GPUer: Tseng ET6000, Matrox M3D, 3DFX Voodoo 1-3, nVidia Riva 128, TNT, TNT2, Geforce 256 SDR+DDR, Geforce 2mx, 3, GT 8600m, GTX460 SLI, GTX580, GTX670 SLI, 1080 ti, 2080 ti, 3090 AMD Radeon 9200, 4850 CF, 6950@70, 6870 CF, 7850 CF, R9 390, R9 Nano, Vega 64, RX 6800 XT
Lista beg. priser GPUer ESD for dummies

Permalänk
Medlem

Nu för tiden (när det kommer till C++) fiser jag mest runt i Unreal. Stödet där skulle vara avgörande. Annars tycker jag C# funkar jättebra.

Permalänk
Medlem

Fireship tycker till

Visa signatur

Louqe Ghost S1 MK3 | Asus ROG Strix B660-I Gaming WiFi | Intel Core i7 12700K | nVidia RTX 2070 Super FE | Corsair 64GB (2x32GB) DDR5 5600MHz CL40 Vengeance | Samsung 980 PRO M.2 NVMe SSD 2TB | Corsair SF750 750W 80+ Platinum | Noctua NH-L12 Ghost S1 edition | Kablar från pslate customs | 2 stk Dell Ultrasharp 3014 | Logitech MX Keys | Logitech MX Anywhere

Permalänk
Datavetare

Får se hur det går med detta språk, ska testa lite själv.

Det som gör att jag är skeptisk är att det alltid finns friktion mot att använda något nytt, förändringen måste ge tillräckligt stor fördel för att man ska orka bry sig.

Kikar man på exemplen på andra lyckade fall nämns bl.a.

ObjC -> Swift. Grejen här är att Swift är ett sådant brutalt lyft att det finns liksom ingen anledning överhuvudtaget att hålla emot. Ovanpå det hade Swift Apples fulla stöd från dag 1. Går riktigt inte att jämföra mot detta.

Java -> Kotlin. Kotlin var en garanterad succé samma sekund det blev officiellt språk för Android. Det är inte samma lyft som ObjC->Swift, men personligen tycker jag ändå att Kotlin gör att JMV-världen kliver förbi .NET värden i att ha "trevligt" språk, men är ingen gigantiskt skillnad.

Rust har som flera pekat ut problemet att om man redan har massor med C++-kod finns ingen jättebra migrationsväg. I praktiken måste kan endera paketera C++ koden till bibliotek med C gränssnitt alternativt skriva om allt i Rust, båda av dessa är sällan realistiska alternativ. Rust är dock en långt bättre språk än C++, skulle säga att Rust är med råge det bäst designade språk som finns idag för att utveckla säker högprestande kod.

Skulle hellre skriva i Carbon än C++, men "modern" C++ är ändå helt OK. Det ihop med att det alltid är en viss friktion att jobba i mer än ett språk (en av de stora styrkorna med NodeJS är man kan köra samma språk i både frontend och backend) gör att Carbon nog har en rätt stor uppförsbacke framför sig... Inte precis så att "tooling" stödet är dåligt för C++, det är tvärtom i världsklass, så Carbon måste nå liknande nivå för att bli relevant.

Såg vissa ställa C++ mot Go. Gillar Go starkt, men tycker det inte är en "successor" till C++ utan det är ett språk / en miljö med sina egna unika styrkor. Go rent fantastiskt om man jobbar med I/O-tunga fall, i de lägena är det bättre / mer effektivt än något annat (inklusive C och C++). Men Go matchar inte C, C++ och Rust i beräkningstunga och andra CPU-bundna
fall.

Språkmässigt är Go lite antitesen mot C++, C# och Rust: en stor fördel med Go är att det är ett superenkelt språk vilket gör det betydligt enklare att hålla en enhetlig kodbas när man har många olika personer involverade. Slutligen är Go så "lätt" att kompilera att det känns mer som ett skriptspråk likt Python än kompilerat språk som C++ när man kör koda-kompilera-testa cykeln.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Datavetare

Designerna av Carbon säger specifikt: "If Rust works for you today, you should use it."

Snubblade över denna idag. Ger inte Carbons bidirektionella kompatibilitet med C++, utan det handlar bara om att kunna anropa / använda C++ från Rust.

https://github.com/google/autocxx

Gissningsvis lär Carbons C++ kompatibilitet vara närmare 100 %-igt än detta då det är ett av huvudmålen med språket, men verkar att för just Googles del (som ligger bakom både Carbon och AutoCXX) verkar det primärt handla om att fortsätta använda exististerade C++-kodbaser.

Ska bli spännande att kolla in status för Carbon om ett år från nu. Lever det fortfarande kanske det ändå har någon relevans!

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer