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

Permalänk
Datavetare
Skrivet av klk:

Det kanske inte var riktigt samma va?
Att ha en vector med speciell typ är bra ibland men när man vill ha olika typer och funktionalitet kring det. Det är då det blir problem

Att låta vektorn sköta blocket krånglar till det

Hur är inte något av det relevanta detaljerna samma?

Från C++ header-filen

// ## attributes ---------------------------------------------------------------- public: uint8_t* m_puBuffer; // m_puBuffer: Pointer to the buffer where strings are stored uint64_t m_uSize; // m_uSize: Number of bytes currently used in the buffer uint64_t m_uBufferSize; // m_uBufferSize: Total allocated size of the buffer in bytes

Vad är det där? Jo, ett onödigt komplicerat/error-prone sätt att skriva "std::vector<uint8_t> m_buffer". Kan inte se något relevant som det tillför här att återimplementera något som redan finns i både C++ och Rust standarbibliotek (deras vektorer är bokstavligen en pekare, en kapacitet och aktuell använd storlek).

Peka gärna ut det specifika som krånglar till det. I C++ får nu noll skillnad i prestanda, i Rust kommer du i praktiken inte kunna mäta prestandaskillnaden, men du har nu också fördelen att eventuella misstag som läser utanför bufferten kommer fångas.

Och innan du gör nästa felaktiga antaganden, gör detta tankeexperiment: är det möjligt att till skriva OS och MCU-firmwares i ett en miljö som inte kan utföra alla relevanta minnesoperationer? När du inser att svaret är "nej, det är inte möjligt" och sen inser att det finns OS/MCU-firmware som är 100 % Rust så borde det vara uppenbart att det går att göra allt.

Det kanske kräver "unsafe" i vissa lägen, men det är fine för "unsafe" betyder bara: "här går jag in i kontext där jag hanterar minne på ett sätt som inte är möjligt för en kompilator att verifiera dess korrekhet". Om man sedan får en krasch är det med väldigt nära 100 % säkerhet ett fel i en "unsafe" sektion, vilket är en bra sak för det är nu långt mindre kod att gräva i jämfört med när 100 % av koden är "unsafe".

Visa signatur

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

Permalänk
Datavetare
Skrivet av heretic16:

Varför kan inte C++ ta alla dom bra sakerna som Rust har? Typ Cargo har jag hört ska vara bättre än CMake. Enklare och mera...framtid. CMake förväntar sig att alla manuella inställningar ska vara rätt. Jag misstänker att Cargo är automatiserat på en nivå som Maven eller Gradle i Java? Dessa är också mycket fina verktyg som jag djupt uppskattar. Java med.

Ni som säger "Nä, det kan inte C++". Nähä? Vi landade på månen ju!?

Är ju exakt det diskussionen inom ISO-C++ handlar om i nuläget m.a.p. saker som safe-c++.

Av allt att döma skulle det som föreslås i safe-c++ ge språket det mesta av de säkerhetsgarantier som finns i Rust, men samma låga runtime-kostnad.

Men det är inte självklart att det är rätt väg att gå. Kolla exemplen som finns i förslaget, det ser inte riktigt ut som C++ längre utan som Rust skrivet med C++-syntax. Då det är opt-in (det måste vara det annars pajar man bakåtkompat.) är det ändå inte samma sak som att skriva om saker i Rust, utan man måste då skriva om saker i ett i praktiken nytt språk "safe-C++". Då infinner sig frågan: vad är poängen?

Vad det gäller Cargo (och motsvarande i t.ex. Go där det är helt integrerat i standardmiljön, Cargo är rent tekniskt ett externt verktyg som "alla" i praktiken använder) är ju det bara något man under många år av "pain" i C, C++, Java, C# m.fl. insåg att man borde integrera i miljön.

Problemet för "gamla" miljöer är att det bara blir riktigt bra om "alla" kan enas om ett sätt att göra det, vilket C och C++ har nära noll sannolikhet att lyckas med. Enda som i någon mening lyckats göra en retro-fit på ett sådan system där det initialt saknades som jag känner till är .NET med NuGet (som nog gynnades en hel del av "omstarten" av .NET i form av .NET Core).

