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

Permalänk
Medlem
Skrivet av klk:

Tror du utvecklare kommer lära sig om de uppfattar kritik som gnäll? Här har du en stor orsak till varför många programmerare inte lär sig.

Dom varit igång i 10 månader och får in patchar typ varje dag. Vad är kritiken, att det går långsamt? Jag tycker inte det går långsamt.

Vad har detta med att lärande att göra? Du gnäller om att det går långsamt, det är ju inget konstruktivt och knappast kritik värd att lära sig från. Du bara slänger ur dig sådant för att du sa något dumt och mötte motstånd.

Skrivet av klk:

Mycket viktigare för säker kod än att bygga in regler i verktyg

Nope, att lyssna på någon som säger "det går långsamt" utan inblick i projektet, komplexiteten och som inte kommer med något konstruktivt är inte viktigt ur någon aspekt och borde enbart ignoreras.

Permalänk

Nya C++26. Vad för åtgärder kommer denna innehålla då?

Permalänk
Medlem
Skrivet av heretic16:

Nya C++26. Vad för åtgärder kommer denna innehålla då?

Beror på vad man är ute efter men det stora med C++26 (som ser ut och bli en mycket stor uppgradering) är enligt mig kanske inte det nya utan förbättringar i det som finns som gör det så mycket mer användbart. Räknar då in en del i C++23 för normalt tar det ett tag innan det går att använda det nyaste. Vi har fortfarande problem och använda saker i C++20 eftersom många typer av instanser i olika molnlösningar har fasligt svårt att hänga med. Kod kan till och med ha svårt att kompileras med C++17 som lägsta nivå.

Följande går nog att relatera till säkerhet. Enklare och/eller mindre kod för samma sak.

Förbättringar rörande områden constexpr och concepts som tar ner svårighetsgraden tror jag kommer uppskattas. Man behöver inte längre vara en ninja på templates för att lyckas skriva "cool" kod. Det som tidigare krävde detaljerad kunskap i hur C++ fungerar blir enklare. Mer och mer går att lösa utan templates.
Personligen så förbättringarna överlagring av index operatorn (multidimensional subscript operators) är efterlängtat, skrivs mycket beräkningskod går den och göra snyggare och enklare. Tills nu är det en hel del trixande för att få till sådan kod.
Deducing this kanske äntligen stöds av alla vanliga kompilatorer, en C++23 funktionalitet som tagit tid för dem att fixa. Gör det enklare att skriva en hel del kod men ser lite ovant ut

De två stora nyheterna med C++26 är annars reflection och contracts. Säkerhetsmässigt är contracts som hjälper, kommer säkert ta över mycket från assert och ser snyggare ut med förbättringar.
Kommer en ny header kallad <debugging>, känner inte till vad den är till för.

Permalänk
Skrivet av klk:

Beror på vad man är ute efter men det stora med C++26 (som ser ut och bli en mycket stor uppgradering) är enligt mig kanske inte det nya utan förbättringar i det som finns som gör det så mycket mer användbart. Räknar då in en del i C++23 för normalt tar det ett tag innan det går att använda det nyaste. Vi har fortfarande problem och använda saker i C++20 eftersom många typer av instanser i olika molnlösningar har fasligt svårt att hänga med. Kod kan till och med ha svårt att kompileras med C++17 som lägsta nivå.

Följande går nog att relatera till säkerhet. Enklare och/eller mindre kod för samma sak.

Förbättringar rörande områden constexpr och concepts som tar ner svårighetsgraden tror jag kommer uppskattas. Man behöver inte längre vara en ninja på templates för att lyckas skriva "cool" kod. Det som tidigare krävde detaljerad kunskap i hur C++ fungerar blir enklare. Mer och mer går att lösa utan templates.
Personligen så förbättringarna överlagring av index operatorn (multidimensional subscript operators) är efterlängtat, skrivs mycket beräkningskod går den och göra snyggare och enklare. Tills nu är det en hel del trixande för att få till sådan kod.
Deducing this kanske äntligen stöds av alla vanliga kompilatorer, en C++23 funktionalitet som tagit tid för dem att fixa. Gör det enklare att skriva en hel del kod men ser lite ovant ut

De två stora nyheterna med C++26 är annars reflection och contracts. Säkerhetsmässigt är contracts som hjälper, kommer säkert ta över mycket från assert och ser snyggare ut med förbättringar.
Kommer en ny header kallad <debugging>, känner inte till vad den är till för.

