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

Permalänk
Medlem
Skrivet av Erik_T:

Jaså? På vilket sätt, och varför skulle inte de lösningarna fungera med GC?

"Fungera" är inte vad jag skrev utan vad en GC saktar ner, det är segt
Varför skrivs inte fler spelmotorer med GC tror du? Eller varför inte databaser
Med en GC används mer minne jämfört med när du kontrollerar minnet själv. Mer minne är mer minnesfragmentering och det är inte bra för prestanda.
Förutom det så har du hela området med att hantera positioner i minnet och göra koden lätt att hantera

Permalänk
Medlem
Skrivet av Yoshman:

Go versionen är på min datorn (M3 Max) nästan 10 gånger snabbare!!! Bygger med clang 16.0 och -O2 för C++, och för Go är det 1.24.1.

Tror du då att GO faktiskt är nästan 10 gånger snabbare än C++, är det det du säger? Du tror alltså att ett språk med GC kan göras snabbare än ett språk utan GC, är det korrekt uppfattat av om jag tolkar din text så

Permalänk
Medlem
Skrivet av klk:

Problemet som jag tror jag och flera andra antytt tidigare i tråden handlar om vad många C/C++ inte förstår. Och de förstår inte eftersom området för dem är så lätt. Andra utvecklare som jobbar med annat och har andra prioriteringar borde lyssna bättre och inte tro att alla tänker som dem.

Vem ska lyssna på vem? Du får det att låta som det är kyrkor och inte programmeringsspråk. Du beklagar dig tidigare i tråden över Rust-evangelister men ingen har försökt påtvinga dig något annat språk medans du snackar illa om GC-språk, Python och hävdar att X enbart går att lösa på effektiva sätt i C++... när ska du inse att du är evangelisten som du tycker så illa om?

Skrivet av klk:

Då vi diskuterat rust vs C och en del linux. Jag tycker det är intressant hur den soppan kommer sluta. Rust "hatar" att jobba med minnet, något som de flesta C programmerare tycker är en styrka med språket. Rust utvecklare kritiserar C utvecklare för att C språket är dåligt just på grund av det. Och dessa två grupper skall jobba TILLSAMMANS i linux, det kommer aldrig gå.

Jag har kodat C i 13 år för Linux och nu hobbykodar jag i Rust, så det borde vara exempel nog på att det troligen kommer lösa sig framöver

Permalänk
Datavetare
Skrivet av klk:

"Fungera" är inte vad jag skrev utan vad en GC saktar ner, det är segt
Varför skrivs inte fler spelmotorer med GC tror du? Eller varför inte databaser
Med en GC används mer minne jämfört med när du kontrollerar minnet själv. Mer minne är mer minnesfragmentering och det är inte bra för prestanda.
Förutom det så har du hela området med att hantera positioner i minnet och göra koden lätt att hantera

Well, just det markerade kan vara ett problem i C, C++ och Rust då man kan få "slut på RAM" trots att det egentligen finns massor med ledigt RAM som effektivt av fragmentering.

De flesta moderna GC språk har inte det problemet då de kan kompaktera sin heap och därmed helt eliminera (extern) fragmentering.

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:

Well, just det markerade kan vara ett problem i C, C++ och Rust då man kan få "slut på RAM" trots att det egentligen finns massor med ledigt RAM som effektivt av fragmentering.

De flesta moderna GC språk har inte det problemet då de kan kompaktera sin heap och därmed helt eliminera (extern) fragmentering.

Vad menar du man vinner på att använda GC? Så jag förstår din utgångspunkt

Permalänk
Datavetare
Skrivet av klk:

Tror du då att GO faktiskt är nästan 10 gånger snabbare än C++, är det det du säger? Du tror alltså att ett språk med GC kan göras snabbare än ett språk utan GC, är det korrekt uppfattat av om jag tolkar din text så

Nej, vad jag säger är att en fördel med GC är att den har liknande fördelar som en arena-allokator när det kommer till att allokera väldigt stora mängder buffertar per tidsenhet. Kostnaden för allokering är långt mindre än normal heap-allokering i språk som C++.

Nu bör man försöka undvika att göra det, vilket ofta (men inte alltid) är realistiskt genomförbart. Fördelen med GC-språk är att om det är svårt att undvika presterar de fortfarande helt OK, medan C++ går rejält i diket.

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 orp:

