C++ och dess framtid att programmera minnessäkert - Hur går utvecklingen?

Permalänk
Medlem
Skrivet av klk:

Ja det är udda för att svårighetsgraden ökar markant men klarar du det så är servern så mycket enklare att jobba med. Och för att fixa detta är det nästan ett måste att bygga den med C++/Rust/Zig eller annat likvärdigt språk.

Om en webserver kan ha koll på sina användare så kan den köras helt fristående, behövs inte annat så fort säkerhet och liknande tillkommer. servern kan sköta det själv och det vinner man mycket på. Det går också att göra mycket smartare api

Varför inte skriva ett API isf istället för en webbserver?

Permalänk
Medlem
Skrivet av Yoshman:

Men nä, ser faktiskt noll poäng med den wrapper ni gör givet vad C++17 har för stöd i std::filesystem. Verkar mest vara ett fall för "not invented here syndrome", vilket i.o.f.s. inte är helt ovanligt.

Och det här tror jag skiljer mellan utvecklare, vilket synsätt man har men det går oftast att efter ett ta se vad som fungerar bäst.
Förutom det så vad många glömmer är hur viktigt det är för utvecklare att träna och förbättra sig. Kan de träna med produktionskod är det bra. Det finns otaliga projekt som kraschat för att utvecklare som varit med under utvecklingsfasen slutat och nya som tagit över och förvaltar, att dessa förvaltare inte får träna. Förr eller senare kan det komma till en punkt när de behöver modernisera och då är utvecklarna som kan bygga applikationer borta medan förvaltarna är kvar.

Bäst enligt mig är att hela projekt är anpassade för att utvecklare hela tiden kan underhålla och utveckla sig, mycket roligare då också. Utvecklare som hela tiden bromsar eller förklarar hur allt kan lösas med annat förstör kreativitet.

Du nämnde själv att du haft möjlighet att skriva två nya applikationer om jag minns rätt, du vet hur mycket roligare det är. Kan man designa projekt så att denna nyutveckling finns med hela tiden blir det trevligare att jobba.

Skrivet av Yoshman:

Så du menar att typiska junior-misstag som att återuppfinna hjulet där det inte behövs uppfinnas skulle vara vanligare hos C++-programmerare?

Typiskt för nya är att inte förstå konsekvenser och sätta saker i ett större sammanhang, förstå hur saker växer och hur mycket svårare det blir om man inte har en bra struktur.
Det tar tid att lära sig, vi har väl alla varit där. Jag trodde också jag kunde det mesta efter mitt första program.

Skrivet av Yoshman:

Vilket låter helt trivialt att uppnå med standardbiblioteket! Varför inte använda det då det lär hålla minst lika hög kvalité och det är garanterat mer portabelt än erat egenrullade.

Vi hade koden skriven i standardbiblioteken och det var jobbigare. Skall du "backa" i ett filträd eller leta efter saker, snabbt bygga olika mappvägar är det en del bök. Och klassen är liten, tar inte lång tid att skriva, speciellt inte med AI. När man skriver kod som liknar andra kod så är det hemmaplan för AI.
Mest nytta tror jag vi haft av att den automatiskt håller koll på om sista tecknet är en slash eller inte. Mycket vanlig problem.

Skrivet av Yoshman:

Fast nu är just Rust, precis som C och C++, specifikt ett systemspråk som är flexibelt nog att skriva hela OS i och därmed bevisligen har alla tänkbara och de flesta otänkbara (då man kan skriva OS kan man även hantera hela MMU-delen via Rust, vilket är ungefär så "low-level" man lär kunna bli m.a.p. minneshantering).

Absolut men jag är säker på att koden kommer se helt annorlunda om man jämför rust och C. Och jag tror det kommer dröja innan det dyker upp större projekt med krav i Rust. Fick några länkar av "någon" för ett tag sedan men tolkade inte de projekten som speciellt stora.

Skrivet av Yoshman:

OK, vad gör jag fel i hur boost::asio används i min "hello-world" HTTP-server?

Inget fel, hade själv valt det om det är bråttom. Nackdelen är att man behöver boost som inte är så litet och boost kod är inte rolig att debugga.
Det är resten som skall dit för att hantera requests, det är då jobbet börjar.