Ge ett exempel på contracts i C++26.
Kul att reflektioner kommer till C++! Helt klart ett måste.

Permalänk
Datavetare
Skrivet av heretic16:

Nya C++26. Vad för åtgärder kommer denna innehålla då?

Feature freeze är passerat för C++26, det möte som ska fast ställa de sista detaljerna hålls i Bulgarien/Sofia i juni.

Det som fortfarande är lite frågetecken kring är exakt vad kring "profiles" som kommer att vara med i C++26. Verkar som det blir väldigt lite, det som Bjarne var upprörd över för en tid sedan.

Annars är det som @klk skriver ovan, de stora sakerna är contracts och reflection.

Lyssande precis på avsnittet om libstdc++ hos CppCast: https://cppcast.com/libstdcpp/
Det belyser ett annat problem C++ har m.a.p. att agera kring minnessäkerhet.

Varje sig libstdc++ (GCC, används som förval på Linux även om man kör Clang) eller libc++ (Clang/LLVM, används som förval på MacOS även om man kör GCC) har idag en fullständig implementation av något efter C++17(!). Målet för libstdc++ är att ha fullt C++20 stöd innan C++26 spikas i slutet av 2026.

Och tyvärr är det mer än smådetaljer. Skrev ett par rätt enkla testprogram för Coroutines (C++20), std::execution (C++17/20) och använda en sådan enkel sak som std::print (C++23). Stötte på problem i alla dessa exempel med att lyckas bygga/köra ett omdifierat program som använder dessa saker på Linux (testade GCC/Clang och libstd++/libc++) och MacOS (testade Clang/GCC med libc++).

Detta problem har lyfts av många. Det tar väldigt många år från att en C++ standard idag spikas till att den faktiskt går att räkna med i programvara som måste vara portabel.

Rust, Go, C# och TS har alla "fördelen" av att nya standarder rätt mycket stöds dag #1 vid release. En orsak där är att man stoppar in saker i standarden som man redan implementerat och testat i den enda toolchain man har (vilket i sig kan vara ett problem).

Java fyllde precis 30 år. Där kommer en ny version varje år och en "LTS" var 3:e år likt som för ISO C++. Frågan är varför Java-gänget verkar kunna hålla flertalet toolchains rätt nära standarden trots samma kadens som ISO C++? Likt .NET har ju Java ett enormt standardbibliotek som fortsätter växa. Likt C++ läggs inte supermycket till i språket, men likt C++ händer ändå en del fortfarande.

Visa signatur

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

Permalänk
Skrivet av Yoshman:

Java fyllde precis 30 år. Där kommer en ny version varje år och en "LTS" var 3:e år likt som för ISO C++. Frågan är varför Java-gänget verkar kunna hålla flertalet toolchains rätt nära standarden trots samma kadens som ISO C++? Likt .NET har ju Java ett enormt standardbibliotek som fortsätter växa. Likt C++ läggs inte supermycket till i språket, men likt C++ händer ändå en del fortfarande.

För att C++ är styrt av ISO...segt...trött...byråkrati...dokumentation....surt folk....papper....
Skulle man driva C++ som det vore ett börsnoterat företag, så skulle C++ vara det bästa språket någonsin. Men utvecklarna hade fått lida under massvis med chefer som stampar och skickar hotmeddelanden om uppsägningar för minsta lilla fel.

Java är väll ett språk som drivs som affärsintresse. Jag skulle lätt kunna säga att OM java kunde tala med hårdvara lika lätt som C/C++ kan...då hade Java varit världens bästa språk. Java kan ju allt. Enormt språk.

Personligen tycker jag att minnessäkerhet verkar vara ett litet problem. Jag haft ofta problem med att jag överindexerar arrayer/vektorer i C++. Men när det kommer till objekt så använder jag ALLTID smarta pekare. Finns ingen anledning att använda vanliga pekare idag. 0% anledning. Kasta bort kunskapen att hantera vanliga pekare i C++. Det är C språk!

Permalänk
Medlem
Skrivet av heretic16:

För att C++ är styrt av ISO...segt...trött...byråkrati...dokumentation....surt folk....papper....

C++ standarden styrs av ISO. Men det är inte så himla mycket byråkrati runt framtagandet av standarden. Det som tar tid är snarare att få folk att komma överens.