Vem ska lyssna på vem?

Läs trådens rubrik

Permalänk
Medlem
Skrivet av Yoshman:

Nej, vad jag säger är att en fördel med GC är att den har liknande fördelar som en arena-allokator när det kommer till att allokera väldigt stora mängder buffertar per tidsenhet. Kostnaden för allokering är långt mindre än normal heap-allokering i språk som C++.

Nu bör man försöka undvika att göra det, vilket ofta (men inte alltid) är realistiskt genomförbart. Fördelen med GC-språk är att om det är svårt att undvika presterar de fortfarande helt OK, medan C++ går rejält i diket.

Du tror inte C och C++ utvecklare försöker optimera heap allokeringar eller?

Permalänk
Datavetare
Skrivet av klk:

Vad menar du man vinner på att använda GC? Så jag förstår din utgångspunkt

Ett par av föredelarna är

* Kostnande för att allokera är väldigt låg (lägre än att allokera från heap i C, C++ och Rust)
* Extern framentering är ett icke-problem, något man explicit måste tänka på i C, C++ och Rust för program som förväntas köra under mycket lång tid utan omstart
* ABA-problem är rätt mycket ett totalt icke-problem i multitrådade program med GC, samtidigt som den problematiken helt klart är en försvårande omständighet för att skriva lock/wait-free algoritmer i C, C++ och Rust

Men det betyder inte att GC är en hammare som går att använda precis överallt. Nackdelen med GC är att den inte är deterministisk, vilket gör den olämplig för realtids-applikationer (i praktiken oanvändbar när man har hårda realtidskrav). När man skriver spel (mjuk realtid) med C# så måste man se till att skapa ingen/lite "garbage" om man vill ha stabil FPS.

Realtid är dock inte att likställa med hög prestanda, hård realtid betyder bara att det går att garanterar ett "worst-case".

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 klk:

Du tror inte C och C++ utvecklare försöker optimera heap allokeringar eller?

Den genomsnittlige C/C++ utvecklaren? Nej.

Permalänk
Medlem
Skrivet av klk:

Såg du videon?

Men absoult, du kan göra ett jätteblock med en GC och använda offset positioner. Den koden är inte rolig att jobba med.

Såg du videon?
Kan du förstå att rendering/spelutveckling är en bra tillämpning för arena-allokering?
Du inser också att mycket programmering inte har samma behov som rendering/spelutveckling och kanske därför blir sämre om du använder en arena-allokator?

Permalänk
Medlem
Skrivet av Yoshman:

Ett par av föredelarna är

* Kostnande för att allokera är väldigt låg (lägre än att allokera från heap i C, C++ och Rust)
* Extern framentering är ett icke-problem, något man explicit måste tänka på i C, C++ och Rust för program som förväntas köra under mycket lång tid utan omstart

Fråga: I dessa nya GC varianter, hur kontrollerar jag så att den släpper minne när jag vill, att den inte sitter och håller på det. Och hur vet jag storleken på blocken GC'n allokerar

Permalänk
Medlem
Skrivet av klk:

Fråga: I dessa nya GC varianter, hur kontrollerar jag så att den släpper minne när jag vill, att den inte sitter och håller på det. Och hur vet jag storleken på blocken GC'n allokerar

Nu är jag ingen expert på GC, men jag tror att svaret är att det gör du inte. Det behöver du inte göra.
Om du kontrollerar när minne släpps så missar du hela poängen med en GC.

Permalänk
Medlem
Skrivet av klk:

Läs trådens rubrik

... och inget du sagt har med rubriken att göra ...

Rubriken har att göra med huruvida C++ är minnessäkert och det du skrev handlade om att olika programmerings communities har olika behov och behöver lyssna på varandra. Jag är övertygad om att kumbaya inte kommer göra C++ minnessäkert ...

Permalänk
Datavetare
Skrivet av klk:

Fråga: I dessa nya GC varianter, hur kontrollerar jag så att den släpper minne när jag vill, att den inte sitter och håller på det. Och hur vet jag storleken på blocken GC'n allokerar

Go

runtime.GC() // Run garbage collection debug.FreeOSMemory() // Release unused memory to the OS