Permalänk
Medlem
Skrivet av orp:

Varför inte skriva ett API isf istället för en webbserver?

Om du har koll på användare så kan du packa flera API i ett enda request för att ta ett exempel. Mindre data behöver skickas mellan klient och server, knappt någon. Servern blir så mycket snabbare också. Finns massor av fördelar och det gör också att klienten kan göras enklare, mycket enklare.

Permalänk
Datavetare

C++ creator calls for help to defend programming language from 'serious attacks'

https://www.theregister.com/2025/03/02/c_creator_calls_for_ac...

Interessant läsning. Bjarne är väldigt bekymrad kring C++ framtid

"I feel strongly about this. Please don’t be fooled by my relatively calm language."

Bl.a. då Microsoft CTO sagt saker som

"halt starting any new projects in C/C++ and use Rust for those scenarios where a non-[garbage collected] language is required."

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
Skrivet av Yoshman:

Bl.a. då Microsoft CTO sagt saker som

"halt starting any new projects in C/C++ and use Rust for those scenarios where a non-[garbage collected] language is required."

Microsoft har stora problem och få tag i duktiga programmerare, tidigare har USA (och Microsoft) kunnat dammsuga världen. Senaste ~20 åren har deras dragningskraft avtagit och tror knappt det är status idag att jobba där, de måste locka med högre löner. Förr hade Microsoft ganska låga löner jämfört med andra amerikanska bolag.

Om inte annat gissar jag att Microsoft tittar på att föra över C# kod till Rust för det tror jag är en stor vinst.

Problemet för Microsoft och många andra IT jättar är Asien. De tjänar mycket bra där och har mycket hård konkurrens så de får fram bättre utvecklare.

Permalänk
Medlem
Skrivet av klk:

Microsoft har stora problem och få tag i duktiga programmerare, tidigare har USA (och Microsoft) kunnat dammsuga världen. Senaste ~20 åren har deras dragningskraft avtagit och tror knappt det är status idag att jobba där, de måste locka med högre löner.

Vad har du för belägg för att Microsoft har rekryteringsproblem och specifikt svårt med att hitta bra utvecklare? Bara under de senaste åren har bl a James Bottomley och Lennart Poettering gått till Microsoft.

Permalänk
Medlem
Skrivet av orp:

Vad har du för belägg för att Microsoft har rekryteringsproblem och specifikt svårt med att hitta bra utvecklare? Bara under de senaste åren har bl a James Bottomley och Lennart Poettering gått till Microsoft.

Vet du något bolag som inte har rekryteringsproblem? Det är fantastiskt svårt att hitta duktiga utvecklare. Och titta på vad de presterat

Permalänk
Medlem
Skrivet av Yoshman:

https://www.theregister.com/2025/03/02/c_creator_calls_for_ac...

Interessant läsning. Bjarne är väldigt bekymrad kring C++ framtid

"I feel strongly about this. Please don’t be fooled by my relatively calm language."

Bl.a. då Microsoft CTO sagt saker som

"halt starting any new projects in C/C++ and use Rust for those scenarios where a non-[garbage collected] language is required."

Läst längst ner (detta gick till och med snabbare än vad jag kunnat tro), att de kommer skrota dumheten
Myndigheter är fantastiskt duktiga på att "hitta på" jobb åt sig själva. Har jag tolkat trump och hans gäng korrekt vet de om detta

Citat:

That is, if memory safety remains a government concern. As Chisnall observed, "The new US administration has removed everything from the White House web site and fired most of the CISA people who worked on memory safety…"

Permalänk
Medlem
Skrivet av klk:

Vet du något bolag som inte har rekryteringsproblem? Det är fantastiskt svårt att hitta duktiga utvecklare. Och titta på vad de presterat

Jag har inte upplevt något problem men jag sitter ju inte heller i sitsen att rekrytera och jag bor i en universitettät region(Köpenhamn, Malmö och Lund).

Sedan tänker jag att det är väl inte svårt att hitta duktiga utvecklare om man kan betala för sig?

Permalänk
Datavetare
Skrivet av klk:

Läst längst ner (detta gick till och med snabbare än vad jag kunnat tro), att de kommer skrota dumheten
Myndigheter är fantastiskt duktiga på att "hitta på" jobb åt sig själva. Har jag tolkat trump och hans gäng korrekt vet de om detta

