Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer
C++ och dess framtid att programmera minnessäkert - Hur går utvecklingen?
Då vi redan berört det mesta som ens på något sätt kan anses relaterat till C++ (och säger det i positiv bemärkelse, detta har börjar lika tråden om elbilar fast bara det att detta är långt mer spännande ).
Kanske inte är någon nyhet alls för de som idag använder C++ som sin primära plattform, men nämner det ändå då det var ett rejält lyft för mig!
Ville testa lite saker i C++ i relation till diskussionen om DOD och såg frågan om "sökbar kod". Börjar bli ett tag sedan jag själv i huvudsak jobbande i C och C++, använde då Emacs+Cscope+(grep/etc i shell) för att gräva runt i kod. Det C++ kodande jag gjort efter det har primärt varit ihop med Unreal Engine där det finns en väldigt bra integration med Rider (Rider är helt OK, men föredrar personligen VS Code över både Rider och Visual Studio idag).
Installerar man "rekommenderat C++ stöd" i VS Code får man en OK-ish språkserver som Microsoft står bakom. Den är ju "OK-ish", men är inte alls i nivå med språkstödet VS Code har för t.ex. Rust och Go.
Sökte lite på vad som hänt med CScope, visade sig vara "typ inget sedan 2012"... Men orsaken var mer spännande, det verkar mycket beror på att det nu finns något som kan göra allt det CScope kunde göra + massor med saker utöver det:
clangd: https://marketplace.visualstudio.com/items?itemName=llvm-vs-c...
När man installerar clangd i VS Code får man frågan om det ska ersätta Microsofts intellisense, svarar man "ja" här får man långt bättre C++ stöd än vad man hade innan.
En annan trevlig sak är att Copilot-integration med VS Code gör CMake betydligt smidigare att använda. För mindre projekt är det bara att lägga in källkoden som kontext och säga åt Copilot att "write me a CMakeLists.txt that can build this project". Har fungerat förvånadsvärt bra på de fall jag testat så här långt (testa på MacOS, native ARM64 Ubuntu 24.04 och WSL2 x86_64 Ubuntu 24.04).
Tydligen var det som refererades till i "C++ är under attack enligt Bjarne Stroustrup" taget från ett intern meddelande mellan Bjarne och WG21 (namnet på C++ ISO- kommittén), ett meddelande som inte var tänkt för allmän konsumtion. Men då Bjarne ansåg att påståendet blev rätt märkligt utan kontext publicerade han meddelandet i sin helhet (det för en tid sedan, men hade inte sett det själv innan)
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p365...
Bjarnes meddelande verkar var en svar på en hel del kritik mot att "profiles" kanske inte är den lösning C++ behöver, ett exempel är detta
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p358...
Två saker man pekar på där är just bristerna med att ha det "opt-in", vilket är en punkt det "andra" C++ förslaget (https://safecpp.org/draft.html) också pekar på. Ett annat är att sättet man ska göra denna "opt-in" är på ett sätt som resulterar i något som kompilerar med dagens stora C++-kompilatorer, fast det då de helt sonika ignorerar "opt-in"-kravet.
Vidare är det faktiskt inte bara administrationen i USA som ändat sin lagstiftning på ett sätt som har relevant påverkan även för programvaruutveckling, det har även EU gjort rätt nyligen
https://single-market-economy.ec.europa.eu/single-market/good...
"PLD's rules specifically clarify that all types of software are covered by the new directive, including applications, operating systems and AI-systems."
Det som specifikt lyft fram som slagträ mot fortsatt användning av C och C++ är detta
"Under the new Product Liability Directive, a product is to be considered defective where the product does not provide the safety that a person is entitled to expect from it, or what is required under law."
Om man väljer C eller C++ utan att ha en väldigt bra förklaring till varför när någon drabbas av säkerhetsproblem som i praktiken vore omöjliga att göra i andra språk blir ovan väldigt svårt att ducka för tillverkaren.
Det här är en väldigt svår nöt att knäcka. Även om jag följer med utvecklingen av C++-standarden är det svårt att bedöma hur pass infekterad striderna är inom de som jobbar med C++-standarden. Ser rätt mycket ut att vara två, eller egentligen tre läger
1. C++ profiles, detta är det Bjarne främst pushar. Fördelarna som pekas ut är möjlighet till gradvis tillämning. Nackdelarna är att det är långt ifrån någon komplett lösning, samt opt-in för säkerhet (eng. safety) har en hel del svagheter.
2. Safe C++. Fördelarna här är att det redan finns en fungerande implementation, det är "opt-out" (likt Rust "unsafe"). Nackdelarna som pekas ut är bl.a. att det lite väl mycket känns som Rust-med-C++-syntax, varför då inte bara använda Rust?
3. I stort sett göra inget åt situationen. Initialt kändes denna rätt korkad för mig. Men ju mer jag tänker på det ju mer är detta faktiskt en fullt rimligt hållning. C och C++ kommer användas under lång tid framöver även om man väljer detta spår, men de är då likt t.ex. Cobol och Fortran, "legacy-val" som bara bör väljas därför att man behöver jobba vidare med existerande kod.
Edit: Finns ju en 4:e, även om jag inte tycker det faller inom ramen "lösning för C++"
4. Gå över till Carbon, Cppfront, etc, d.v.s. nya språk som själva är "memory safe" men som också garanterar perfekt interop med C++.
Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer
Lite relaterat: Microsoft i skottgluggen för något som tyvärr är dem rätt bekant, de lägger krokben för "konkurrenter".
Har varit lite förvånad över hur låga betyg saker som C#-extensionen i Visual Studio trots allt har. Tycker den fungerar riktigt bra efter den rätt stora uppdatering Microsoft gjorde för något år sedan. Läste ett par kommentarer och inser att väldigt många bottenbetyg kommer av extensionen inte fungerar i VSC-forkar.
Det har nu också hänt för Microsoft C++-extension
https://www.theregister.com/2025/04/24/microsoft_vs_code_subt...
Totalt sett verkar det vara 3 väldigt populära VSC-extensioner som är påverkade nu
C++: https://marketplace.visualstudio.com/items?itemName=ms-vscode...
C#: https://marketplace.visualstudio.com/items?itemName=ms-dotnet...
Python: https://marketplace.visualstudio.com/items?itemName=ms-python...
Till Microsoft försvar får man väl ändå säga att de gömmer inget här och de som använder ovan i forkar av VSC gör sig skyldiga till licensbrott
Alla ovan innehåller detta
"INSTALLATION AND USE RIGHTS. a) General. You may install and use any number of copies of the software only with Microsoft Visual Studio, Visual Studio for Mac, Visual Studio Code, Azure DevOps, Team Foundation Server, and successor Microsoft products and services (collectively, the “Visual Studio Products and Services”) to develop and test your applications. b) Third Party Components."
Men det ändrar inte "typiskt Microsoft att vifta med 'open source' flaggan för att sedan ändå ha något som hindrar konkurrenter".
I fallet C++ lyfte det det LLVM-baserade C++-plugin-alternativet ännu ett pinhål
https://marketplace.visualstudio.com/items?itemName=llvm-vs-c...
Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p365...
Bjarnes meddelande verkar var en svar på en hel del kritik mot att "profiles" kanske inte är den lösning C++ behöver, ett exempel är detta
Bjarne är inte ung längre och jag tror inte han spenderar speciellt mycket tid med programmering och han vet därför inte vilken förändring hela branschen genomgår, hur LLM påverkar. Tror också han mest pratar med andra som inte längre skriver speciellt mycket kod. De har inte kopplat hur man optimerar arbete med LLM och hur det förändrar hela processen med att skriva program.
Han borde isåfall rikta in sin rädsla mot att antalet programmerare (menar då de som kan hantera kod) kommer minska och istället kommer nya som tror de programmerar när de låter LLM göra jobbet.
Skillnaden mellan de som programmerar och de som tror de programmerar kommer öka, att det inte märks än beror på att verktygen är nya och därför en viss fördröjning.
LLM är mycket duktig på att upptäcka slarvfel, inte allt men de hittar mycket. Speciellt om man förbereder och kvaliteten är märkbart bättre nu jämfört med bara något halvår sedan. Får också en känsla att de bättrat på att anpassa sig till kod som utvecklare jobbar med om man har prenumeration eller annat.
Senaste två månaderna har de verktyg jag använder blivit klart bättre på att dokumentera koden, behöver inte alls trixa och de kommenterar "rätt" kod. För några månader sedan behövde man rätta mer.
Striden kommer stå mellan teoretiker (de som läst på hur man gör) och praktiker, de som tränat och lärt sig med övning.
Min analys är att LLM är bättre för de med praktiska kunskaper. Det är teoretikerna som bli ersatta.
Om tre år kommer diskussionen vara en helt annan för det går fort. Hur snabbt beror nog på hur de stora lyckas möta ny konkurrens för LLM är bra för de som saknar resurser men sitter på skicklighet.
Lite relaterat: Microsoft i skottgluggen för något som tyvärr är dem rätt bekant, de lägger krokben för "konkurrenter".
Har varit lite förvånad över hur låga betyg saker som C#-extensionen i Visual Studio trots allt har. Tycker den fungerar riktigt bra efter den rätt stora uppdatering Microsoft gjorde för något år sedan. Läste ett par kommentarer och inser att väldigt många bottenbetyg kommer av extensionen inte fungerar i VSC-forkar.
Det har nu också hänt för Microsoft C++-extension
https://www.theregister.com/2025/04/24/microsoft_vs_code_subt...
Riskabel väg för Microsoft men bra om deras kontroll kan minska för det öppnar upp för konkurrens eller så försöker de krama ur allt de kan nu och vet redan att de tappat kontrollen.
Klaus Iglbergers keynote från using std::cpp 2025 lär väl å andra sidan vara on-topic för tråden.
The power of GNU compiles you!
"Often statistics are used as a drunken man uses lampposts -- for support rather than illumination."
Några inlägg som halkat offtopic har raderats. Vill man ha hjälp med sin kod är det bättre att starta en ny tråd om detta.
- MOD
SweClockers Forumregler | Marknadsregler | Kontaktformulär | Nyhetstips | Feedback
Klaus Iglbergers keynote från using std::cpp 2025 lär väl å andra sidan vara on-topic för tråden.
https://www.youtube.com/watch?v=vN0U4P4qmRY
https://www.youtube.com/watch?v=vN0U4P4qmRY
Skulle säga att Klaus Iglbergers och Bjarne Stroustrup gör samma misstag. Även om deras observation är korrekt, C++ har betydligt mer problem att det borde om folk bara använde moderna finesser i språket, så tycker jag båda verkar totalt missa att ta in förstå varför så är fallet.
En av kommentarerna till videon slår huvudet på spiken
"In C++ you have to learn how to write safe code.
In Rust you have you to learn how to write unsafe code."
Ett mer annat sätt att uttrycka det är att en bra design gör det relativt svårt att använda det hela på fel sätt, en mindre bra design gör det i alla fall möjligt att göra rätt. C++ problem när det kommer till säkerhet är att man definitivt är i den andra gruppen här.
Om det bara vore ett "people problem", hur kommer det sig då att C++ står ut som väldigt mycket på denna punkt? Flera av de stora jättarna som också har stora C++-kodbaser har alla rätt liknande statistik, 60-70 % av all säkerhetsrelaterade problem kommer från buggar i C och C++ som till väldigt stor grad inte är möjliga att göra i Java, C#, Go, Rust, m.fl.
Har dessa språk mindre problematiska människor? För om det bara är ett "people problem" och inte ett tekniskt problem, varför är det då primärt ett C och C++ problem?
Man kan inte bara peka på "men det finns så mycket legacy kod". Ja, exakt! Hade det inte varit så hade lösningen varit trivial: använd något annat än C och C++!
En lösning för C och C++ är rätt värdelös om det inte också löser/kraftigt förbättrar situationen för legacy-kod. Behöver man ändå skriva om allt så är är det rationella att använda något annat. Bl.a. p.g.a. det Microsoft (Satya Nadella) nämner här: träffsäkerheten LLMs har i att jobba med kod är enligt deras erfarenhet klart sämre i C++ än C# och Python.
Sen har flera, bl.a. Sean Baxter (han bakom Safe C++ specifikationen), pekat på man rätt lätt kan formellt bevisa att vissa typer av säkerhetsgarantier kräver t.ex. begränsningar som att det maximalt får finnas ett enda sätt att referera till mutable-data. Det och flera andra saker som faktiskt krävs saknas idag i C++, även om man tar till alla former av "modern C++".
Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer
Det verkar som C++ verkar ta minnessäkerhet riktigt seriöst.
Ser framemot en lösning på detta problem. Kanske nästa C++ version?
Hade jag presenterat min lösning så hade jag lagt till en flagga i kompilatorn som kontrollerar så koden följer samma regler som Rust gör. Jag menar...hur svårt ska det vara? Vi landade på Månen, men vi kan inte göra C++ minnessäkert? Haha!
Det verkar som C++ verkar ta minnessäkerhet riktigt seriöst.
Ser framemot en lösning på detta problem. Kanske nästa C++ version?
Hade jag presenterat min lösning så hade jag lagt till en flagga i kompilatorn som kontrollerar så koden följer samma regler som Rust gör. Jag menar...hur svårt ska det vara? Vi landade på Månen, men vi kan inte göra C++ minnessäkert? Haha!
Det är exakt det Safe-C++ gör. Men bl.a. Bjarne verkar inte gilla den vägen, han vill istället gå vägen via "profiles" som mer är en linter där varningar blir fel.
Problemet med / kritiken mot Safe-C++ är resultatet blir ett språk som känns rätt annorlunda mot dagens C++. Det blir mer Rust-med-C++-syntax än modern-C++-med-lite-tweaks.
Och det visar nog var problemet ligger i att försöka sig på en "quick-fix", vissa av problemen i C++ är väldigt djupt rotade i dess design. Djupare än vad man fixar med "lite statisk analys och maximal varningsnivå".
Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer
Det är exakt det Safe-C++ gör. Men bl.a. Bjarne verkar inte gilla den vägen, han vill istället gå vägen via "profiles" som mer är en linter där varningar blir fel.
Problemet med / kritiken mot Safe-C++ är resultatet blir ett språk som känns rätt annorlunda mot dagens C++. Det blir mer Rust-med-C++-syntax än modern-C++-med-lite-tweaks.
Och det visar nog var problemet ligger i att försöka sig på en "quick-fix", vissa av problemen i C++ är väldigt djupt rotade i dess design. Djupare än vad man fixar med "lite statisk analys och maximal varningsnivå".
Jag skulle lätt rösta för Safe C++. Jag antar att Safe C++ har tagit mycket, eller all, inspiration från Rust. Om detta är den bästa lösningen. Ja, varför inte implementera den?
Jag skulle tänka mig att .cpp och .h filer som jag har skrivit, kan jag markera med en flagga att dessa ska kontrolleras för minnessäkerhet. Övriga .cpp och .h filer så som bibliotek eller annat, går inte under under denna flagga. Det vore svårt att få gammal C++ kod att passera minnessäkerhet, än fast koden fungerar klockrent.
Jag skulle säga att min strategi är en "quick-fix" och en utmärkt fix också. Hur svårt ska det vara? Problemet verkar sitta i att C++ gänget är oeniga vilken strategi som C++ ska ta, än själva lösningen. Där har vi problemet!
Hur menar Bjarne Stroustrup att säkerhetsprofiler ska fungera? Är det som idag?
Jag skulle lätt rösta för Safe C++. Jag antar att Safe C++ har tagit mycket, eller all, inspiration från Rust. Om detta är den bästa lösningen. Ja, varför inte implementera den?
Jag skulle tänka mig att .cpp och .h filer som jag har skrivit, kan jag markera med en flagga att dessa ska kontrolleras för minnessäkerhet. Övriga .cpp och .h filer så som bibliotek eller annat, går inte under under denna flagga. Det vore svårt att få gammal C++ kod att passera minnessäkerhet, än fast koden fungerar klockrent.
Jag skulle säga att min strategi är en "quick-fix" och en utmärkt fix också. Hur svårt ska det vara? Problemet verkar sitta i att C++ gänget är oeniga vilken strategi som C++ ska ta, än själva lösningen. Där har vi problemet!
Hur menar Bjarne Stroustrup att säkerhetsprofiler ska fungera? Är det som idag?
Lösningen Bjarne föreslår är i korthet att man ska kunna aktivera olika profiler, där en profil kanske fokuserar på att eliminera/minska en typ av problem som t.ex. att helt förbjuda pekararitmetik (väldigt vanlig källa till minnesbuggar, väldigt få moderna språk har ens detta även om de stödjer pekare).
Problemet med Safe-C++ är primärt att det inte tillför något på existerade kodbaser då dessa inte kommer kompilera om man aktiverar säkerhetsfunktionerna.
Att ha säkerhet som en opt-in funktion (vilket profiles i huvudsak förordar) tror jag är dömt att misslyckas. Safe-C++ är ett försök att göra säkerhet mer opt-out, men man har ju kvar problematiken då att huvudanledningen till C++ användning är att man har stora mängder legacy-kod. Safe-C++ gör egentligen ingen nytta för det.
Med profiles är tanken att man kan aktivera fler och fler "bra profiler" i mer och mer av sin kod. Men även det har problem. Är inte bara rewrites som ger nya buggar, all form av förändring av kod har en tendens att orsaka buggar. Profiles är väl en bra idé om man tror den vägen går fortare och ger mindre nya buggar än en mer sledge-hammer approach som Safe-C++.
Frågan är väl om man profiles kan nå "tillräckligt långt".
I C finns ännu en sätt att angripa problemet i form av TrapC. Likt Safe-C++ försöker TrapC skapa "Rust-lika garantier". Till skillnad från TrapC så föreslår man där att man definierar om vissa delar av språket, d.v.s. det är en bakåt-inkompatibel förändring. Fördelen över Safe-C++ är att resultatet fortfarande ser väldigt mycket ut som "vanlig C", nackdelen är att man måste kompilera om allt för att få säkerhetsgarantier + enstaka saker kommer inte längre kompilera och måste därför modifieras.
Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer
Lösningen Bjarne föreslår är i korthet att man ska kunna aktivera olika profiler, där en profil kanske fokuserar på att eliminera/minska en typ av problem som t.ex. att helt förbjuda pekararitmetik (väldigt vanlig källa till minnesbuggar, väldigt få moderna språk har ens detta även om de stödjer pekare).
Problemet med Safe-C++ är primärt att det inte tillför något på existerade kodbaser då dessa inte kommer kompilera om man aktiverar säkerhetsfunktionerna.
Att ha säkerhet som en opt-in funktion (vilket profiles i huvudsak förordar) tror jag är dömt att misslyckas. Safe-C++ är ett försök att göra säkerhet mer opt-out, men man har ju kvar problematiken då att huvudanledningen till C++ användning är att man har stora mängder legacy-kod. Safe-C++ gör egentligen ingen nytta för det.
Med profiles är tanken att man kan aktivera fler och fler "bra profiler" i mer och mer av sin kod. Men även det har problem. Är inte bara rewrites som ger nya buggar, all form av förändring av kod har en tendens att orsaka buggar. Profiles är väl en bra idé om man tror den vägen går fortare och ger mindre nya buggar än en mer sledge-hammer approach som Safe-C++.
Frågan är väl om man profiles kan nå "tillräckligt långt".
I C finns ännu en sätt att angripa problemet i form av TrapC. Likt Safe-C++ försöker TrapC skapa "Rust-lika garantier". Till skillnad från TrapC så föreslår man där att man definierar om vissa delar av språket, d.v.s. det är en bakåt-inkompatibel förändring. Fördelen över Safe-C++ är att resultatet fortfarande ser väldigt mycket ut som "vanlig C", nackdelen är att man måste kompilera om allt för att få säkerhetsgarantier + enstaka saker kommer inte längre kompilera och måste därför modifieras.
Så när väntas resultat levereras? Eller ska dom ha möten på möten efter möten?
Jag som användare av C++ (och C) är väldigt intresserad hur utvecklingen går för C++. Jag vill helst att C++ ska fokusera på saker som gör språket attraktivt.
Så när väntas resultat levereras? Eller ska dom ha möten på möten efter möten?
Jag som användare av C++ (och C) är väldigt intresserad hur utvecklingen går för C++. Jag vill helst att C++ ska fokusera på saker som gör språket attraktivt.
Målet är att få in en första version of "profiles" i C++26. Är inte super-påläst om detaljerna, men en sökning säger att det är 3 profiler som kan komma in i C++26 (tanken är att man framåt sedan fortsätter lägga till nya profiler)
"minimal" - är inte riktigt med på vad detta exakt gör, men beskrivningen är den ska innehålla en delmängd av C++ som är lätt att stödja i kompilatorer, OS, etc. Samtidigt som det är en delmängd av C++ som är relativt lätt att förstå. Verkar sikta lite på "vettigt första steg för de som vill lära sig C++"
"freestanding" - denna är rätt analog till Rust core, en delmängd som kan implementeras helt utan OS-stöd. Så t.ex. finns inte minnesallokering med. Detta är högst användbart för inbyggda-system, är just Rust core som gjort att Rust fått fotfäste i en rad MCUer.
"safe" - det tråden primärt handlar om. För C++26 är detta en väldigt liten delmängd, det täcker inte alls lika mycket som t.ex. Safe C++ förslaget. För C++26 handlar det om att ge en delmängd som undviker undefined behavior (UB).
För att sätta det lite i perspektiv: går väl helt OK att använda C++20 idag, C++23 är det lite mer beta-stämpel över. Så C++26 lär i praktiken vara någon man kan förlita sig på om 3-6 år från nu.
Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer
Kan de standardisera kompilatorinställningar med "profiles" tror jag de får igenom det för det antar jag är efterfrågat av många
Exempel med inställningar i microsofts kompilator.
https://learn.microsoft.com/en-us/cpp/build/reference/compile...
Få C++ utvecklare som kan mer än en bråkdel av dem, kanske inte ens det
Målet är att få in en första version of "profiles" i C++26. Är inte super-påläst om detaljerna, men en sökning säger att det är 3 profiler som kan komma in i C++26 (tanken är att man framåt sedan fortsätter lägga till nya profiler)
"minimal" - är inte riktigt med på vad detta exakt gör, men beskrivningen är den ska innehålla en delmängd av C++ som är lätt att stödja i kompilatorer, OS, etc. Samtidigt som det är en delmängd av C++ som är relativt lätt att förstå. Verkar sikta lite på "vettigt första steg för de som vill lära sig C++"
"freestanding" - denna är rätt analog till Rust core, en delmängd som kan implementeras helt utan OS-stöd. Så t.ex. finns inte minnesallokering med. Detta är högst användbart för inbyggda-system, är just Rust core som gjort att Rust fått fotfäste i en rad MCUer.
"safe" - det tråden primärt handlar om. För C++26 är detta en väldigt liten delmängd, det täcker inte alls lika mycket som t.ex. Safe C++ förslaget. För C++26 handlar det om att ge en delmängd som undviker undefined behavior (UB).
För att sätta det lite i perspektiv: går väl helt OK att använda C++20 idag, C++23 är det lite mer beta-stämpel över. Så C++26 lär i praktiken vara någon man kan förlita sig på om 3-6 år från nu.
Jag skulle gärna vilja ha ett C++ med en kompilator som kan varna för minnesbuggar. Sedan får jag göra ett val om jag vill följa rekommendationerna eller inte.
Bjarne fortsätter prata om detta, artikel på devclass
https://devclass.com/2025/05/09/interview-bjarne-stroustrup-o...
Ser ut att gå lite trögt med profiles för C++26. Mycket är redan fryst för vad som kommer accepteras in i C++26, så var hela tiden rätt ont om tid. Bjarne verkar inte helt nöjd med hur det hanterats
"He is frustrated though that there is no support for profiles in the C++ specification, nor will there be soon. “The sad thing is, the standards committee got confused and did not guarantee that this would be in C++ 26,” he tells us."
Bjarne uttrycker rätt mycket frustration kring vad han anser är en huvudorsak till väldigt många problem: "C++ skulle alls ha så här mycket problem om folk faktiskt skrev modern C++".
Gissar att Bjarne är fullt medveten om att C++ rätt mycket har delats upp i två huvudläger. De som anser att C++ redan var väldigt komplext pre C++ 11, men att det efter det blev så annorlunda och så långt mer komplext att de fortsätter att skriva C++98 då de anser det är bättre.
I någon mening får man ge dem ett par poänger. Det finns hela böcker skrivna enbart om move-semantics, det är absolut en bra finess (kritiskt om man faktiskt vill skriva modern C++ med bibehållen riktigt hög prestanda) men det är extremt komplex och enormt minfält (som GC-språk helt kan ignorera och ändå behålla prestandan).
Hello-world för C++ coroutines är även det långt mer komplext och tekniken är fylld med foot-guns som liknade funktion i moderna språk saknar (trycker i.o.f.s. async i både C# och Rust också har en del foot-guns, bara Go där det är direkt trivialt).
Blir spännande att följa UE6 också då även det har en kraftig C++-anknytning. Epics syn på bristen av bra multicore optimeringar i dagens spel är till stor del en konsekvens av att om detta görs i C++ måste alla hela tiden tänka och göra rätt kring alla problem som uppstår i sådana program (och de är många och komplexa). Det är inte realistiskt mer än på de fall som ger absolut mest utdelning.
Epic anser att enda rimliga lösningen är en där majoriteten av programmerarna kan fortsätta tänka rätt mycket som i dagen enkeltrådade program (i ett spel är redan det väldigt komplext). De enda som behöver få allt kring multicore rätt är de som utvecklar spelmotorn/kringliggande miljöer. De tror detta bara kan uppnås i kombination med ett språk specifikt utvecklat för detta, i Epics fall jobbar de på ett egen sådan språk vid namn Verse.
Får se om UE6 ger Fortnite matcher med >10k samtida spelare, något som är ett uttalat mål. Att UE4/UE5 C++ baserad motor har stora delar som i praktiken enbart körs på huvudtråden är största orsak till att dagens spel cap:ar vid strax över 100 samtida spelare per match.
Kan de standardisera kompilatorinställningar med "profiles" tror jag de får igenom det för det antar jag är efterfrågat av många
Exempel med inställningar i microsofts kompilator.
https://learn.microsoft.com/en-us/cpp/build/reference/compile...
Få C++ utvecklare som kan mer än en bråkdel av dem, kanske inte ens det
Varningar och vissa specifika features kan hjälpa till med vissa saker, men det som tar en klart närmast det profiles vill uppnå idag är verktyg som clang-tidy.
Genom att kombinera flera existerande clang-tidy tester kan man komma hyfsat nära profiler som safety och freestanding, i alla fall som de initialt är tänkt att fungera.
Bjarne verkar också tycka att på kort sikt är verktyg som clang-tidy det bäst man kan ta till
"In the meantime, developers can use things like Clang-Tidy. “It has part of the checking for what I call the C++ core guidelines, which is a joint project with Red Hat, Microsoft and others,” he says."
Jag skulle gärna vilja ha ett C++ med en kompilator som kan varna för minnesbuggar. Sedan får jag göra ett val om jag vill följa rekommendationerna eller inte.
Som nämnts flera gånger i denna tråd: som C++ är definierat idag är det i flera fall omöjligt att enbart via statisk analys hitta minnesproblem i C++-kod.
Är just detta som Safe-C++ vill råda bot på, d.v.s. ta C++ dit Rust är där man inom en safe-delmängd av språket (som måste vara majoriteten av språket för att vara användbart i praktiken) där sådana garantier är möjliga redan vid kompilering.
Vad man kan göra är bl.a. det klk förslår ovanför: dagens kompilatorer har en rad flaggor, vissa "bryter" mot C++ "zero cost abstraction" mantra men kan p.g.a. av det ge (runtime) garantier som "vanlig" C++ saknar. De är flaggor just för att en sådan kostnad är OK för vissa, men otänkbart för andra.
Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer
Bjarne fortsätter prata om detta, artikel på devclass
https://devclass.com/2025/05/09/interview-bjarne-stroustrup-o...
Ser ut att gå lite trögt med profiles för C++26. Mycket är redan fryst för vad som kommer accepteras in i C++26, så var hela tiden rätt ont om tid. Bjarne verkar inte helt nöjd med hur det hanterats
"He is frustrated though that there is no support for profiles in the C++ specification, nor will there be soon. “The sad thing is, the standards committee got confused and did not guarantee that this would be in C++ 26,” he tells us."
Bjarne uttrycker rätt mycket frustration kring vad han anser är en huvudorsak till väldigt många problem: "C++ skulle alls ha så här mycket problem om folk faktiskt skrev modern C++".
Gissar att Bjarne är fullt medveten om att C++ rätt mycket har delats upp i två huvudläger. De som anser att C++ redan var väldigt komplext pre C++ 11, men att det efter det blev så annorlunda och så långt mer komplext att de fortsätter att skriva C++98 då de anser det är bättre.
I någon mening får man ge dem ett par poänger. Det finns hela böcker skrivna enbart om move-semantics, det är absolut en bra finess (kritiskt om man faktiskt vill skriva modern C++ med bibehållen riktigt hög prestanda) men det är extremt komplex och enormt minfält (som GC-språk helt kan ignorera och ändå behålla prestandan).
Hello-world för C++ coroutines är även det långt mer komplext och tekniken är fylld med foot-guns som liknade funktion i moderna språk saknar (trycker i.o.f.s. async i både C# och Rust också har en del foot-guns, bara Go där det är direkt trivialt).
Blir spännande att följa UE6 också då även det har en kraftig C++-anknytning. Epics syn på bristen av bra multicore optimeringar i dagens spel är till stor del en konsekvens av att om detta görs i C++ måste alla hela tiden tänka och göra rätt kring alla problem som uppstår i sådana program (och de är många och komplexa). Det är inte realistiskt mer än på de fall som ger absolut mest utdelning.
Epic anser att enda rimliga lösningen är en där majoriteten av programmerarna kan fortsätta tänka rätt mycket som i dagen enkeltrådade program (i ett spel är redan det väldigt komplext). De enda som behöver få allt kring multicore rätt är de som utvecklar spelmotorn/kringliggande miljöer. De tror detta bara kan uppnås i kombination med ett språk specifikt utvecklat för detta, i Epics fall jobbar de på ett egen sådan språk vid namn Verse.
Får se om UE6 ger Fortnite matcher med >10k samtida spelare, något som är ett uttalat mål. Att UE4/UE5 C++ baserad motor har stora delar som i praktiken enbart körs på huvudtråden är största orsak till att dagens spel cap:ar vid strax över 100 samtida spelare per match.
Jag förstår att om man programmerar i modern C++, så är det betydligt mer minnessäkert. Jag använder aldrig pekare i C++ eller vanliga arrayer. Jag kör alltid vektorer eller arrayer från std-biblioteket och smarta pekare. Antingen skriver man i C eller C++. Inte blanda dessa!
Men att C++26 inte kommer innehålla den säkerhet som önskas är ett tecken på att det finns oenighet.
Jag kan förstå varför folk inte vill uppdatera sig till den nya C++ standarden. C-liknande språk är väldigt konservativa. C, Java, C# och C++ är språk för mannen som inte vill lära sig nya saker hela tiden, utan bli bra på det den redan kan. Jag känner igen mig. När jag kör C på mitt jobb så finns det en yngre generation som ska alltid försöka använda den senaste teknologin till exakt allt. Alltid nya skripts och ramverk. Koden är skrivet dåligt och det är mest bara stackoverflow eller chatgbt struktur på allt
Som nämnts flera gånger i denna tråd: som C++ är definierat idag är det i flera fall omöjligt att enbart via statisk analys hitta minnesproblem i C++-kod.
Är just detta som Safe-C++ vill råda bot på, d.v.s. ta C++ dit Rust är där man inom en safe-delmängd av språket (som måste vara majoriteten av språket för att vara användbart i praktiken) där sådana garantier är möjliga redan vid kompilering.
Vad man kan göra är bl.a. det klk förslår ovanför: dagens kompilatorer har en rad flaggor, vissa "bryter" mot C++ "zero cost abstraction" mantra men kan p.g.a. av det ge (runtime) garantier som "vanlig" C++ saknar. De är flaggor just för att en sådan kostnad är OK för vissa, men otänkbart för andra.
Är det inte bara fritt fram och köra och kolla hur populärt Safe-C++ blir? Uppskattas det inte, ja, då vet vi det.
Genom att kombinera flera existerande clang-tidy tester kan man komma hyfsat nära profiler som safety och freestanding, i alla fall som de initialt är tänkt att fungera.
Bjarne verkar också tycka att på kort sikt är verktyg som clang-tidy det bäst man kan ta till
Kanske inte finns så mycket att välja på
Annars är LLM verktygen mycket användbara på sådant här. Personligen gillar jag inte alls verktyg som granskar kod under tiden man skriver, inte ens innan det skall checkas in. Det har mest och göra med att verktyg oftast är globalt inställda, alltså samma inställningar för all kod.
Stora projekt eller projekt som innehåller mycket olika saker, där fungerar inte den typen av inställningar speciellt bra. Speciellt som att även om CMake räknas som svårt, tar man bara sig över tröskeln så är det verktyget ovärderligt i och med flexibiliteten. Att ha över 50 olika executables i ett projekt är inte svårt. Exempelvis olika test applikationer, applikationer för att testa funktionalitet mm. Och CMake fungerar mycket bättre idag än för bara några år sedan, då vart det buggigt och inte alls lätt och hitta information.
LLM verktygen samt att utvecklingsmiljöer blivit så bra att jobba med CMake för att hantera projektens strukturer gör att det händer mycket, kvaliteten på kod byggd med CMake ökar snabbt och utvecklare blir bättre på att att följa "standarder" utan att miljön tvingar till att skriva kod på ett visst sätt.
LLM är också välkommet tillskott i att konfigurera kompilatorer mm. Personligen tycker jag sådant varit trist, man måste alltid googla och det blir fel och hit och dit. Ett tungt arbetsmoment som varit nödvändigt ont som nära nog försvunnit. Installationsskript, kopieringsskript, backupskript och liknande. Skriv text vad du vill göra och vips kan skripten genereras MED dokumentation.
Kanske inte finns så mycket att välja på
Annars är LLM verktygen mycket användbara på sådant här. Personligen gillar jag inte alls verktyg som granskar kod under tiden man skriver, inte ens innan det skall checkas in. Det har mest och göra med att verktyg oftast är globalt inställda, alltså samma inställningar för all kod.
Stora projekt eller projekt som innehåller mycket olika saker, där fungerar inte den typen av inställningar speciellt bra. Speciellt som att även om CMake räknas som svårt, tar man bara sig över tröskeln så är det verktyget ovärderligt i och med flexibiliteten. Att ha över 50 olika executables i ett projekt är inte svårt. Exempelvis olika test applikationer, applikationer för att testa funktionalitet mm. Och CMake fungerar mycket bättre idag än för bara några år sedan, då vart det buggigt och inte alls lätt och hitta information.
LLM verktygen samt att utvecklingsmiljöer blivit så bra att jobba med CMake för att hantera projektens strukturer gör att det händer mycket, kvaliteten på kod byggd med CMake ökar snabbt och utvecklare blir bättre på att att följa "standarder" utan att miljön tvingar till att skriva kod på ett visst sätt.
LLM är också välkommet tillskott i att konfigurera kompilatorer mm. Personligen tycker jag sådant varit trist, man måste alltid googla och det blir fel och hit och dit. Ett tungt arbetsmoment som varit nödvändigt ont som nära nog försvunnit. Installationsskript, kopieringsskript, backupskript och liknande. Skriv text vad du vill göra och vips kan skripten genereras MED dokumentation.
Att i efterhand är det ofta problematiskt att lägga på automatisk formatering, regler och granskning. Kodbaser som levt ett längre tag tenderar bli ett lapptäcke av kod från olika projekt och företag (uppköp). Sällan värt mödan att fixa till sådant.
Men det finns definitivt fördelar med linters som clang-tidy om man kör det från start och alla enas om samma tester. Att detta har ett stort värde i stora projekt var något Google tog vara på när Go togs fram. En annan observation som gjordes var att diskussioner kring kod-stil har en tendens att bli "religionskrig", utan egentlig substans i att någon modell är direkt bättre än någon annan.
Så i Go "löste" man problemet genom att helt enkelt diktera mycket av kodstil i standard-tooling:en. Då nästan alla som använder språket använder denna så har resultatet blivit nära nog global konsensus hur stilen ska se ut. Det är en väldigt trevlig egenskap att jobba i en sådan miljö i.m.n.s.h.o.
Rust har ingen standard-tooling på samma nivå som Go. Men där är ändå cargo och ett gäng verktyg kring detta i praktiken en standard (men lite mer opt-in). Standard-konfig när man kör VS Code är ändå att man får varningar om funktioner inte kör snake-case, väljer man att också kör cargo-clippy får man en rad saker man i C++ värden kan få via clang-tidy. Även det är värdefullt om det används då man får en kodbas som är mer uniform och därmed lättare för de inblandade att "känna igen sig i".
Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer
Well, i det här fallet är det ju trivialt att checka facit
$ git clone https://github.com/django/django.git
$ sloccount django
...
SLOC Directory SLOC-by-Language (Sorted)
253015 tests python=253015
107441 django python=107441
548 docs python=548
293 scripts python=293
0 extras (none)
0 js_tests (none)
0 top_dir (none)
Totals grouped by language (dominant language first):
python: 361297 (100.00%)
Total Physical Source Lines of Code (SLOC) = 361,297
Det skrivet så är ju "bara" 100k av rader del av produkten, 250k är tester.
HA
$ git clone https://github.com/home-assistant/core.git
$ sloccount core
...
SLOC Directory SLOC-by-Language (Sorted)
1069948 tests python=1069937,sh=11
860119 homeassistant python=860119
10463 script python=10324,sh=139
4019 pylint python=4019
28 rootfs sh=28
0 machine (none)
0 top_dir (none)
Totals grouped by language (dominant language first):
python: 1944399 (99.99%)
sh: 178 (0.01%)
Total Physical Source Lines of Code (SLOC) = 1,944,577
Här är 860k del av produkten och 1M är tester.
Skulle ändå säga: det är ju inte gigantiska produkter. Har på rätt mycket egen hand skrivit projekt i C där det ena var ~120k rader kod och det andra ca 300k rader. Båda som del i ett större projekt med åtskilliga miljoner rader. Hur hittar man saker där?
Har räknat lite med mitt lilla hemmasnickrade program (mest för att buggtesta)
Django fick den till 103.795 rader om den räknar rader in django mappen (antar att det är där allt för django ligger). Den räkna då faktiska kodrader, inte tomma rader, kommentarer eller strängar som sträcker sig över flera rader.
Här är bild, första kolumnen är totalt antal rader, andra är faktiska kodrader, sedan kommer antal programmerings tecken (enskilda tecken som fungerar variabler mm), sedan kommer antal kommentarer och sist antal strängar, resultatet är sorterat på totalt antal rader omvänt så störst antal i resultatet längst ner
Här är för HA fick jag totalt antal kodrader (ALLT) sett till python 1.951.029 men som du nämnde är det gigantiskt mycket testkod. Så om jag kör i mappen "homeassistant" vart det
Kan lägga upp koden för repot (mitt räkneprogram) men vet inte hur jag skall göra det anonymt
Angående python kod så blir det många rader så fort de använder dicts, verkar som att man som standar lägger varje värde på en rad
Här är annars hjälpfilen: https://jmp.sh/s/4RwaV4HvN1dDQiKY2ydG
Har räknat lite med mitt lilla hemmasnickrade program (mest för att buggtesta)
Django fick den till 103.795 rader om den räknar rader in django mappen (antar att det är där allt för django ligger). Den räkna då faktiska kodrader, inte tomma rader, kommentarer eller strängar som sträcker sig över flera rader.
Här är bild, första kolumnen är totalt antal rader, andra är faktiska kodrader, sedan kommer antal programmerings tecken (enskilda tecken som fungerar variabler mm), sedan kommer antal kommentarer och sist antal strängar, resultatet är sorterat på totalt antal rader omvänt så störst antal i resultatet längst ner
<Uppladdad bildlänk>
Här är för HA fick jag totalt antal kodrader (ALLT) sett till python 1.951.029 men som du nämnde är det gigantiskt mycket testkod. Så om jag kör i mappen "homeassistant" vart det
<Uppladdad bildlänk>
Kan lägga upp koden för repot (mitt räkneprogram) men vet inte hur jag skall göra det anonymt
Angående python kod så blir det många rader så fort de använder dicts, verkar som att man som standar lägger varje värde på en rad
Här är annars hjälpfilen: https://jmp.sh/s/4RwaV4HvN1dDQiKY2ydG
Nu börjar du återuppliva irrelevanta off-topic diskussioner. Jag tolkar att en moderator kom in och rensade off-topic inlägg som att vi bör hålla diskussionen till ämnet.
Men det finns definitivt fördelar med linters som clang-tidy om man kör det från start och alla enas om samma tester. Att detta har ett stort värde i stora projekt var något Google tog vara på när Go togs fram. En annan observation som gjordes var att diskussioner kring kod-stil har en tendens att bli "religionskrig", utan egentlig substans i att någon modell är direkt bättre än någon annan.
Det tror jag faktiskt är den huvudsakliga anledningen och jag förstår om de lägger in sådant här i stora företag där programmerare byter team eller kanske det byts ut utvecklare av andra orsaker på löpande band. De kan inte hålla speciellt hög kvalitet på grund av det och måste tvinga utvecklare att följa vissa standarder.
Men det är alltså inte samma sak som att det skulle vara bättre teknik, mer ett nödvändigt ont
Nu börjar du återuppliva irrelevanta off-topic diskussioner. Jag tolkar att en moderator kom in och rensade off-topic inlägg som att vi bör hålla diskussionen till ämnet.
Ok, ja då ryker den. Annars ganska intressant att räkna och analysera. Tog ner LadyBird browsern som blivit så het nyligen. Ett alternativ som utvecklas helt på egen kodbas, den ligger nu på runt 450.000 faktiska kodrader (inkluderat test men tror inte det var så mycket test där)
Passade på och titta på lite "rust" projekt och då på koden. La inte ner jättemycket tid på att hitta bra projekt utan valde ganska snabbt så reservation för det.
Två snabba reflektioner. Utvecklare i rust kommenterar inte koden, i de projekt jag tittade på var det mycket sparsmakat med kommentarer. Går också att se på resultatet av räknare, mängden kodrader skiljer sig inte så mycket från totalt antal rader.
Brukar själv ligga på nära 50% kommentarer nu med LLM, innan så inte under 25% av kodmassan som är kommentarer om det inte handlar mycket enkla saker. Tror LadyBird (browsern) låg på runt 35-40 procent kommentarer. Minns jag rätt var det nära 700 tusen rader kod totalt och knappt 450 tusen kodrader. Ofta är det kommentarer på samma rad
Det projekt som trendar mest av vad jag såg är editorn som kallas zed. Koden där är inte rolig. Gott om metoder som tar massor av argument och djupa nästningar samt så kallade "message chains". De som skrivit den koden har troligen skrivit några editorer tidigare för sådan kod är mer eller mindre omöjlig att refaktorera. De vet vad de skall göra men kanske är mindre bra på att skriva flexibel kod.
Skall söka lite mer i morgon om det går att hitta bra rust kod för i vad jag såg är detta inget "hot" om det handlar om tävlingen snart dör C++. Projekten är små och av det jag såg höll koden låg kvalitet (de räddas säkert av att rust har så mycket regler)
Resultat (klippt)
## zed - https://github.com/zed-industries/zed
folder filename count code characters
comment
string
+--------------------------------------------------------+----------------------------+--------+--------+----------+-------+--------+
| D:\dev\investigate\zed-main\crates\project_panel\src | project_panel_tests.rs | 5329 | 4679 | 72097 | 77 | 2420 |
| D:\dev\investigate\zed-main\crates\worktree\src | worktree.rs | 5585 | 4770 | 110159 | 243 | 130 |
| D:\dev\investigate\zed-main\crates\outline_panel\src | outline_panel.rs | 6902 | 6143 | 138060 | 15 | 207 |
| D:\dev\investigate\zed-main\crates\collab\src\tests | integration_tests.rs | 6941 | 5950 | 137334 | 251 | 1213 |
| D:\dev\investigate\zed-main\crates\multi_buffer\src | multi_buffer.rs | 7832 | 6904 | 174452 | 135 | 62 |
| D:\dev\investigate\zed-main\crates\project\src | project_tests.rs | 8856 | 7665 | 154560 | 230 | 1789 |
| D:\dev\investigate\zed-main\crates\editor\src | element.rs | 9651 | 8626 | 212560 | 207 | 62 |
| D:\dev\investigate\zed-main\crates\workspace\src | workspace.rs | 9656 | 8508 | 199123 | 226 | 219 |
| D:\dev\investigate\zed-main\crates\project\src | lsp_store.rs | 10506 | 9627 | 220909 | 137 | 293 |
| D:\dev\investigate\zed-main\crates\editor\src | editor_tests.rs | 20112 | 12971 | 306878 | 460 | 2217 |
| D:\dev\investigate\zed-main\crates\editor\src | editor.rs | 21623 | 19234 | 469117 | 320 | 258 |
| Total: | | 808237 | 664143 | 14665454 | 26803 | 110740 |
+--------------------------------------------------------+----------------------------+--------+--------+----------+-------+--------+
## lapce - https://github.com/lapce/lapce
folder filename count code characters
comment
string
+-----------------------------------------------------------+------------------+-------+-------+---------+------+------+
| D:\dev\investigate\lapce-master\lapce-core\src | language.rs | 2054 | 1930 | 35204 | 57 | 471 |
| D:\dev\investigate\lapce-master\lapce-app\src | doc.rs | 2243 | 1884 | 41993 | 149 | 12 |
| D:\dev\investigate\lapce-master\lapce-app\src\editor | view.rs | 2667 | 2384 | 51389 | 75 | 24 |
| D:\dev\investigate\lapce-master\lapce-app\src | window_tab.rs | 2996 | 2779 | 59294 | 50 | 65 |
| D:\dev\investigate\lapce-master\lapce-app\src | main_split.rs | 3100 | 2871 | 62702 | 26 | 19 |
| D:\dev\investigate\lapce-master\lapce-app\src | editor.rs | 3899 | 3545 | 76385 | 81 | 25 |
| D:\dev\investigate\lapce-master\lapce-app\src | app.rs | 4304 | 4115 | 88306 | 34 | 182 |
| Total: | | 72208 | 63147 | 1286689 | 1741 | 6675 |
+-----------------------------------------------------------+------------------+-------+-------+---------+------+------+
## rustdesk - https://github.com/rustdesk/rustdesk
folder filename count code characters
comment
string
+---------------------------------------------------------------------------+-----------------------------+--------+--------+---------+------+-------+
| D:\dev\investigate\rustdesk-master\src | ipc.rs | 1423 | 1321 | 27587 | 32 | 237 |
| D:\dev\investigate\rustdesk-master\src\platform | linux.rs | 1516 | 1261 | 22937 | 54 | 193 |
| D:\dev\investigate\rustdesk-master\src | ui_interface.rs | 1524 | 1360 | 28679 | 21 | 358 |
| D:\dev\investigate\rustdesk-master\src | common.rs | 1848 | 1645 | 39214 | 39 | 215 |
| D:\dev\investigate\rustdesk-master\src\server | input_service.rs | 1864 | 1548 | 35529 | 85 | 139 |
| D:\dev\investigate\rustdesk-master\src | ui_session_interface.rs | 1930 | 1731 | 39446 | 30 | 164 |
| D:\dev\investigate\rustdesk-master\src | flutter.rs | 2265 | 1950 | 41120 | 119 | 357 |
| D:\dev\investigate\rustdesk-master\src\client | io_loop.rs | 2341 | 2227 | 48287 | 56 | 296 |
| D:\dev\investigate\rustdesk-master\src | flutter_ffi.rs | 2704 | 2324 | 56789 | 50 | 366 |
| D:\dev\investigate\rustdesk-master\src\platform | windows.rs | 3462 | 2836 | 59164 | 129 | 544 |
| D:\dev\investigate\rustdesk-master\src | client.rs | 3709 | 3168 | 70774 | 355 | 508 |
| D:\dev\investigate\rustdesk-master\src\server | connection.rs | 4473 | 4190 | 92702 | 94 | 536 |
| Total: | | 111779 | 100603 | 1594141 | 3240 | 73357 |
+---------------------------------------------------------------------------+-----------------------------+--------+--------+---------+------+-------+
Passade på och titta på lite "rust" projekt och då på koden. La inte ner jättemycket tid på att hitta bra projekt utan valde ganska snabbt så reservation för det.
Två snabba reflektioner. Utvecklare i rust kommenterar inte koden, i de projekt jag tittade på var det mycket sparsmakat med kommentarer. Går också att se på resultatet av räknare, mängden kodrader skiljer sig inte så mycket från totalt antal rader.
Brukar själv ligga på nära 50% kommentarer nu med LLM, innan så inte under 25% av kodmassan som är kommentarer om det inte handlar mycket enkla saker. Tror LadyBird (browsern) låg på runt 35-40 procent kommentarer. Minns jag rätt var det nära 700 tusen rader kod totalt och knappt 450 tusen kodrader. Ofta är det kommentarer på samma rad
Det projekt som trendar mest av vad jag såg är editorn som kallas zed. Koden där är inte rolig. Gott om metoder som tar massor av argument och djupa nästningar samt så kallade "message chains". De som skrivit den koden har troligen skrivit några editorer tidigare för sådan kod är mer eller mindre omöjlig att refaktorera. De vet vad de skall göra men kanske är mindre bra på att skriva flexibel kod.
Skall söka lite mer i morgon om det går att hitta bra rust kod för i vad jag såg är detta inget "hot" om det handlar om tävlingen snart dör C++. Projekten är små och av det jag såg höll koden låg kvalitet (de räddas säkert av att rust har så mycket regler)
Resultat (klippt)
## zed - https://github.com/zed-industries/zed
folder filename count code characters
comment
string
+--------------------------------------------------------+----------------------------+--------+--------+----------+-------+--------+
| D:\dev\investigate\zed-main\crates\project_panel\src | project_panel_tests.rs | 5329 | 4679 | 72097 | 77 | 2420 |
| D:\dev\investigate\zed-main\crates\worktree\src | worktree.rs | 5585 | 4770 | 110159 | 243 | 130 |
| D:\dev\investigate\zed-main\crates\outline_panel\src | outline_panel.rs | 6902 | 6143 | 138060 | 15 | 207 |
| D:\dev\investigate\zed-main\crates\collab\src\tests | integration_tests.rs | 6941 | 5950 | 137334 | 251 | 1213 |
| D:\dev\investigate\zed-main\crates\multi_buffer\src | multi_buffer.rs | 7832 | 6904 | 174452 | 135 | 62 |
| D:\dev\investigate\zed-main\crates\project\src | project_tests.rs | 8856 | 7665 | 154560 | 230 | 1789 |
| D:\dev\investigate\zed-main\crates\editor\src | element.rs | 9651 | 8626 | 212560 | 207 | 62 |
| D:\dev\investigate\zed-main\crates\workspace\src | workspace.rs | 9656 | 8508 | 199123 | 226 | 219 |
| D:\dev\investigate\zed-main\crates\project\src | lsp_store.rs | 10506 | 9627 | 220909 | 137 | 293 |
| D:\dev\investigate\zed-main\crates\editor\src | editor_tests.rs | 20112 | 12971 | 306878 | 460 | 2217 |
| D:\dev\investigate\zed-main\crates\editor\src | editor.rs | 21623 | 19234 | 469117 | 320 | 258 |
| Total: | | 808237 | 664143 | 14665454 | 26803 | 110740 |
+--------------------------------------------------------+----------------------------+--------+--------+----------+-------+--------+
## lapce - https://github.com/lapce/lapce
folder filename count code characters
comment
string
+-----------------------------------------------------------+------------------+-------+-------+---------+------+------+
| D:\dev\investigate\lapce-master\lapce-core\src | language.rs | 2054 | 1930 | 35204 | 57 | 471 |
| D:\dev\investigate\lapce-master\lapce-app\src | doc.rs | 2243 | 1884 | 41993 | 149 | 12 |
| D:\dev\investigate\lapce-master\lapce-app\src\editor | view.rs | 2667 | 2384 | 51389 | 75 | 24 |
| D:\dev\investigate\lapce-master\lapce-app\src | window_tab.rs | 2996 | 2779 | 59294 | 50 | 65 |
| D:\dev\investigate\lapce-master\lapce-app\src | main_split.rs | 3100 | 2871 | 62702 | 26 | 19 |
| D:\dev\investigate\lapce-master\lapce-app\src | editor.rs | 3899 | 3545 | 76385 | 81 | 25 |
| D:\dev\investigate\lapce-master\lapce-app\src | app.rs | 4304 | 4115 | 88306 | 34 | 182 |
| Total: | | 72208 | 63147 | 1286689 | 1741 | 6675 |
+-----------------------------------------------------------+------------------+-------+-------+---------+------+------+
## rustdesk - https://github.com/rustdesk/rustdesk
folder filename count code characters
comment
string
+---------------------------------------------------------------------------+-----------------------------+--------+--------+---------+------+-------+
| D:\dev\investigate\rustdesk-master\src | ipc.rs | 1423 | 1321 | 27587 | 32 | 237 |
| D:\dev\investigate\rustdesk-master\src\platform | linux.rs | 1516 | 1261 | 22937 | 54 | 193 |
| D:\dev\investigate\rustdesk-master\src | ui_interface.rs | 1524 | 1360 | 28679 | 21 | 358 |
| D:\dev\investigate\rustdesk-master\src | common.rs | 1848 | 1645 | 39214 | 39 | 215 |
| D:\dev\investigate\rustdesk-master\src\server | input_service.rs | 1864 | 1548 | 35529 | 85 | 139 |
| D:\dev\investigate\rustdesk-master\src | ui_session_interface.rs | 1930 | 1731 | 39446 | 30 | 164 |
| D:\dev\investigate\rustdesk-master\src | flutter.rs | 2265 | 1950 | 41120 | 119 | 357 |
| D:\dev\investigate\rustdesk-master\src\client | io_loop.rs | 2341 | 2227 | 48287 | 56 | 296 |
| D:\dev\investigate\rustdesk-master\src | flutter_ffi.rs | 2704 | 2324 | 56789 | 50 | 366 |
| D:\dev\investigate\rustdesk-master\src\platform | windows.rs | 3462 | 2836 | 59164 | 129 | 544 |
| D:\dev\investigate\rustdesk-master\src | client.rs | 3709 | 3168 | 70774 | 355 | 508 |
| D:\dev\investigate\rustdesk-master\src\server | connection.rs | 4473 | 4190 | 92702 | 94 | 536 |
| Total: | | 111779 | 100603 | 1594141 | 3240 | 73357 |
+---------------------------------------------------------------------------+-----------------------------+--------+--------+---------+------+-------+
Tycker du detta har något med "C++ och dess framtid att programmera minnessäkert - Hur går utvecklingen?" att göra?
Tycker du detta har något med "C++ och dess framtid att programmera minnessäkert - Hur går utvecklingen?" att göra?
Diskussionen om "C++ och minnessäkerhet" handlar mycket om hur C++ kan lära sig av Rust. Jag har aldrig kört Rust, men jag har hört att utvecklingstiden är betydligt högre hos Rust än hos C++.
Diskussionen om "C++ och minnessäkerhet" handlar mycket om hur C++ kan lära sig av Rust. Jag har aldrig kört Rust, men jag har hört att utvecklingstiden är betydligt högre hos Rust än hos C++.
Rust är ett alternativ men det som @klk håller på med är att upprepa samma missförstånd gällande Rust i någon mentalgymnastik för att rättfärdiga C++ eftersom @klk verkar tro att det är en tävling mellan språk. Det är samma saker som @klk drar upp om och om igen... python, kodrader, kommentarer, method-chaining, saker som är utanför ämnet.
Om du ska utveckla ett projekt åt en kund som specificerat att projektet ska vara implementerat i ett minnessäkert språk. Skriv C++ och ta sedan diskussionen mot kunden om dom anser att C++ inte är minnessäkert. Personligen hade jag inte valt C++ utan Rust eller Go.
Det projekt som trendar mest av vad jag såg är editorn som kallas zed. Koden där är inte rolig. Gott om metoder som tar massor av argument och djupa nästningar samt så kallade "message chains". De som skrivit den koden har troligen skrivit några editorer tidigare för sådan kod är mer eller mindre omöjlig att refaktorera. De vet vad de skall göra men kanske är mindre bra på att skriva flexibel kod.
Om man tar en sample-size på 1 kan man "bevisa" exakt vad som helst i stort sätt var som helst... Enda potentiellt relevanta Zed tillför är att det (vad jag får fram när jag läser om projektet) visar att en sak Rust kan användas som är, likt bl.a. C och C++, högpresterande applikationer. Aldrig använt Zed, men det som lyfts fram är att det är en text-redigerare som håller väldigt hög prestanda även när fil(erna) som redigeras är gigantiska.
Vill du se exempel på idiomatisk Rust som också visar hur man dels kan skriva inom ramen för, just nu, bästa tänkbara skydd mot minnes-osäker kod kan du kika på t.ex.
https://github.com/tkaitchuck/aHash - Hashset/map som är API kompatibel med den i std:rust, fast med klart bättre prestanda
https://github.com/serde-rs/serde - väldigt bra exempel på hur "traits" kan användas väldigt ortogonalt mot andra saker ett bibliotek gör där serde "bara" tillför möjligheten att serialisera/deserialisera dina datastrukturer till JSON, YAML, CSV, Pickle, eller vad det nu må vara. Det på ett högt effektivt och minnes-säkert sätt
https://github.com/rayon-rs/rayon - min favorit då det man uppnår här är på flera sätt helt makalöst, fångar data-race compile-time. Finns få saker som är svårare att få rätt i modern programmering än just concurrency-problem.
Alla dessa tre är saker som inte är del av standardbiblioteket, men som alla är väldigt populära "crates" som alla har 100-tals miljoner nedladdningar. De är alla också utvecklare med idiomatisk Rust.
Diskussionen om "C++ och minnessäkerhet" handlar mycket om hur C++ kan lära sig av Rust. Jag har aldrig kört Rust, men jag har hört att utvecklingstiden är betydligt högre hos Rust än hos C++.
Ett uttalande som "tar betydligt längre tid att utveckla i X jämfört med Y" saknar väldigt mycket kritiskt kontext. Klart det är sant om några som primärt jobbat med X testar att göra något av liknande komplexitet i Y, innan de lärt sig Y kommer det vara svårare/långsammare.
Sen kommer "problemet" som diskutera här från observationen att C++ (och även C) står för en förkrossande stor andel av en specifik klass av buggar. Tror det tar rätt mycket längre tid att få C++ till samma kvalité på den punkten som motsvarande Rust, om det ens är praktiskt möjligt (vilket är det Bjarne et.al. vill visa att det är, för annars kommer C++ bli portat från att fler områden).
Rust är ett alternativ men det som @klk håller på med är att upprepa samma missförstånd gällande Rust i någon mentalgymnastik för att rättfärdiga C++ eftersom @klk verkar tro att det är en tävling mellan språk. Det är samma saker som @klk drar upp om och om igen... python, kodrader, kommentarer, method-chaining, saker som är utanför ämnet.
Om du ska utveckla ett projekt åt en kund som specificerat att projektet ska vara implementerat i ett minnessäkert språk. Skriv C++ och ta sedan diskussionen mot kunden om dom anser att C++ inte är minnessäkert. Personligen hade jag inte valt C++ utan Rust eller Go.
Skulle i.o.f.s. hävda att Rust har en liten särställning i raden av "språk som ska döda C++"...
Det är sant att lite väl många sagt något likt ovan. Ingen har så här långt "dödat" C++. Givet hur mycket som redan är skrivet i C++ och kommer fortsättas användas under överskådlig tid lär inget döda C++ (inget har ju lyckas döda Cobol så här långt...).
Man kan se det från en liten annan vinkel: det är rätt många områden där C++ skulle varit ett självklart val för de flesta under 90-talet som idag i praktiken helt är ersatt av Java och C#. Så för en lång rad områden "dödade" Java/C# C++, men samtidigt finns områden där Java/C# inte var en bättre lösning.
Samma med Go. Google skapade Go specifikt för att ersätta fall där de vid tidpunkten använde C++, men där de såg stora skalbarhetsproblem med C++ både p.g.a. av dess extrema komplexitet (inte positivt när man har väldigt stora och många team) samt den enorma storleken på kodbaser (kompileringstiderna var direkt horribla, mem:et är ju att första versionen av Go skrevs medan de 3 skaparna väntade på att deras C++ projekt skulle kompilera klart).
Go har sedan haft betydligt inflöde från Python, C# och Java än från C++. Nischen detta språk fyller är microservices, molntjänster och C++ har man nog primärt "ersatt" (i.e. är nog det vanligare valet idag) som språk för CLI-verktyg.
Det unika med Rust är att det nog är första språk som har ett nära 100 % överlapp med C++ i att vara topp-valet för de nischer där C++ idag fortfarande är topp-valet. Tror det är något gör att vissa inom C++-världen ser en större rivalitet mellan dessa två språk än vad man sett innan.
Men inte ens Rust lär "döda" C++. Däremot kan det ju bli en rätt snabb minskning av C++-användning om så viktiga institutioner som USA och EU mer eller mindre säger: ni får ha väldigt bra på fötterna kring varför C++ alls bör användas om organisationer vi direkt hanterar är kunden. Är väl just den delen Bjarnes "call to action" riktar sig mot.
Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer
- Problem med låg mikrofon (Trådlöst HyperX)0
- Ingen respons från Webhallen190
- AMD lägger ned styrkretsen B65014
- Nestad vy i forumtrådar0
- Vilken film såg du senast?15k
- Vilken alkoholhaltig dryck dricker ni just nu?6,4k
- Räcker 850W eller bör jag satsa på 1000W?2
- Hur ser eran OLED monitor ut idag?10
- Likvärdig Titan X?4
- Microsoft Authenticator slutar med lösenord19
- Säljes Ryzen 5800x, RX 6700XT, i3 13100F moderkort osv
- Säljes iPad Air 13 Wi-Fi 128GB Space Gray
- Köpes Stereoförstärkare med fjärrkontroll
- Säljes Dell Precision 5540 14" i9-9980HK/32GB/512GB/NVIDIA Quadra T2000 2GB
- Köpes TV 55" - 65" köpes!
- Säljes Samsung Odyssey G5 – 34" WQHD (3440x1440)
- Säljes Lenovo Thinkpad P1 Gen 4 | i7 11th gen | RTX A2000
- Säljes HP DL380 G9 28 cores 256GB RAM
- Köpes Grafikkort och mITX moderkort.
- Säljes LG 27" IPS QHD
- AMD lägger ned styrkretsen B65014
- Noctua: Vi vill göra RTX 509020
- AMD läckte FSR 4-kod - stöd för äldre kort kan vara på väg14
- Populär Chrome-VPN avslöjad - spionerar på användare90
- 5K2K-upplösning vid 180 Hz i ny Samsung-skärm36
- Microsoft bekräftar SSD-problem30
- Gigabyte lanserar externt RTX 5090 med vätskekylning12
- Quiz: Vad är det för hårdvarumojäng på bilden?95
- Microsoft minskar spelladdningsstid med 85 procent9
- Sårbarhet i flera populära lösenordshanterare69
Externa nyheter
Spelnyheter från FZ