C#

GC.Collect(); // Run garbage collection GC.WaitForPendingFinalizers(); // Run "destructors" GC.Collect(); // Run garbage collection for any additional free objects after running finalizers GC.TrimExcess(); // Release unused memory to the OS

Hur vet du hur stora block C++ allokerar från vare sig heap och än mer OS? Det vet du inte, närmaste man kan komma är att allokera ett stort block och hantera minnet själv, vilket också går i de flesta GC-språk.

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

För de som hellre vill se en video än att läsa, här är YouTubern "ThePrimeTime" take on Bjarnes senaste utspel kring "attacken mot C++"

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:

Go

runtime.GC() // Run garbage collection debug.FreeOSMemory() // Release unused memory to the OS

C#

GC.Collect(); // Run garbage collection GC.WaitForPendingFinalizers(); // Run "destructors" GC.Collect(); // Run garbage collection for any additional free objects after running finalizers GC.TrimExcess(); // Release unused memory to the OS

Hur vet du hur stora block C++ allokerar från vare sig heap och än mer OS? Det vet du inte, närmaste man kan komma är att allokera ett stort block och hantera minnet själv, vilket också går i de flesta GC-språk.

Det där var inte riktigt vad jag frågade efter och det förstår du nog med. Jag ville veta hur jag kastar ut på blocknivå
Att köra en rensning på allt har alltid fungerat

Permalänk
Medlem
Skrivet av Erik_T:

Nu är jag ingen expert på GC, men jag tror att svaret är att det gör du inte. Det behöver du inte göra.
Om du kontrollerar när minne släpps så missar du hela poängen med en GC.

Exakt, det var just det jag ville få bekräftat. Man släpper hela kontrollen av minnet till GCn och varför är det så dåligt?

C och C++ är språk som skiljer sig mot i princip alla andra språk. Det är flera saker som skiljer men en av de viktigaste är prestanda. Och för att få upp prestanda behöver utvecklare förstå vilken maskinkod som genereras.
Kompilatorn (förhånad att jag behöver nämna detta...) är ett mycket viktigt verktyg för C och C++ utvecklare. Den är viktig i andra språk med men inte alls lika viktig som i C/C++.

När kompilatorn genererar maskinkod behöver den veta vilken typ av maskinkod som är möjlig och det här är en av orsakerna till att ibland C/C++ uppfattas som onödigt komplicerat. Samma sak är ibland orsaker till varför C++ inte kan ta in "vad som helst" för att förenkla språket.
C/C++ utvecklare kan mer eller mindre räkna ut vad för maskinkod som kommer produceras från den kod de skriver.

Kör man en GC exempelvis, och man skall komma åt minne så behöver denna typ av åtkomst kontrolleras, skulle det gå att läsa utanför ett minnesblocks gränser så smäller det.
I säkra språk går inte det. Men i C/C++ lämnas det ansvaret över till programmeraren.
Förutom att det tar tid att kontrollera access mot minne så är det en hel massa optimeringar en kompilator inte kan göra.

Detta är också orsaken till att jag frågade efter om det går att styra blocken som allokeras.

Permalänk
Medlem
Skrivet av Yoshman:

För de som hellre vill se en video än att läsa, här är YouTubern "ThePrimeTime" take on Bjarnes senaste utspel kring "attacken mot C++"

Det är en reporter som gör sin egen tolkning.

Permalänk
Datavetare
Skrivet av klk:

Det där var inte riktigt vad jag frågade efter och det förstår du nog med. Jag ville veta hur jag kastar ut på blocknivå
Att köra en rensning på allt har alltid fungerat

Det är inte alls så självklart att man kan tvinga fram en GC. Utanför debugging är det en operation man nästan aldrig behöver eller ens bör göra då det sällan är positivt för prestanda.

Vill man kasta ut saker på blocknivå får man göra en custom-memory allocator, vilket är möjligt i stort sett alla GC-språk. Specifikt är det möjligt i C# (har använt mig just av arena-allokator där, är högst lämpligt om man t.ex. vill göra vettiga partikelsystem i C#) och definitivt möjligt i Go (förutom denna shit-storm kring C++ framtid p.g.a. dess säkerhetsbrister pågår också en sådan runt varför Microsoft valde Go när man optimerade prestanda i Typescript kompilatorn, det i stället för C#, Rust eller C++. En väldigt viktig orsak är "Go is the lowest level language that exist, still using a GC").