Vilken tur! Då kan ju mail:a Bjarne och säg att han inte har något att oroa sig för

Att ett gäng personer sagts upp på CISA är inte specifikt riktat mot detta, man verkar bara ha sagt upp X % och rätt mycket gjort rent hus med de som varit där relativt kort. Något som fått kraftig kritik redan då CISA gjort flera viktiga anställningar av svårfunnen kompetens, personer som dels själva blev förvånad att de åkte och dels företag som samarbetar med CISA har uttryckt "WTF!!!".

Ingen av CISA dokument, var delvis de som startade hela detta för ett antal år sedan, är borttagna. Denna är kvar och nyligen uppdaterad
https://www.cisa.gov/resources-tools/resources/product-securi...

"The development of new product lines for use in service of critical infrastructure or NCFs in a memory-unsafe language (e.g., C or C++) where readily available alternative memory-safe languages could be used is dangerous and significantly elevates risk to national security, national economic security, and national public health and safety."

Problemet Bjarne lär vara fullt medveten om är att "the cat is out of the bag", diskussionen är igång och det har satt igång rörelser som inte kommer stanna bara för det kommit in en president som kör lite shotgun-surgery på ett gäng statliga verk. Även om hela CISA skulle läggas ned spelar det inte lägre någon roll. En viktig sak här är att det nu finns statistik som visar att problemen som plågar C++ (och C) är lösbara, så går inte längre att hävda "ingen har visat att det skulle fungera bättre på annat håll".

För allt fler företag har insett samma sak och har börjar implementera liknande policy.

Fast frågan är om det egentligen är ett problem? Det vi möjligen ser nu är att C++ börjat sin Cobol-bana, vilket betyder att de som vill fortsätta jobba med C++ kommer utan problem ha jobb väl förbi deras pensionsålder. Antagligen också välbetalda sådan, går ingen nöd på de som kan så ut med Cobolt och jobba med "spännande" bank-logik!

Bjarne lär vara bekymrad primärt då C++ är hans baby, han skulle kunna ha sagt "den har växt upp och får klara sig själv", men han verkar fortfarande vilja hålla den livskraftig framåt. För att uppnå det senare verkar det vara rätt mycket konsensus bland ISO C++ (och ISO C, men C lär mer än C++ kunna vara säker på att vara relevant under överskådlig framtid oavsett).

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
Skrivet av Yoshman:

Vilken tur! Då kan ju mail:a Bjarne och säg att han inte har något att oroa sig för

Jag tror att Bjarne som en representant för språket får tänka sig för vad han säger. Men han vet också att säkerhet alltid varit prioriterat. Att C++ är det säkraste språket delas av många, men man behöver lära sig använda friheten i C++ för att åstadkomma säker kod.
Samtidigt vet de flesta utvecklare att C++ bara kommer användas av en minoritet (kanske under 10%). Och tror AI kommer rita om kartan mycket. En liten klick utvecklare kommer kunna producera så mycket mer. De kommer självklart jobba i olika språk men programmering som har smetats ut ordentligt kommer vad jag tror att dra ihop sig mycket. Lite som förr när det endast var nördar som visste hur man kunde programmera en dator.

Skrivet av Yoshman:

Att ett gäng personer sagts upp på CISA är inte specifikt riktat mot detta, man verkar bara ha sagt upp X % och rätt mycket gjort rent hus med de som varit där relativt kort.
Något som fått kraftig kritik redan då CISA gjort flera viktiga anställningar av svårfunnen kompetens, personer som dels själva blev förvånad att de åkte och dels företag som samarbetar med CISA har uttryckt "WTF!!!".

Min gissning är att den nya administrationen anser att detta får marknaden lösa själva. Lägga skattepengar på sådan här smörja är slöseri.

Permalänk
Medlem
Skrivet av klk:

Att C++ är det säkraste språket delas av många,

Går det att skriva minnessäker kod i c/c++? Ja, men det spelar ju mindre roll när det inte görs i praktiken. Så det blir ju mer eller mindre lite oinstressant att diskutera om det är språket eller programmerarnas fel, när det är ett faktum att c och c++ kod introducerar minnes-reletarade säkerhetsproblem som inte drabbar andra språk.