De olika implementationerna av C++ och dess bibliotek har ISO däremot ingenting alls att göra med. Vilket kanske är en del av problemet.
De som jobbar med C++ kompilatorerna och biblioteken verkar inte ha någon större brådska eller intresse av att faktiskt förverkliga alla finesser och nyheter som folket i standardiseringskommittén hittat på, plus att en del av nyheterna kan visa sig lite svårare än förväntat att implementera.

På ett sätt var det bättre förr för C och C+. I början så experimenterade kompilatortillverkarna hej vilt med olika utökningar och tillägg till språken, varpå standardiseringsfolket tog med ett urval av till standarden. På det sättet fanns mycket av nyheterna i standarden redan implementerat i verkligheten.
Men sen, när det fanns en etablerad standard, så blev både kompilatorutvecklare och användare negativt inställda till icke-standardiserade utökningar, och så hamnade vi i dagens situation.

Permalänk
Medlem
Skrivet av heretic16:

Ge ett exempel på contracts i C++26.
Kul att reflektioner kommer till C++! Helt klart ett måste.

Frågade AI för vad jag vet så är contracts på vippen att vara färdigt, inte säker på att de spikat syntaxen men fick liknande exempel av AI

double square_root(double dX) pre (dX >= 0.0) // Precondition: Input must be non-negative post (r: r >= 0.0 && std::abs(r * r - dx) < 0.0001) // Postcondition: Result is non-negative and approximates sqrt(x) { contract_assert(dX >= 0.0); // Redundant assertion for demonstration return std::sqrt(dX); }

Det lilla r skall tydligen representera resultatvärdet. Tolkar jag rätt så standardiserar de makrot assert och gör det mer användbart.

Med contracts tycker jag nog att det finns än mer behov av att införa en till feature och det är att kunna skriva deklarationer och delar av definitioner av kod på flera ställen. Nu kan man deklarera så mycket om en metod för att kompilatorn skall veta hur den kan hantera och göra med metoden och det blir kladdigt. Det fyller inte så mycket av värde för programmerare när de läser koden och gör det hela krångligare. Exempelvis låter jag bli och använda attrbibutes av den anledningen. Vill gärna ha ett ställe där det är läsvänligt och då bara på det som behövs för att använda koden. Många kritiserar C++ för att de har en separat header (separering av deklaration och definition). Fattar inte det för det är bland det bästa i språket. Enligt mig är det mycket jobbigare att arbeta med kod där allt är samlat.

Permalänk
Medlem
Skrivet av heretic16:

Java är väll ett språk som drivs som affärsintresse. Jag skulle lätt kunna säga att OM java kunde tala med hårdvara lika lätt som C/C++ kan...då hade Java varit världens bästa språk. Java kan ju allt. Enormt språk.

Delar kanske inte åsikten om att Java är något bra, java har en del mycket allvarliga designmissar (exempelvis allt är ett objekt...)

Men det du skriver om affärsintresse tycker jag ändå är viktigt att förstå, hur mycket inom it som handlar om affärsintresse för enligt mig så detta med säkerhetsproblem i C/C++ är enligt mig ett försök från affärsintressen att slå mot C/C++ eftersom det är ett språk som inte är "kontrollerat".

De största IT bolagen har samma ägarstrukturer så de jobbar ihop

Permalänk
Medlem
Skrivet av klk:

Delar kanske inte åsikten om att Java är något bra, java har en del mycket allvarliga designmissar (exempelvis allt är ett objekt...)

Men det du skriver om affärsintresse tycker jag ändå är viktigt att förstå, hur mycket inom it som handlar om affärsintresse för enligt mig så detta med säkerhetsproblem i C/C++ är enligt mig ett försök från affärsintressen att slå mot C/C++ eftersom det är ett språk som inte är "kontrollerat".

De största IT bolagen har samma ägarstrukturer så de jobbar ihop

Kan väl hålla med om att affärsintresse ligger bakom det men av felanledningar. Säkerhet kommer aldrig att generera nya intäktsströmmar som nya features/tjänster/produkter utan möjligen enbart spara pengar så företag väljer att hellre satsa på garanterad vinst mot möjliga lågriskförluster.

Nu när det kommer/kommit striktare lagkrav som i större utsträckning håller företagen ansvariga så har vågskålen balanserats om något och det är inte samma låga risker som tidigare.

Jag hade hellre sett att medmänsklighet och större respekt för personlig säkerhet/integritet hade styrt detta än rena kapitalistiska incitament. Känns inte som att något utvecklas med målet att bli den bästa möjliga produkten längre utan allt ska kramas ur för att maximera vinsterna.