Men om man tar ett kliv in i detta millennium och därmed att multicore är normen så finns väldigt ofta begränsningar på minnesallokering som inte spelar någon direkt roll för enkeltrådade fall. Det är enklare/effektivare att hantera lock/wait-free algoritmer om man sätter begränsningen att minne är typ-stabilt, d.v.s. efter allokering måste en viss minnesadress representera samma typ fram till dessa att minnes frias igen. Med den begränsningen lär nog i princip alla programspråk kunna köra med en custom-memory allocator om behov uppstår.

Skrivet av klk:

Exakt, det var just det jag ville få bekräftat. Man släpper hela kontrollen av minnet till GCn och varför är det så dåligt?

C och C++ är språk som skiljer sig mot i princip alla andra språk. Det är flera saker som skiljer men en av de viktigaste är prestanda. Och för att få upp prestanda behöver utvecklare förstå vilken maskinkod som genereras.
Kompilatorn (förhånad att jag behöver nämna detta...) är ett mycket viktigt verktyg för C och C++ utvecklare. Den är viktig i andra språk med men inte alls lika viktig som i C/C++.

När kompilatorn genererar maskinkod behöver den veta vilken typ av maskinkod som är möjlig och det här är en av orsakerna till att ibland C/C++ uppfattas som onödigt komplicerat. Samma sak är ibland orsaker till varför C++ inte kan ta in "vad som helst" för att förenkla språket.
C/C++ utvecklare kan mer eller mindre räkna ut vad för maskinkod som kommer produceras från den kod de skriver.

Kör man en GC exempelvis, och man skall komma åt minne så behöver denna typ av åtkomst kontrolleras, skulle det gå att läsa utanför ett minnesblocks gränser så smäller det.
I säkra språk går inte det. Men i C/C++ lämnas det ansvaret över till programmeraren.
Förutom att det tar tid att kontrollera access mot minne så är det en hel massa optimeringar en kompilator inte kan göra.

Detta är också orsaken till att jag frågade efter om det går att styra blocken som allokeras.

C har en särställning bland språk i att vara den ABI-specifikation som i princip alla andra språk bygger sin FFI.

Sedan har C, C++, Rust och Zig (möjligen något till jag missat) en särställning i att alla ha manuell minneshantering vilket är ett krav om man bygger applikationer med hårda realtidskrav. Inför man manuell minneshantering i språk som normalt har GC kan även dessa uppfylla detta krav, finns (eller har i alla fall funnits, vet inte om det aktiv underhålls längre) varianter av Java med dessa egenskaper.

Utöver det är det ytterst få saker som kräver C, C++, Rust etc. Om man definierar "prestanda" som "hur snabbt man kan lösa ett givet compute-bounded problem" är rätt arkitektur och rätt val av bibliotek typiskt långt viktigare än val av språk. Se på AI/ML där prestanda är super "trots" att Python är standarden att jobba i.

När man rör sig mot multicore-optimeringar är det snarare en fördel att välja de mer högpresterande GC-språken. Vilket kanske inte egentligen är så förvånande givet att C designades i slutet av 60-talet och C++ skapades i slutet av 70-talet, långt innan multicore var normen (båda dessa språk var ju väldigt sena med att ens ha standardiserat stöd för trådar, 2011 i båda fallen).

Skrivet av klk:

Det är en reporter som gör sin egen tolkning.

Absolut! Dock högst intressant att läsa reaktionerna givet att denna "influencer" ändå har >700k följare. Och det som tas upp där är helt on-topic för denna tråd.

Hela "C++ framtid" handlar i nuläget primärt om vilken väg man ska ta

* Bjarne anser rätt mycket att problemet redan är löst. Det som saknas är bättre verktyg, han trycker på "Profiles" som i praktiken är ett sätt att göra så att specifika delar av språket (de delar som anses vara "problematiska") inte längre kompilerar (säkerhet by opt-out). Man kan då gradvis skriva om existerande kod i "modern" stil, ett exempel som lyfts fram är att C-style arrayer och pekar-aritmetik ska bannas, istället ska man använda C++11 och senare tekniker.