Är för mig ofattbart, oavsett hur stort problem man anser det ovan är, eller inte är, att sitta och påstå att det skulle vara det säkraste språket, inte ett säkert språk (som också är diskuterbart), utan det säkraste.

Permalänk
Medlem
Skrivet av jefff:

Går det att skriva minnessäker kod i c/c++? Ja, men det spelar ju mindre roll när det inte görs i praktiken. Så det blir ju mer eller mindre lite oinstressant att diskutera om det är språket eller programmerarnas fel, när det är ett faktum att c och c++ kod introducerar minnes-reletarade säkerhetsproblem som inte drabbar andra språk.

Är för mig ofattbart, oavsett hur stort problem man anser det ovan är, eller inte är, att sitta och påstå att det skulle vara det säkraste språket, inte ett säkert språk (som också är diskuterbart), utan det säkraste.

Tänk på att mycket av den kod som skrivs i C++ har inga andra alternativ, och där är ofta minneshanteringen mycket viktigt.
C och C++ har nära 100% användning i vissa områden.

Permalänk
Medlem
Skrivet av jefff:

Går det att skriva minnessäker kod i c/c++? Ja, men det spelar ju mindre roll när det inte görs i praktiken. Så det blir ju mer eller mindre lite oinstressant att diskutera om det är språket eller programmerarnas fel, när det är ett faktum att c och c++ kod introducerar minnes-reletarade säkerhetsproblem som inte drabbar andra språk.

Är för mig ofattbart, oavsett hur stort problem man anser det ovan är, eller inte är, att sitta och påstå att det skulle vara det säkraste språket, inte ett säkert språk (som också är diskuterbart), utan det säkraste.

Det är inte lönt att försöka övertyga @klk vad som är sant eller inte. Personen kommer att förneka det, fortsätta trolla, slänga in slumpmässiga argument och termer med egna definitioner.

Skrivet av klk:

Tänk på att mycket av den kod som skrivs i C++ har inga andra alternativ, och där är ofta minneshanteringen mycket viktigt.
C och C++ har nära 100% användning i vissa områden.

Du ser @jefff istället för att bemöta säkerhetspåståendena så nu flyttar @klk diskussionen till manuell minneshantering...

Permalänk
Skrivet av orp:

Du ser @jefff istället för att bemöta säkerhetspåståendena så nu flyttar @klk diskussionen till manuell minneshantering...

Har man inga andra språk att välja på så blir ju C++ det säkraste språket...

Stavfel
Permalänk
Medlem
Skrivet av Ingetledigtnamn:

Har man inga andra språk att välja på så blir ju C++ det säkraste språket...

Har man inga andra språk att välja på så är det även det minst säkra

Permalänk
Medlem
Skrivet av orp:

Du ser @jefff istället för att bemöta säkerhetspåståendena så nu flyttar @klk diskussionen till manuell minneshantering...

Precis, eller handlar det om desperation från "hata C++" gänget

Tro det eller ej men jag tycker det är jättebra att rust får luft under vingarna men jag tror det framförallt är C# de kommer ta "marknadsandelar" från och det är ingen liten kaka.
Personligen så ser jag att något program är skrivet i C# (eller java) skall det mycket till för att installera det eftersom jag vet att de måste skeppa gigantiska runtime bibliotek.

Permalänk
Medlem
Skrivet av klk:

Precis, eller handlar det om desperation från "hata C++" gänget

Det handlar inte om C++ det handlar om att du trollar

Permalänk
Medlem
Skrivet av klk:

Precis, eller handlar det om desperation från "hata C++" gänget

Tro det eller ej men jag tycker det är jättebra att rust får luft under vingarna men jag tror det framförallt är C# de kommer ta "marknadsandelar" från och det är ingen liten kaka.
Personligen så ser jag att något program är skrivet i C# (eller java) skall det mycket till för att installera det eftersom jag vet att de måste skeppa gigantiska runtime bibliotek.

Nej, Rust kommer framförallt ta från C och C++ kakan.

Permalänk
Medlem
Skrivet av klk:

Tänk på att mycket av den kod som skrivs i C++ har inga andra alternativ, och där är ofta minneshanteringen mycket viktigt.
C och C++ har nära 100% användning i vissa områden.

Jag skulle vilja påstå att det där är nästan 100% fel.

För en del fall, speciellt i inbyggda system, så finns det få eller inga andra realistiska alternativ än C.
Det finns nog inget fall där C++ är det enda realistiska alternativet.

Bra anledningar till att välja C++ är:
a) Bakåtkompatibilitet med existerande kod
b) Det är vad utvecklarna kan, och det bedöms inte som värt det att tvinga dem att lära sig något annat språk.

Men för i princip alla andra fall finns det alternativ som fungerar minst lika bra som C++.

Permalänk
Datavetare
Skrivet av klk:

Jag tror att Bjarne som en representant för språket får tänka sig för vad han säger. Men han vet också att säkerhet alltid varit prioriterat. Att C++ är det säkraste språket delas av många, men man behöver lära sig använda friheten i C++ för att åstadkomma säker kod.

Att C++ skulle vara det säkraste språket lär förhoppningsvis delas av ytters få personer, för statistiken visar att det är objektvit rejält fel.

Eller säger du bara att det är en skill-issue? D.v.s. C++ är verkligen säkrast, men det drar till sig skrew-ups som om det inte finns någon morgondag och det är förklaringen till varför C++ står ut i CVEs och liknande?

Skrivet av Erik_T:

Jag skulle vilja påstå att det där är nästan 100% fel.

För en del fall, speciellt i inbyggda system, så finns det få eller inga andra realistiska alternativ än C.
Det finns nog inget fall där C++ är det enda realistiska alternativet.

Bra anledningar till att välja C++ är:
a) Bakåtkompatibilitet med existerande kod
b) Det är vad utvecklarna kan, och det bedöms inte som värt det att tvinga dem att lära sig något annat språk.

Men för i princip alla andra fall finns det alternativ som fungerar minst lika bra som C++.

Det finns en variant av C++ som skulle vara lämpligt för små inbyggda system och liknande i form av freestanding C++ sedan ISO C++20.

Till skillnad från "vanliga" C++, som benämns hosted och i praktiken kräver ett OS har en implementation av standardbiblioteket, går freestanding att köra utan OS. Rust har precis samma sak i form av std (hosted) och core (freestanding).

Givet att ingen kompilator ännu fullt ut implementerar C++20 och givet att det oavsett är ett rätt nytt tillskott till C++ lär väldigt få använda det än.

Så håller helt med, i nuläget är det främst C som är "det enda realistiska alternativet" till en rad saker. Då främst i forma av att det kanske är det enda språk som har en fungerande kompilator till lite mer obskyra CPU-arkitekturer.

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
Skrivet av Yoshman:

Att C++ skulle vara det säkraste språket lär förhoppningsvis delas av ytters få personer, för statistiken visar att det är objektvit rejält fel.

C++ är det mest flexibla språket vilket innebär att man har mest lösningsmöjligheter, dessa möjligheter kan bl.a. användas för att programmera säkert. Så därför används C++ av de som behöver flexibiliteten till att göra säker kod. Kalla det skill issue men vad är inte det? Saker tar tid att lära sig

Permalänk
Medlem
Skrivet av Erik_T:

Jag skulle vilja påstå att det där är nästan 100% fel.

För en del fall, speciellt i inbyggda system, så finns det få eller inga andra realistiska alternativ än C.
Det finns nog inget fall där C++ är det enda realistiska alternativet.

Bra anledningar till att välja C++ är:
a) Bakåtkompatibilitet med existerande kod
b) Det är vad utvecklarna kan, och det bedöms inte som värt det att tvinga dem att lära sig något annat språk.

Där skriver du samma som jag så jag har inte 100% fel

Skrivet av Erik_T:

Men för i princip alla andra fall finns det alternativ som fungerar minst lika bra som C++.

När får vi se en spelmotor i annat språk än C++ som slår spelmotorer skrivna i C++

Ja du kan göra mycket i olika språk men om man skall göra en säljbar produkt som konkurrerar med andra produkter minskar valmöjligheterna drastiskt. Väljer du Rust så får du köra unsafe men då är det inte säkert längre.
Jobba direkt med minnet är ett så kraftfullt verktyg så det går inte att slå det om det handlar om att göra en bra produkt. Det är för kraftfullt.
Självklart måste man veta hur det görs