CMake är inte ens ett byggsystem och det är definitivt inte en pakethanterare. CMake är ett meta-byggsystem, dess input är en högnivåbeskrivning av vad som ska byggas, dess output är ett makesystem (GMake, NMake, Ninja, VS Proj, X-code Proj etc).

Cargo är i första hand en pakethanterare likt Conan, Vcpkg, m.fl. Sen kan Cargo också bygga resultatet då det har ett byggsystem. Men går att bygga Rust-program med t.ex. GMake om man har för lite andra saker att lägga tid på, borde gå att använda CMake också om man verkligen vill "utmana sig själv"

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:

Vad är det där? Jo, ett onödigt komplicerat/error-prone sätt att skriva "std::vector<uint8_t> m_buffer". Kan inte se något relevant som det tillför här att återimplementera något som redan finns i både C++ och Rust standarbibliotek (deras vektorer är bokstavligen en pekare, en kapacitet och aktuell använd storlek).

Ja varför tror du att C och C++ inte väljer att lägga allt i en vector exempelvis för du har helt rätt i det, det går att lägga det mesta i en vector.
Om vi tar problematik med linux och rust, varför en del C programmera inte vill ha in rust koden eller för att ta citatet från denna välskrivna artikel

Although superficially that doesn’t look particularly bad, as a C person this makes my eyes bleed. Let’s leave aside the headache of specifying the memory management in the declaration of the structure in a convoluted way,

Vad tror du det är som gör att C och C++ programmerare nästan mår dåligt när de ser den typen av kod medan det är det mest självklara som finns hos programmera i Rust

Permalänk
Medlem
Skrivet av klk:

Ja varför tror du att C och C++ inte väljer att lägga allt i en vector exempelvis för du har helt rätt i det, det går att lägga det mesta i en vector.

Besvara frågan istället för att gå omvägar med följdfrågor.

Skrivet av klk:

Om vi tar problematik med linux och rust, varför en del C programmera inte vill ha in rust koden eller för att ta citatet från denna välskrivna artikel

Although superficially that doesn’t look particularly bad, as a C person this makes my eyes bleed. Let’s leave aside the headache of specifying the memory management in the declaration of the structure in a convoluted way,

Vad tror du det är som gör att C och C++ programmerare nästan mår dåligt när de ser den typen av kod medan det är det mest självklara som finns hos programmera i Rust

Utöver detta så flyttar du än en gång målet och nu är vi väldigt långt ifrån minnessäkerhet.
Du gick från ämnet
-> C++ utvecklare är bättre eftersom dom ser kod på ett särskilt vis.
-> C++ är effektivaste språket.
-> X går inte att göra i Rust.
-> Rust ser inte ut som jag vill och jag hittade en person på internet som höll med mig.

Detta är enbart en bråkdel av sidospår du haft genom tråden.

Jag är C utvecklare och jag mår dåligt av C++ syntax så kan du sluta gruppera C och C++ i samma läger.
Jag är inte supernöjd med Rusts syntax men jag föredrar den över C++.

Permalänk
Skrivet av klk:

Ja varför tror du att C och C++ inte väljer att lägga allt i en vector exempelvis för du har helt rätt i det, det går att lägga det mesta i en vector.
Om vi tar problematik med linux och rust, varför en del C programmera inte vill ha in rust koden eller för att ta citatet från denna välskrivna artikel

Although superficially that doesn’t look particularly bad, as a C person this makes my eyes bleed. Let’s leave aside the headache of specifying the memory management in the declaration of the structure in a convoluted way,

Vad tror du det är som gör att C och C++ programmerare nästan mår dåligt när de ser den typen av kod medan det är det mest självklara som finns hos programmera i Rust