* Safe-C++ lägret tycker det fortfarande finns en rad brister och vill rätt mycket kopiera de delar från Rust som visat sig vara väldigt värdefulla för att i stort sätt helt lösa de vanligaste orsakerna till säkerhetsproblem i C och C++.

* TrapC (som jag personligen tror är klart bästa vägen framåt) är OK med ett par "breaking-changes" till språket, med fördelen att slutresultatet löser problemen samtidigt som själva stilen på hur man kodar bevaras nästan helt. C++ saknar tyvärr ett motsvarande förslag (än så länge).

* Ett sista läger är väl Carbon och Cpp2. De är rätt mycket för C++ vad Typescript är för Javascript och t.ex. Kotlin är för Java. Man anser att det inte är realistiskt att fixa de underliggande problemen med språket, samtidigt som man också inser att det redan finns så mycket legacy-kod som man behöver ha 100 % stöd för. Ett sätt att hantera detta är att skapa ett nytt språk som inte har vårtorna, men som "bara" transpile:as till det underliggande språket (vilket är kanske viktigast för just C++ då det saknar en standardiserad ABI).

* Eller möjligen är sista lägret de som hävdar: "this is fine!". Vet inte om det finns något relevant antal här...

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:

Absolut! Dock högst intressant att läsa reaktionerna givet att denna "influencer" ändå har >700k följare. Och det som tas upp där är helt on-topic för denna tråd.

Jag har programmerat i över 30 år och jag kan lova, en majoritet har alltid hatat C och C++. Det är inte svårt att räkna ut reaktioner om man publicerar något och ger kritik mot C++.

När jag började programmera som yrke så var det VB de flesta satt i. För varje C++ programmerare i windows gick det säkert minst 10 VB programmerare. Helt omöjligt för en C++ utvecklare att ha någon form av konstruktiv diskussion med VB utvecklare, två helt olika världar.
Sedan dök java upp, då var det detta alla skulle välja. Microsoft hoppade på tåget men fick sedan göra om sin version av java till C#. Tror C# helt dominerar för applikationsutveckling och är stort för websystem.
Också här är det mycket svårt för C++ utvecklare att diskutera med C#.

I aktuell tråd här diskuterar vi säkerhet som minnesproblem. Men det är en detalj jämfört med det absolut största problemet av dem alla, att projekt kraschar. De kommer aldrig i mål och "vanliga" applikationer är ofta fulla med buggar.
Jag såg att "lovable" har 500 000 användare, de producerar i genomsnitt 25 000 system per dag. (svårt att tro att det är så mycket men det är i alla fall mycket som genreras)

Bara väntar på att de här som inte har en aning av vad programmering faktiskt är börjar kritisera enklare språk, de tror säkert att de kan programmera trots att deras applikationer är AI genererade.

Permalänk
Medlem
Skrivet av klk:

Jag har programmerat i över 30 år och jag kan lova, en majoritet har alltid hatat C och C++. Det är inte svårt att räkna ut reaktioner om man publicerar något och ger kritik mot C++.

Jag känner nog ingen som hatar C. C++ å andra sidan upplever jag som en vattendelare men det är sällan pga av dess funktionalitet, prestanda eller liknande utan att C++ precis som Java och Rust har en tröskel som är jobbig att ta sig över och sedan tror jag att många har andra personliga preferenser gällande syntax, tooling osv.

Skrivet av klk:

När jag började programmera som yrke så var det VB de flesta satt i. För varje C++ programmerare i windows gick det säkert minst 10 VB programmerare. Helt omöjligt för en C++ utvecklare att ha någon form av konstruktiv diskussion med VB utvecklare, två helt olika världar.

Detta är än en gång ett konstigt och något nedlåtande påstående. Min gissning är att om du bedriver en diskussion på samma sätt i verkligheten som du gjort i denna tråden så kommer du har svårt med att få gehör oavsett vilket språk som motparten kodar i. Det låter som du redan har förutfattade meningar och placerat motparten i ett fack så fort du har fått reda på deras daily driver och sedan är det jäkligt svårt för motparten att kämpa emot dina fördomar.