Permalänk
Medlem
Skrivet av orp:

Kan väl hålla med om att affärsintresse ligger bakom det men av felanledningar. Säkerhet kommer aldrig att generera nya intäktsströmmar som nya features/tjänster/produkter utan möjligen enbart spara pengar så företag väljer att hellre satsa på garanterad vinst mot möjliga lågriskförluster.

Tror nog att säkerhet är lönsamt för att inte säga extremt lönsamt. Något de flesta företag lägger väldigt mycket pengar på

Senaste miljardföretaget från Sverige "recorded future"
https://www.investingothenburg.com/news/all-news/gothenburg-b...

Permalänk
Medlem
Skrivet av klk:

Tror nog att säkerhet är lönsamt för att inte säga extremt lönsamt. Något de flesta företag lägger väldigt mycket pengar på

Senaste miljardföretaget från Sverige "recorded future"
https://www.investingothenburg.com/news/all-news/gothenburg-b...

Nu, ja. Jag insåg att jag var aningen otydlig. Jag syftade på för ca 10 år sedan och tidigare än så. Då spenderade företag hellre på utveckla nya features än att satsa på gedigen säkerhet.

De flesta företag som jag jobbat på har tagit säkerhet på stort allvar och var i en ganska bra position när CRA introducerades men jag har varit på ett som fick eld i baken först när dom insåg att CRA höll på att bli verklighet.

Oavsett jag håller med om att affärsintresse genom politiken (i sin tur pga omvärldsläget) spätt säkerhetsfokuset som pushar för minnessäkra språk.

Permalänk
Datavetare

Har hänt en del relaterat till detta under sommaren.

Dels har US Cybersecurity and Infrastructure Security Agency (CISA) och National Security Agency (NSA) återupprepat sitt budskap att man bör ha en plan för att gå till "minnes-säkra" språk.

https://www.theregister.com/2025/06/27/cisa_nsa_call_formemor...
https://media.defense.gov/2025/Jun/23/2003742198/-1/-1/0/CSI_...

Man tar upp Android som ett exempel på vilken effekt det kan ha att ta steget

"In 2019, memory safety issues accounted for 76% of all Android vulnerabilities—typical for projects predominantly developed in memory-unsafe languages."

Recognizing the high concentration of memory-related vulnerabilities in new code, the Android team made a strategic decision to prioritize MSLs, specifically Rust and Java, for all new development.

"By 2024, memory safety vulnerabilities had plummeted to 24% of the total, representing an improvement that had not been seen with previous approaches to memory safety. This success underscores the effectiveness of MSLs in proactively building a more secure foundation for software."

Vidare har C++26 spikats. Var faktiskt ovisst in i det sista om reflection skulle komma med, det hängde på röstningen i sista mötet. Det kom med

Mer relaterat till tråden: verkar "security profiles" inte kommit med. Herb Sutter nämner det inte alls i sin trip report från sista ISO C++ mötet. Detta har nämnts i tidigare "trip reports" och Bjarne var lite orolig att då man drog i lite olika riktningar kring detta så så var det inte självklart att detta skulle komma med.

Finns (minst) två läger kring var man ska gå, det andra populära som också föreslagits som framtida ISO C++ standard är det från Sean Baxter: Safe C++.

Sen en annan lite mindre sak. En käpphäst för C++ är "zero cost abstractions". Visat sig att definitionen av ABI för Windows x86_64 gör tyvärr så att saker som std::span<> inte blir zero cost abstractions, men det är "zero cost" på x86 Windows, ARM64 Windows och alla Linux-varianter.

https://developercommunity.visualstudio.com/t/std::span-is-no...

Knappast en show-stopper, mer ett olycksfall i arbetet som tyvärr nog är rätt svårt att fixa i efterhand men som å andra sidan inte ger någon gigantisk prestandaförsämring heller. Knappast på den nivån att man bör undvika std::span på Windows, bl.a. då det är en (av många) saker som minskar risken för out-of-bounds fel och liknande.

Visa signatur

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

Permalänk
Medlem

Inte världens mest exalterande genomgång men han förklarar det nya i C++ som från början kallades för contracts men som bytt namn till contracts assertion - https://en.cppreference.com/w/cpp/language/contracts.html

Bra ändring, det mest förvånande är kanske varför det inte gjordes tidigare men möjligen ville man få med mer saker än bara förbättringar av hanteringen för assert

https://www.youtube.com/watch?v=u73ZB_vml_c