Att exempelvis för konsulter välja C++ är inte bästa val då de oftast gör specialare som måste underhållas, där prioriteras snarare att kunna byta ut utvecklare. Och produkter tävlar inte utan det handlar mycket mer om att specialskriva.

Permalänk
Medlem
Skrivet av klk:

C++ är det mest flexibla språket vilket innebär att man har mest lösningsmöjligheter, dessa möjligheter kan bl.a. användas för att programmera säkert. Så därför används C++ av de som behöver flexibiliteten till att göra säker kod. Kalla det skill issue men vad är inte det? Saker tar tid att lära sig

Flexibilitet ger inte säkerhet. Oftast gör det inte ens säkerhet enklare att uppnå.
Stor flexibilitet ger stort utrymme för misstag, och därmed för säkerhetsproblem.

För att få bra och säker kod så vill man helst att det skall vara lätt att göra rätt, och svårt att göra fel. Det är inte precis något som beskriver C++.

Permalänk
Datavetare
Skrivet av klk:

När får vi se en spelmotor i annat språk än C++ som slår spelmotorer skrivna i C++

Unity DOTS har de relevanta/unika delarna i C#. Med hjälp av ECS får man där ett system som är dels något lättare att jobba med än de flesta tidigare varianter, samtidigt som dess arkitektur gör att minne utnyttjas på ett väldigt optimalt sätt.

Får se om det blir populärt. För DOTS har varit lovande länge, men det blev egentligen stabilt nog för en 1.0 release relativt nyligen och det kommer ta en del tid att anpassa existerande bibliotek/ramverk till denna modeller.

Rent generellt är just spel ett bra exempel på ett område som C++ helt dominerade för 10-20 år sedan, men som i allt större utsträckning nu går till andra språk. Multicore och C++ går att göra bra, men det är många gånger hjärndött komplicerat utan att ge några prestandafördelar över alternativen.

Sen är spel lite speciella i att majoriteten av flaskhalsarna ligger idag i shaders. Dessa är exakt lika snabba oavsett om man tragglar i C++, assembler, Python eller C#.

Skrivet av klk:

Ja du kan göra mycket i olika språk men om man skall göra en säljbar produkt som konkurrerar med andra produkter minskar valmöjligheterna drastiskt. Väljer du Rust så får du köra unsafe men då är det inte säkert längre.
Jobba direkt med minnet är ett så kraftfullt verktyg så det går inte att slå det om det handlar om att göra en bra produkt. Det är för kraftfullt.
Självklart måste man veta hur det görs

Och vet man hur det ska göras har vi massor med exempel idag som är säkra och väldigt effektiva. Inom vissa områden, t.ex. I/O-tunga jobb som högpresterande webservers, är inte ens längre C++ snabbast utan det kan ofta göras ännu snabbare i bl.a. Go.

På denna punkt är Go unikt, det är en av få språk som inte går via libc utan man går direkt mot systemanropen för att kunna göra saker på sätt som överhuvudtaget inte är möjliga i C/C++, del av I/O-prestandan kommer från detta designval.

Så idag har vi fall där C och C++ faktiskt inte ens är snabbaste, även om det är teoretiskt möjligt att skriva en egen runtime i C/C++ som fungerar på samma sätt. Fast då är man inne på helt icke-standardsaker som med designen i C eller C++ kommer vara extremt error-prone (har testat i C, coola benchmarks men mardröm att programmera...).

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
Skrivet av Yoshman:

Unity DOTS har de relevanta/unika delarna i C#. Med hjälp av ECS får man där ett system som är dels något lättare att jobba med än de flesta tidigare varianter, samtidigt som dess arkitektur gör att minne utnyttjas på ett väldigt optimalt sätt.

Vad jag såg var kärnan utvecklad i C++ så ingen C# där. C# är en av många tekniker spelmotorer kopplar mot för att få fler att klara av att använda motorn, ungefär LUA.

Skrivet av Yoshman:

Rent generellt är just spel ett bra exempel på ett område som C++ helt dominerade för 10-20 år sedan, men som i allt större utsträckning nu går till andra språk. Multicore och C++ går att göra bra, men det är många gånger hjärndött komplicerat utan att ge några prestandafördelar över alternativen.

Som om multicore skulle minska behoven av C++, tror inte det va. Tvärtom drar C/C++ ifrån mer

Skrivet av Yoshman:

Och vet man hur det ska göras har vi massor med exempel idag som är säkra och väldigt effektiva. Inom vissa områden, t.ex. I/O-tunga jobb som högpresterande webservers, är inte ens längre C++ snabbast utan det kan ofta göras ännu snabbare i bl.a. Go.

Förstår inte varför du fastnat i lopen om att Go skulle vara så snabbt. Go använder vad jag kan se en GC och har programmet en GC så är det förpassat till ålderdomshemmet. Språk med GC är inte snabba. Bli inte förvånad om optimerad kod i C++ kan bli 10 gånger snabbare (eller mer) än språk med GC om det är lite luriga saker som skall göras.
Språk med GC använder mer minne (mycket mer), drar inte alls lika mycket nytta av prefetchers, har större fragmentering förutom att de inte kan trixa med bytsen.

Permalänk
Medlem
Skrivet av Erik_T:

Flexibilitet ger inte säkerhet. Oftast gör det inte ens säkerhet enklare att uppnå.
Stor flexibilitet ger stort utrymme för misstag, och därmed för säkerhetsproblem.

För att få bra och säker kod så vill man helst att det skall vara lätt att göra rätt, och svårt att göra fel. Det är inte precis något som beskriver C++.

Enligt dig, vad är bra med flexibilitet? Eller det kanske inte är bra

Permalänk
Medlem
Skrivet av Erik_T:

För att få bra och säker kod så vill man helst att det skall vara lätt att göra rätt, och svårt att göra fel. Det är inte precis något som beskriver C++.

Måste berätta en historia relaterat till detta.
För många år sedan (mer än 19) anställdes en utvecklare där jag jobbade. Topp-student på chalmers, fått pris eller om det var stipendier för hans arbete (svagt minne så kommer inte ihåg exakt).
Han hade jobbat två år efter studier i rymdindustri med programmering. Där fick de inte göra fel, mjukvaran fick inte ha buggar. Allt dokumenterades därför in i detalj.
Eftersom allt var så styrt och detaljgranskades mm, skrev utvecklarna där knappt någon kod alls. Och när de knappt skrev någon kod tränade de heller inte på att programmera..

Han som anställdes var otroligt teoretiskt kompetent, kunde svara på nästan vad som helst. Men han kunde inte programmera, en katastrof. Skulle han göra något så hände knappt något alls och så efter någon vecka hade han lyckats få ihop några kodsnuttar.

Efter några månader vart han satt på att göra installationer istället, det passade han bättre för. Där behövde man inte kunna programmera men däremot vara noga med att inget glömdes av.

Vad jag ville ha sagt med detta är att om man skriver kod i en miljö där det inte går att göra vissa fel kommer utvecklarna heller inte att träna på den typen av utveckling.
C och C++ utvecklare har tränat mycket på minnesfel. De är duktiga på det (de som behärskar språket). Jag tror detta är svårt att förstå för de som aldrig tränat på att hantera minnet vilket är självklart. Teoretisk kunskap är inte alls samma sak som praktisk kunskap.

Permalänk
Medlem
Skrivet av klk:

Vad jag ville ha sagt med detta är att om man skriver kod i en miljö där det inte går att göra vissa fel kommer utvecklarna heller inte att träna på den typen av utveckling.
C och C++ utvecklare har tränat mycket på minnesfel. De är duktiga på det (de som behärskar språket). Jag tror detta är svårt att förstå för de som aldrig tränat på att hantera minnet vilket är självklart. Teoretisk kunskap är inte alls samma sak som praktisk kunskap.

Det här är äpplen och päron igen... Ja, övning ger färdighet men det är orelevant i sammanhanget.
C och C++ program innehåller fler minnesfel än Rustprogram, av den enkla anledningen att det är betydligt lättare att göra fel.

Permalänk
Datavetare
Skrivet av klk:

Vad jag såg var kärnan utvecklad i C++ så ingen C# där. C# är en av många tekniker spelmotorer kopplar mot för att få fler att klara av att använda motorn, ungefär LUA.

"Kärnan" är maskinkod när man faktiskt kör programmet, i.e. det är rätt irrelevant att det finns vissa delar som är skrivna i X, Y eller Z. Det relevanta är att domänen "skriva spel" allt mer går mot andra språk, där C# är det som ökar mest här.

Och specifika poängen här är: DOTS/ECS ger spelprogrammeraren en C# miljö som är väsentligt bättre på att utnyttja flera CPU-kärnor samt SIMD. Detta får man rent tekniskt genom att göra en rad optimeringar relaterade till access-patterns mot minne, men det trevliga är att det görs på ett sätt som är hyfsat automatiskt. Det man måste "offra" är att logiken skrivs på ett rätt annorlunda sätt mot "normala" mono-behavior klasser.

Skrivet av klk:

Som om multicore skulle minska behoven av C++, tror inte det va. Tvärtom drar C/C++ ifrån mer

Bara som ett lackmustest av fokus här: det gick faktiskt inte att skriva ett multitrådat program i standard C eller C++ innan 2011, något som var möjligt i Java sedan första release 1996 och första release av C# 2002.

Sedan är det helt klart så att en GC har en viss overhead, men om man jobbar med multitrådade program på multi-core plattform finns ett gäng fördelar med GC rent effektivitetsmässigt. Ett populärt sätt i C, t.ex. i Linux-kärnan, är att skapa tillräckligt mycket av en GC för att få lock-free algoritmer som sequence-locks, korrekta.

Skrivet av klk:

Förstår inte varför du fastnat i lopen om att Go skulle vara så snabbt. Go använder vad jag kan se en GC och har programmet en GC så är det förpassat till ålderdomshemmet. Språk med GC är inte snabba. Bli inte förvånad om optimerad kod i C++ kan bli 10 gånger snabbare (eller mer) än språk med GC om det är lite luriga saker som skall göras.
Språk med GC använder mer minne (mycket mer), drar inte alls lika mycket nytta av prefetchers, har större fragmentering förutom att de inte kan trixa med bytsen.

Nu verkar du nöjd att spela strut-fotboll och göra allt med det enda verktyg du har (C++). Fungerar det för dig: great!

Men ibland vill man gräva en grop istället för att slå i spikar, då kan en spade (Go) vara bättre än en hammare (C++). Är flaskhalsen "compute" är det inte speciellt svårt att få ett C++ program att bli snabbare än motsvarande Go program.

Är däremot flaskhalsen I/O har Go fundamentala fördelar på väldigt låg nivå (bl.a. i hur man binder in standardbiblioteket mot OS-systemanrop) som man på C/C++ nivå inte kan riktigt matcha med mindre än att göra bypass på libc/crt vilket då diskvalificerar användning av standardbiblioteket och alla bibliotek som ligger ovanpå det (typ alla förutom ett par väldigt nischade saker för embedded-system).

Att skriva en webbapplikation i Go som hanterar 1k-10k samtida användare är något många studenter skulle kunna fixa med rätt grundläggande kunskap i språket. Göra det i C++ är långt mer komplicerat och inte alls säkert att det ens blir snabbare. Även här ligger orsaken i att Go har på väldigt låg nivå en scheduler som är specialanpassad / optimerad för just den här typen av applikationer.

Det är inga problem, det är även idiomatisk, Go att bara dra igång en "gorutin" per session. Det använder relativt lite stack-utrymme, det kommer schemaläggas på "en lämplig mängd OS-trådar" etc. Startar man en OS-tråd per session, vilket den enkla/naiva lösningen i C++, kommer systemet blir brutalt långsamt.

Sättet C/C++ modelererar en tråd är kopierad från POSIX som tyvärr designades när normalfallet var CPUer med 1 CPU-kärna och man därför inte riktigt insåg att man blandade ihop koncept som borde hanteras separat: "tasks", "OS-trådar" och "fysiska CPU-trådar".

Go har "rätt" abstraktion här för att man bara rakt av ska kunna designa sina programm enligt detta
https://en.wikipedia.org/wiki/Communicating_sequential_proces...

Visa signatur

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