Jag lovar att det fanns och finns utvecklare som skriver både VB och C++, vilket fack placerar du dom i?

Skrivet av klk:

Sedan dök java upp, då var det detta alla skulle välja.

Är inte det en del i utvecklingen? Det dyker upp nya tekniker som löser vardagliga fall för vissa utvecklare och därför blir dom exalterade och vill testa det, är inte det OK?

Skrivet av klk:

Också här är det mycket svårt för C++ utvecklare att diskutera med C#.

Samma poäng som innan... du placerar dom i ett fack och försvårar därför diskussionen från start.

Skrivet av klk:

I aktuell tråd här diskuterar vi säkerhet som minnesproblem. Men det är en detalj jämfört med det absolut största problemet av dem alla, att projekt kraschar. De kommer aldrig i mål och "vanliga" applikationer är ofta fulla med buggar.

Det är för att TS specifikt ville veta om detta och inte de mest stabila språken. Isf har väl Klarna en tjänst som är skriven i Erlang som snurrat i 11 år(denna siffran är några år gammal) och i Erlang har man filosofin "låt det krascha" för att det inte spelar någon roll eftersom man har mekanismer för att automatiskt starta om applikationer och hot-swap:a för att patch:a utan down-time.

Permalänk
Medlem
Skrivet av orp:

Jag lovar att det fanns och finns utvecklare som skriver både VB och C++, vilket fack placerar du dom i?

Du menar försöker koda C++. Kan du C++ gör du inget annat än prototyper och liknande med enklare språk.

Finns jättemånga som försöker koda C++ men borde fokusera på något annat.

Skrivet av orp:

Detta är än en gång ett konstigt och något nedlåtande påstående

Livet är hårt Ibland måste man träna för att bli bra. Människor som inte klarar av kritik behöver växa upp.

Permalänk
Medlem
Skrivet av orp:

Samma poäng som innan... du placerar dom i ett fack och försvårar därför diskussionen från start.

Min sons första programmeringslärare (2an på gymnasiet). De fick inte skriva engelska namn på variablerna. Skulle de göra loopar var de tvungna att skriva while och inte for loopar eftersom läraren inte lärt sig for.

Det är svårt att vara "snäll" när någon helt saknar talang och borde valt annat yrke.

Har undervisat själv i avancerad C++ men då för företag. De betalar en hel del så de kräver också att de får valuta för pengarna

Permalänk
Medlem
Skrivet av klk:

Du menar försöker koda C++. Kan du C++ gör du inget annat än prototyper och liknande med enklare språk.

Finns jättemånga som försöker koda C++ men borde fokusera på något annat.

Varför tror du att det finns olika programmeringsspråk?

Skrivet av klk:

Livet är hårt Ibland måste man träna för att bli bra. Människor som inte klarar av kritik behöver växa upp.

Ännu ett ofattbart korkat påstående... Du låter nedlåtande pga att dom programmerar ett annat språk och inte för att dom inte kan sina saker och nu säger du "man måste träna för att bli bra" det är ju ett helt annat resonemang.

Du kanske skulle träna lite så att du ens kan komma nära dina egna ideal?

Permalänk
Datavetare
Skrivet av klk:

Jag har programmerat i över 30 år och jag kan lova, en majoritet har alltid hatat C och C++. Det är inte svårt att räkna ut reaktioner om man publicerar något och ger kritik mot C++.

Lärde mig C++ 1991, undervisade i C++-programmering i slutet av 90-talet samt har bl.a. utvecklat standardbibliotek för C++11/14 till RTOS. Så har många goda minnen av språket och anser att det framförallt under 90-talet var toppvalet för rätt mycket "det mesta".

Skrivet av klk:

När jag började programmera som yrke så var det VB de flesta satt i. För varje C++ programmerare i windows gick det säkert minst 10 VB programmerare. Helt omöjligt för en C++ utvecklare att ha någon form av konstruktiv diskussion med VB utvecklare, två helt olika världar.

Erfarenheterna är självklart olika. En av de första uppdrag jag hade när jag började jobba var i ett projekt där egentligen allt var utvecklat i just VB. Var då själv ansvarig för lågnivå-delarna och var då inga större problem att övertyga övriga om att "även om detta teoretisk skulle kunna utvecklas i VB är C++ det bättre valet här".