I artikeln jämförs äpplen och päron. I C-koden kopierar man namnet och stoppar i name. I Rust-exemplet har objektet en "borrowed string slice", därav kommer lifetime-parametrarna ('a) som säger att name och boss måste leva minst lika länge som person-objektet. Om du stoppar in en Vec<u8> blir exemplen mer lika och mindre stickiga i ögonen.

Har du sett det här på Phoronix: Rust-Written Zlib-rs Is Not Only Safer But Now Outperforming Zlib C Implementations

Permalänk
Medlem
Skrivet av Ingetledigtnamn:

I artikeln jämförs äpplen och päron.

Det är verkligen inte äpplen och päron och borde väl debatten visa, folk som kämpat med mycket i linux har slutat och det är frustration.
Det är många språk som har en vector i någon form. Med det synsättet går det att byta mycket från C eller C++. Ändå görs det inte.
Ser du på de rustprojekt som gjorts så är det oftast mindre projekt, väldigt små.

Att skriva applikationer handlar väldigt lite om vad jag kan göra med ett språk, ett programmeringsspråk är endast ett verktyg för att konvertera något som är förståeligt för människor till något som är förståeligt för datorer (maskinkod). Det är vad ett programmeringsspråk är.

Windows tror jag har över 300 miljoner rader kod, 10 gånger mer än Linux. Finns gott om kändare system med massor av kod och nästan alla är gjorda med C eller C++.
När en programmerare lär sig, det dröjer ett tag innan programmeraren lyckas skriva 5000 rader utan att trassla in sig. Personen har lärt sig programmera men klarar inte att skriva speciellt mycket innan man rört ihop det.

Programmerare som kan skala kod, alltså de som klarar av att hantera flera miljoner rader utan att tappa fart. För dem är det lätt att se kod som är dålig och den är dålig för att den blir svår att skala. Varje specifik lösning behöver inte vara dålig men det är ofta enkelt och se om lösningen behöver kommas ihåg.

Ett exempel som relaterar till rust för vad jag sett så gillar rust programmerare något som kallas för Message Chains. Det ser snyggt ut men hur förklarar man för en utvecklare som inte förstår att den typen av kod är bland det värsta fel man kan göra om koden måste refaktoreras?
I början på 2000 talet var det väldigt poppis med objektorienterad kod. Java och Microsofts klon av java som kallas för C#. Där är allt objekt. Problemet med objektorienterad kod är coupling. Finns många "fel" när kod skrivs som leder till coupling, objektorienterad kod är ett av dem.
Att objektorienterad kod oftast skall undvikas har rust förstått då språket adresserat det problemet specifikt. Men pröva att diskutera att objekt är dåligt med en java utvecklare.

I C++ är det gott om programmerare som missbrukar stl, man kan göra nästan allt med stl. Men det är templates och koden blir fantastiskt svårläst och svår att debugga.

Vad tror du är lättast att debugga av de här två

uint8_t* m_puBuffer; // m_puBuffer: Pointer to the buffer where strings are stored uint64_t m_uSize; // m_uSize: Number of bytes currently used in the buffer uint64_t m_uBufferSize; // m_uBufferSize: Total allocated size of the buffer in bytes eller std::vector<uint8_t> m_buffer

Permalänk
Datavetare
Skrivet av klk:

Ett exempel som relaterar till rust för vad jag sett så gillar rust programmerare något som kallas för Message Chains. Det ser snyggt ut men hur förklarar man för en utvecklare som inte förstår att den typen av kod är bland det värsta fel man kan göra om koden måste refaktoreras?
I början på 2000 talet var det väldigt poppis med objektorienterad kod. Java och Microsofts klon av java som kallas för C#. Där är allt objekt. Problemet med objektorienterad kod är coupling. Finns många "fel" när kod skrivs som leder till coupling, objektorienterad kod är ett av dem.
Att objektorienterad kod oftast skall undvikas har rust förstått då språket adresserat det problemet specifikt. Men pröva att diskutera att objekt är dåligt med en java utvecklare.

WTF (har redan svarat ovan): Rust-program kan (precis som C++ eller till och med C med funktionspekare) skapa "message-chains".

I idiomatisk Rust kod är det högst ovanligt med "message-chains", du blandar ihop "message chains" med "pipeline-style".

Skrivet av klk:

Vad tror du är lättast att debugga av de här två

uint8_t* m_puBuffer; // m_puBuffer: Pointer to the buffer where strings are stored uint64_t m_uSize; // m_uSize: Number of bytes currently used in the buffer uint64_t m_uBufferSize; // m_uBufferSize: Total allocated size of the buffer in bytes eller std::vector<uint8_t> m_buffer

Alternativ 2 är enklast, säkrast och kommer uttrycka "intent" bäst i 99 fall av 100.

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:

Alternativ 2 är enklast, säkrast och kommer uttrycka "intent" bäst i 99 fall av 100.

Det här beskriver mycket tydligt varför C programmerare inte kan jobba ihop med Rust programmerare

Permalänk
Medlem
Skrivet av klk:

Det här beskriver mycket tydligt varför C programmerare inte kan jobba ihop med Rust programmerare

Nu trollar du igen...

Jag har skrivit multipla gånger att jag är C-utvecklare och kodar Rust som hobby. Även erfarna C-utvecklare inom Linux community:t förespråkar Rust, senast såg jag en presentation av Linus Walleij.

Permalänk
Medlem
Skrivet av orp:

Nu trollar du igen...

Jag har skrivit multipla gånger att jag är C-utvecklare och kodar Rust som hobby. Även erfarna C-utvecklare inom Linux community:t förespråkar Rust, senast såg jag en presentation av Linus Walleij.

Ja men de C programmerarna kan inte skala kod. De följer mönster/arkitektur någon annan utvecklare som kan skala koden designat

Visa gärna något större Rust projekt där du tycker koden är bra och skalar väl

Permalänk
Medlem
Skrivet av orp:

Jag har skrivit multipla gånger att jag är C-utvecklare och kodar Rust som hobby.

Fråga: Vad är det för typ av kod du skriver när du programmerar i C? Är det exempelvis små embedded delar

Permalänk
Medlem

Nu trollar du igen...

Skrivet av klk:

Ja men de C programmerarna kan inte skala kod.

Linux, postgresql, sqlite, nodejs

Skrivet av klk:

De följer mönster/arkitektur någon annan utvecklare som kan skala koden designat

Jag tror att alla dessa projekten inte har en fristående arkitekt. Att inte använda design patterns är inte samma sak som avsaknad arkitektur.

Skrivet av klk:

Visa gärna något större Rust projekt där du tycker koden är bra och skalar väl

Firefox, SurrealDB, firecracker, Zed

Permalänk
Medlem
Skrivet av klk:

Fråga: Vad är det för typ av kod du skriver när du programmerar i C? Är det exempelvis små embedded delar

Japp, ZephyrRTOS och embedded Linux. Just nu debuggar jag RAUC

Permalänk
Medlem
Skrivet av orp:

Nu trollar du igen...

Linux, postgresql, sqlite, nodejs

Jag tror att alla dessa projekten inte har en fristående arkitekt. Att inte använda design patterns är inte samma sak som avsaknad arkitektur.

Firefox, SurrealDB, firecracker, Zed

? Menar du att dessa projekt är skrivna i Rust

Permalänk
Medlem
Skrivet av klk:

? Menar du att dessa projekt är skrivna i Rust

Nu har du citerat både C-projekten och Rust-projekten så nu vet jag inte vad du syftar på...

Permalänk
Medlem
Skrivet av orp:

Japp, ZephyrRTOS och embedded Linux. Just nu debuggar jag RAUC

Ok, då förstår jag. Jag känner till en del om volvo som också använder realtidsoperativsystem och har dammsugit chalmersstudenter som gått teknisk fysik. De anställer nästan alla där

Men de kan inte skala kod. Volvo har haft gigantiska problem

Permalänk
Medlem
Skrivet av klk:

Ok, då förstår jag. Jag känner till en del om volvo som också använder realtidsoperativsystem och har dammsugit chalmersstudenter som gått teknisk fysik. De anställer nästan alla där

Men de kan inte skala kod. Volvo har haft gigantiska problem

Jag jobbar inte på Volvo så jag kan inte uttala mig.

Permalänk
Medlem
Skrivet av orp:

Jag jobbar inte på Volvo så jag kan inte uttala mig.

Det är inte jättsvårt att googla om man nu är intresserad, de är över 2 år sena med senaste bilen på grund av mjukvaruproblem.

Och då bör man betänka att de är massor som programmerar, när de producerar sådana mängder kod kan man tycka att de borde fokusera mer på återanvändning och köra samman. Hade de jobbat smartare hade de kunnat producera enormt mycket av värde.

Vad jag undrade var om du vet något större projekt som är utvecklat i Rust.

Permalänk
Medlem
Skrivet av klk:

Det är inte jättsvårt att googla om man nu är intresserad, de är över 2 år sena med senaste bilen på grund av mjukvaruproblem.

Nu känner jag iaf fler än 5 personer som jobbar på Volvo som inte delar den bilden. Har du jobbat inom transportindustrin?

Skrivet av klk:

Och då bör man betänka att de är massor som programmerar, när de producerar sådana mängder kod kan man tycka att de borde fokusera mer på återanvändning och köra samman. Hade de jobbat smartare hade de kunnat producera enormt mycket av värde.

Detta låter som typisk Dunning–Kruger. Du får det att låta som alla andra är korkade och det enbart är du som vet bäst. Om du nu är så jäkla duktig, varför söker du inte jobb på Volvo och styr upp verksamheten?

Skrivet av klk:

Vad jag undrade var om du vet något större projekt som är utvecklat i Rust.

Du nämnde både C och Rust så jag gav exempel på båda och sedan när du refererade till mitt inlägg så citerade du C- och Rust-projekten. Läser du mitt svar en gång till så ser du Rust-projekten.

Permalänk
Medlem
Skrivet av orp:

Du nämnde både C och Rust så jag gav exempel på båda och sedan när du refererade till mitt inlägg så citerade du C- och Rust-projekten. Läser du mitt svar en gång till så ser du Rust-projekten.

Kan du repetera de stora system som är stora och skrivna i Rust. Jag fattade inte vilka det var

Permalänk
Medlem
Skrivet av orp:

Nu känner jag iaf fler än 5 personer som jobbar på Volvo som inte delar den bilden. Har du jobbat inom transportindustrin?

Är det något speciellt med just transportindustrin och varför de inte klarar av att skriva kod?

Jag känner till en hel del om den ja

Permalänk
Medlem
Skrivet av klk:

Kan du repetera de stora system som är stora och skrivna i Rust. Jag fattade inte vilka det var

Skrivet av klk:

Visa gärna något större Rust projekt där du tycker koden är bra och skalar väl

Firefox(deras layout engine servo), SurrealDB, firecracker, Zed

Permalänk
Medlem
Skrivet av klk:

Är det något speciellt med just transportindustrin och varför de inte klarar av att skriva kod?

Jag känner till en hel del om den ja

Du har alltså inte jobbat inom transportindustrin?

Vad har du för bevis för att dom inte kan skriva kod?

Permalänk
Medlem
Skrivet av orp:

Du har alltså inte jobbat inom transportindustrin?

Vad har du för bevis för att dom inte kan skriva kod?

Det är just detta som skiljer C och C++ programmerare som kan skala kod med de som inte kan det. Hade du kunnat så hade du inte argumenterat på det viset. Det är lätt att se på kod om den går att skala eller inte om man får titta på den. Jag tror jag kan göra den bedömningen om jag får en övergripande skiss över data och kanske sitta med koden en timma.

Känner du inte till förseningarna med EX90

Jag känner också en del på Volvo och frågar hur de gör, mycket nybörjarproblem

Permalänk
Medlem
Skrivet av klk:

Det är just detta som skiljer C och C++ programmerare som kan skala kod med de som inte kan det. Hade du kunnat så hade du inte argumenterat på det viset. Det är lätt att se på kod om den går att skala eller inte om man får titta på den. Jag tror jag kan göra den bedömningen om jag får en övergripande skiss över data och kanske sitta med koden en timma.

Det är just detta som skiljer Dunning-Kruger mot resten.

De som lade grunden för Volvos kontor i Lund var ett gäng vassa ingenjörer från ST-Ericsson som i massvarseln blev upplockade av Intel och sedan övergick till Volvo, dvs folk som kodar C som kan skala kod.

Skrivet av klk:

Känner du inte till förseningarna med EX90

Jag känner också en del på Volvo och frågar hur de gör, mycket nyböprjarproblem

Det har inget att göra med byråkratin inom transportindustrin eller att en stor del av verksamheten fortfarande kör en gloryfierad variant av vattenfall eller safety-krav eller att EX90 troligen har över 120 ECU:er där majoriteten inte utvecklas av Volvo men som ska sys ihop på samma meddelande-bus?

Vilka nybörjarproblem ... eller hur?! Att en industrigigant ska ställa om från mekanik till mjukvara.

Synd att dom inte plockat in dig så att du kunde suttit ner en timme och sedan löst alla deras mjukvaruproblem genom alla lager av management och extern safety-granskning...

Permalänk
Datavetare
Skrivet av klk:

Det här beskriver mycket tydligt varför C programmerare inte kan jobba ihop med Rust programmerare

Hur menar du? Även C-programmerar kan jobba med abstrakta datatyper.
Ur alla rimliga perspektiv borde jag vara betydligt mer "C-programmerare" (>20 års erfarenhet av C) än Rust-programmare (gjort ett "professionellt" projekt så här långt och ett par hobbygrejor). Ser inget konstigt eller "omöjligt" med Vec<>/std::vector<>.

Råder inget tvivel om att att ha fler än ett huvudspråk i ett projekt har en hel del utmaningar. Och för att på något sätt hålla oss till tråden är det en "livräddare" för C++ och stor orsak till varför de måste fundera på hur mycket man bör förändra språket bara för att minska kritiken kring "memory safety". Men det är inte omöjligt, och framförallt är det fullt möjligt för (relativt gamla) C-programmerare att lära sig Rust

Skrivet av klk:

Det är just detta som skiljer C och C++ programmerare som kan skala kod med de som inte kan det. Hade du kunnat så hade du inte argumenterat på det viset. Det är lätt att se på kod om den går att skala eller inte om man får titta på den. Jag tror jag kan göra den bedömningen om jag får en övergripande skiss över data och kanske sitta med koden en timma.

Känner du inte till förseningarna med EX90

Jag känner också en del på Volvo och frågar hur de gör, mycket nybörjarproblem

Så hela ditt resonemang bygger på "det är en skill-issue"?

Du postade detta ovan
#20777905

Fråga: är det ett skräckexempel eller något du anser är bra?
Undra då jag är rätt säker att om detta hade varit en student-labb med Bjarne som lärare skulle det rimligen får "F" i betyg.
Finns mer än en handfull problem på ungefär lika många rader. Fast Bjarne har kanske också "skill issues" i C++ (du anser uppenbarligen att Herb Sutter har det...).

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:

Hur menar du? Även C-programmerar kan jobba med abstrakta datatyper.
Ur alla rimliga perspektiv borde jag vara betydligt mer "C-programmerare" (>20 års erfarenhet av C) än Rust-programmare (gjort ett "professionellt" projekt så här långt och ett par hobbygrejor). Ser inget konstigt eller "omöjligt" med Vec<>/std::vector<>.

Har du sett något annat C++ projekt som väljer att använda std::vector för att hantera allt minne?
vector är vanligt men jag tror det är extremt ovanligt att vector används som allmän buffer.
Samtidigt så faller kritiken mot C++ och kritiken från rust om man nu väljer att använda vector som generell minneshanterare.
Enligt mig så vansinnig lösning och hade jag gjort code review så hade den inte släppts igenom men givetvis går det.

Angående koden jag postade, såg du resten? Det var en enkel kod sett till minneshantering men en del runt om. Orsaken till det handlar om att få koden och "gifta sig med" (passa ihop) annat i C++ och kunna återanvändas.

Skrivet av Yoshman:

Så hela ditt resonemang bygger på "det är en skill-issue"?

Förstår inte, tvärtom skulle jag vilja säga. En del utvecklare gör det fasligt svårt för sig. Trasslar in sig i massa konstigheter

Det går inte att skriva kod så den måste läsas/memoreras om man skall skriva mycket. Ingen klarar att minnas flera hundra tusen rader kod, än mindre miljoner. Är koden skriven på det viset vilket är ganska lätt att upptäcka så vet man att de inte kommer speciellt långt. Och det beror alltså på att koden inte följer fasta mönster, koden skiljer sig från ett ställe till ett annat och ofta en del hack.

När koden skrivs så går det ofta snabbt i början, sedan går det långsammare och så går det ännu långsammare. Efter ett tag börjar programmerare tappa orken för det är mentalt mycket ansträngde att arbeta i kod som inte är byggd för att skala. Programmerare måste fokusera så hårt på att minnas saker istället för vad de tycker är skoj vilket ofta är att skapa

Permalänk
Medlem
Skrivet av Yoshman:

Fråga: är det ett skräckexempel eller något du anser är bra?
Undra då jag är rätt säker att om detta hade varit en student-labb med Bjarne som lärare skulle det rimligen får "F" i betyg.
Finns mer än en handfull problem på ungefär lika många rader. Fast Bjarne har kanske också "skill issues" i C++ (du anser uppenbarligen att Herb Sutter har det...).

Känner du till Microsofts COM (component object model)

Och du har helt rätt i att denna COM teknik inte gillas av många C++ gurus men Windows är fulllproppad med den och enligt mig så har tekniken varit helt central för att Windows har kunnat skala upp till de enorma mängder funktionalitet operativet besitter

Permalänk
Medlem

Nu trollar du igen ...

Skrivet av klk:

Har du sett något annat C++ projekt som väljer att använda std::vector för att hantera allt minne?

Är det inte just det vectorn är till för om du vill hantera en sekvens av minne, typ en buffer, utan att uppfinna hjulet på nytt? (Du snackar om att återanvända kod senare men du ser säkert inte ironin i detta)

Skrivet av klk:

vector är vanligt men jag tror det är extremt ovanligt att vector används som allmän buffer.

Varför? Om du nu vill använda arrays och memcpy, varför inte använda C?

Skrivet av klk:

Samtidigt så faller kritiken mot C++ och kritiken från rust om man nu väljer att använda vector som generell minneshanterare.

Ingen har sagt generell minneshantering, utan du pratade om en sträng-buffer.

Skrivet av klk:

Enligt mig så vansinnig lösning och hade jag gjort code review så hade den inte släppts igenom men givetvis går det.

Du är ganska ensam om dina åsikter. @Yoshman kod är mer lättläslig och återuppfinner inte hjulet.

Skrivet av klk:

Angående koden jag postade, såg du resten? Det var en enkel kod sett till minneshantering men en del runt om. Orsaken till det handlar om att få koden och "gifta sig med" (passa ihop) annat i C++ och kunna återanvändas.

<Uppladdad bildlänk>

Förstår inte, tvärtom skulle jag vilja säga. En del utvecklare gör det fasligt svårt för sig. Trasslar in sig i massa konstigheter

Du har ju precis gjort motsatsen till vad du predikar och _INTE_ återanvänt existerande funktionalitet utan hackat ihop något eget som trasslar till det och måste beräkna offset:en för memcpy ...

Skrivet av klk:

Det går inte att skriva kod så den måste läsas/memoreras om man skall skriva mycket. Ingen klarar att minnas flera hundra tusen rader kod, än mindre miljoner. Är koden skriven på det viset vilket är ganska lätt att upptäcka så vet man att de inte kommer speciellt långt. Och det beror alltså på att koden inte följer fasta mönster, koden skiljer sig från ett ställe till ett annat och ofta en del hack.

Jag vet ärligt inte vad du yrar om här... vi är tillbaka i "kod måste skrivas på ett särskilt vis för att någon är oförmögen att läsa kod"...
som varken har med minnessäkerhet, C++ effektivitet, implementationer i C++ vs Rust.

Permalänk
Medlem
Skrivet av orp:

Nu trollar du igen ...

Du får ursäkta men vad vinner påstå att andra som inte delar dina åsikter för att de trollar, lite barnsligt om man får lov och vara tydlig.
Du får gärna säga att du tycker jag har fel, att en lösning är sämre än en annan. Men vill du jag skall lyssna så behöver du också veta varför. Och då bör du veta vad du pratar om, inte att du läst det eller någon berättat för dig.
Det är fullt av utvecklare som lärt sig "så här är det" men förstår inte varför eller om de lärt fel.

Skrivet av orp:

Jag vet ärligt inte vad du yrar om här...

Det märks

Skrivet av orp:

Du har ju precis gjort motsatsen till vad du predikar och _INTE_ återanvänt existerande funktionalitet utan hackat ihop något eget som trasslar till det och måste beräkna offset:en för memcpy ...

Jag vet ärligt inte vad du yrar om här... vi är tillbaka i "kod måste skrivas på ett särskilt vis för att någon är oförmögen att läsa kod"...
som varken har med minnessäkerhet, C++ effektivitet, implementationer i C++ vs Rust.

Känner du till begreppet "data orienterad design" som blir vanligare och vanligare inom programmering?

Exakt vad data orienterad design är beror på vem du frågar men tror det börjar forma sig något till en gemensam förklaring. Såg en bra artikel om det för ett tag sedan, skall se om jag kan hitta den