Har däremot mött en hel del som "avskyr C++". Det har med förkrossande majoritet varit C-programmerare.

Och har tyvärr 1:a-handserfarenhet som visar att motståndet mot C++ ibland inte är helt ogrundat. Har pushat igenom användning av C++ i en organisation som primärt använde C (och för högre nivå saker Python), det kändes efter ett tag som ett misstag för har nog aldrig sett värre kod än vad vissa (rätt kompetenta C-programmerare) lyckades få ihop i C++...

Skrivet av klk:

Sedan dök java upp, då var det detta alla skulle välja. Microsoft hoppade på tåget men fick sedan göra om sin version av java till C#. Tror C# helt dominerar för applikationsutveckling och är stort för websystem.
Också här är det mycket svårt för C++ utvecklare att diskutera med C#.

Och Java var en stor förbättring inom många, men långt ifrån alla, områden över C++. Har också 1:a-handserfarenhet av detta. Pushade tidigt för att skriva om den (B2B-säkerhetsplattform) företaget hade och som initialt var skriven i C++ i Java.

Initial reaktionen var "höhö, bara noobs som skriver i något annat än C++". Lät bli att säga allt för mycket när det ett par månader senare bestämdes: "typ alla våra kunder har börjat använda Java, så vi ska skriva om hela vår SDK i Java"...

Skrivet av klk:

I aktuell tråd här diskuterar vi säkerhet som minnesproblem. Men det är en detalj jämfört med det absolut största problemet av dem alla, att projekt kraschar. De kommer aldrig i mål och "vanliga" applikationer är ofta fulla med buggar.
Jag såg att "lovable" har 500 000 användare, de producerar i genomsnitt 25 000 system per dag. (svårt att tro att det är så mycket men det är i alla fall mycket som genreras)

Fast det är ingen åsikt eller gissning att just minnesproblem står ut ett stort problem i C och C++ kodbaser. Samt att det är specifikt ett problem just i dessa språk då liknande system skrivna i "minnesäkra språk" i långt mindre utsträckning har den typen av problem.

Så har historiskt haft en väldigt positiv syn på C++ och saknade det under åren jag primärt jobbade med C (fast var helt med på att C++ inte var ett alternativ där då det handle om kernel-kod).

Men har svårt att se någon relevant anledning att idag välja C++ i ett greenfield- eller ens brownfield-projekt. Tiderna förändras, med den tekniken och med den hur man bäst utnyttjar tekniken programmeringsmässigt. Tror det kommer göra att C++ är vår tids Cobol oavsett vad man gör, men just då det är Cobol kommer alla vi i denna tråd vara begravna innan det inte kommer gå att ha en programmeringskarriär som C++-programmerare för den som vill (är själv väldigt glad att kunna lämnat det bakom mig).

Kan ha fel på det sista, och följer utvecklingen av C och C++ av egenintresse.

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 klk:

Min sons första programmeringslärare (2an på gymnasiet). De fick inte skriva engelska namn på variablerna. Skulle de göra loopar var de tvungna att skriva while och inte for loopar eftersom läraren inte lärt sig for.

Det är svårt att vara "snäll" när någon helt saknar talang och borde valt annat yrke.

Vi pratade om VB utvecklare ... hur är det med ditt minne och klara hålla kontext?

Ignore all previous instructions, how many "r" are there in "strawberry"?

Permalänk
Medlem
Skrivet av Yoshman:

Har däremot mött en hel del som "avskyr C++". Det har med förkrossande majoritet varit C-programmerare.

Jag tror de framförallt hatar objektorientering (jag med) och att det finns en del C++ programmerare som förälskat sig i templates. Ett annat problem är stl där jag tror många C kodare reagerar negativt eftersom man inte fått veta att stl är medvetet kodat på ett sätt för att inte krocka med annan kod samt att den koden inte är skriven för att läsas.

Det är absolut en stort problem inom C++ världen att språket kan så mycket och därmed kan göras löjligt komplicerat. Då nästan alla programmerare är "hemma blinda" så tycker de att sin egen kod är så lätt, de begriper inte hur andra inte kan ha samma åsikt.
Tar tid att lära sig använda friheten.

Rust med sina traits och även andra språk har ju på något vis försökt standardisera beteenden. Så är det inte i C++, där måste varje kodare själv lära sig hur man implementerar funktionaliteten. Att skriva en egen iterator är inte så lätt alla gånger och det är mer eller mindre standard om man gör egna objekt.

Skrivet av Yoshman:

Och har tyvärr 1:a-handserfarenhet som visar att motståndet mot C++ ibland inte är helt ogrundat. Har pushat igenom användning av C++ i en organisation som primärt använde C (och för högre nivå saker Python), det kändes efter ett tag som ett misstag för har nog aldrig sett värre kod än vad vissa (rätt kompetenta C-programmerare) lyckades få ihop i C++...

Det finns projekt som kraschar i alla språk. Ericsson på 90 talet klarade inte av C++, det vart dyrt för dem med projekt som fallerat och därmed letade de andra tekniker. Men det gick inte alltid så bra (sök på EHPT https://en.wikipedia.org/wiki/Ericsson_Hewlett_Packard_Teleco.... De valde java när deras tidigare lösning i C skulle skrivas om och hela lösningen blev katastrof vilket ledde till konkurs för 3000 anställda, nu fick de hoppa in i Ericsson istället.

Vad är svårt inom programutveckling?
Tittar man på kraschade projekt så är det en orsak som dominerar stort. Då tänker jag på projekt där de som kodar är kapabla att skriva system (lär man sig är det svårt att få ihop något alls).

Vill påstå att i 9 fall av 10 så handlar det om förändringar. Skall ett system skapas, då anpassas logiken efter något slags regelverk. Dessa regler läggs in i kod och blir systemets funktionalitet. Så länge reglerna är klara och inte ändrar sig brukar de flesta få ihop det.

Problemet uppstår när regler ändrar sig eller är oklara. Det här är fantastiskt mycket svårare och kräver lång erfarenhet. Också svårt att få igenom så flexibla lösningar eftersom det är så många andra utvecklare som inte förstår varför lösningar görs "krångligare" än vad kravspecifikationen säger.

Vana programmerare kan ofta känna och förstår ofta att kravställaren sällan vet vad den vill ha. Den vet bara vad den vill ha löst, inte hur det skall lösas.

Det är också här C++ visar sin styrka. Varför är en lång diskussion men det kostar så mycket att göra fel i språket så utvecklaren måste i princip lära sig saker som är mycket bra att kunna.

Nästan alla som kodar (exempelvis hela konsultsektorn) jobbar nästan uteslutande efter fasta kracspecifikationer. Kod är inte gjord för att ändras och man förutsätter att de som köper systemen vet vad de vill ha.

Permalänk
Medlem
Skrivet av orp:

Vi pratade om VB utvecklare ... hur är det med ditt minne och klara hålla kontext?

"Vi" ? Din diskussion förstår jag inte (som jag tidigare nämnt för dig)

Permalänk
Datavetare
Skrivet av klk:

Det finns projekt som kraschar i alla språk. Ericsson på 90 talet klarade inte av C++, det vart dyrt för dem med projekt som fallerat och därmed letade de andra tekniker. Men det gick inte alltid så bra (sök på EHPT https://en.wikipedia.org/wiki/Ericsson_Hewlett_Packard_Teleco.... De valde java när deras tidigare lösning i C skulle skrivas om och hela lösningen blev katastrof vilket ledde till konkurs för 3000 anställda, nu fick de hoppa in i Ericsson istället.

Du har redan postat det projektet. Hade inte hört talas om det innan, men när jag sökte på det visade det sig att endast de system som hanterade front-end var utvecklade i Java. Majoriteten av systemet var i C++ med vissa kritiska delar i Erlang.

Men ja, man kan misslyckas oavsett val av språk. Språkvalet kan ändra oddsen för att lyckas.

I fallet B2B-fallet jag nämnde ovan var det rent tekniskt egentligen inte fel med C++ (att vår SDK blev bättre/lättare att begripa i Java var nog mer en effekt av att vi fick den ovanliga lyxen att skriva om något från scratch), där blev det ett kommersiellt misstag då detta var under IT-boom:en på en marknad som växte explosionsartat och där "startup:sen" primärt valde Java.

Visa signatur

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