Varför finns det alltid en "C++ Killer"?

Permalänk

Varför finns det alltid en "C++ Killer"?

Jag undrar varför det alltid ska finnas en utmanare till C++ och C?

Rust är ett språk som verkar ha fått mycket stor uppmärksamhet bland öppen källkodsvärlden.
Nu finns det ett språk som heter Zig som sägs bara en ersättare till Rust och snart kommer Carbon som sägs vara ultimata ersättaren.

Varför kommer dessa språk hela tiden som sägs ska kunna ersätta C och C++? Men det händer inte. Varför inte då?
Jag tittar på halvledarföretagen och inget av dessa har implementerat Rust, Zig eller Carbon. Istället är det C, C++ och Assembler som finns tillgängligt där.

Varför är det på detta viset att det skall alltid finnas en "C++ Killer"?

Permalänk
Medlem

Det är väl precis som allt annat som är populärt, folk börjar spekulera om en "dödare". Känner du till spelet WoW har du säkert hört talas om alla WoW-killers som kommit ut.

Anledningen till att många implementerar C++ är ju för att det är relativt enkelt att göra, det finns många referensimplementationer och mycket källkod och bibliotek att tillgå.

Permalänk
Skrivet av Curik:

Det är väl precis som allt annat som är populärt, folk börjar spekulera om en "dödare". Känner du till spelet WoW har du säkert hört talas om alla WoW-killers som kommit ut.

Anledningen till att många implementerar C++ är ju för att det är relativt enkelt att göra, det finns många referensimplementationer och mycket källkod och bibliotek att tillgå.

Fast WoW dog ju väll ut i jämförelse med nya spel? Eller? Jag är dåligt uppdaterat om WoW.

Jag har inget emot Rust, men jag tycker att Rust verkar betydligt svårare än C++. Det är....så mycket mer att skriva.

Personligen så programmerar jag i C. C++ händer, men då är det speciella bibliotek för hantera grafik.

Permalänk
Medlem

C++ är bara ett försök till en ADA dödare.

Permalänk
Medlem
Skrivet av heretic16:

Fast WoW dog ju väll ut i jämförelse med nya spel? Eller? Jag är dåligt uppdaterat om WoW.

Jag har inget emot Rust, men jag tycker att Rust verkar betydligt svårare än C++. Det är....så mycket mer att skriva.

Personligen så programmerar jag i C. C++ händer, men då är det speciella bibliotek för hantera grafik.

Ja men det tog lång tid. C++ kommer säkerligen också ersättas så småningom.

Eftersom du är van vid C/C++ så kan det säkert kännas som att Rust är "mycket mer att skriva". För mig funkar det iaf så tills jag är van vid något. Men det är bara en gissning.

Permalänk
Medlem
Skrivet av heretic16:

Jag undrar varför det alltid ska finnas en utmanare till C++ och C?

Rust är ett språk som verkar ha fått mycket stor uppmärksamhet bland öppen källkodsvärlden.
Nu finns det ett språk som heter Zig som sägs bara en ersättare till Rust och snart kommer Carbon som sägs vara ultimata ersättaren.

Varför kommer dessa språk hela tiden som sägs ska kunna ersätta C och C++? Men det händer inte. Varför inte då?
Jag tittar på halvledarföretagen och inget av dessa har implementerat Rust, Zig eller Carbon. Istället är det C, C++ och Assembler som finns tillgängligt där.

Varför är det på detta viset att det skall alltid finnas en "C++ Killer"?

Därför att C, och framför allt C++ är usla språk som är i stort behov av att ersättas, och journalister tycker att det låter häftigare att prata om en "C++ Killer" än om bara ytterligare ett nytt programmeringsspråk. Tyvärr är det svårt att få fram språk som är tillräckligt mycket bättre för att lyckas. Eller snarare - språken i sig går nog att byta ut relativt enkelt, men inte alla olika bibliotek som finns till och som är vad som verkligen är svårt att ändra.

Permalänk
Medlem

Sedan är ju C ett språk som är basal i sin assemblergenerering, med ett minimum av kollar under körningen. (Nära metallen som det brukar benämnas) Sådant ger prestanda som är välbehövlig på inbyggda system. Alla nya språk försöker lösa diverse problem hos dessa oldtimerspråk, men till syvendes är det prestandan och kostnaden som räknas. Det kommer alltså alltid att födas nya språk med mera finesser, men eftersom de genererar mera kod så hålls de än så länge tillbaka. Det är ju lite skillnad på om det är en DVD för 499:-- (inkl 25% moms) eller ett kärnkraftverk där du kan överdimensionera processorn och dra nytta av alla språkfinesser.

Mycket av detta har även att göra med hur välskrivna kompilatorerna är. Språk som delar backend/optimering tjänar ju på detta. Sen har vi ju andra som gör på sina egna sätt, är det rust som kompilerar koden minst två gånger för att försäkra sig om att binären blir identisk?

Permalänk
Datavetare

@Erik_T slår huvudet på spiken! Inte ens de som jobbar med C++ standarden verkar invända mot att Rust är ett bättre språk än C++.

Det gör ändå inte Rust till en "C++-dödare". Finns massor med anledningar till att fortsätta använda C++, alla kan egentligen sammanfattas med "i många fall har man inget val". Om det är möjligt att välja Rust, Go eller liknande ska man definitivt göra det för de fixar en lång rad problem med C och C++!

C kommer "aldrig" (d.v.s. inom överskådlig tid, vi lär alla vara pensionerade om/när det händer) ersättas då det i praktiken är "lingua franca" för alla andra programspråk. D.v.s det är metoden som används som brygga mellan andra språk/ramverk.

C är så viktigt att C++, Rust, Zig och Go alla har standardfunktioner för att interagera med dessa. Go har gått så långt att den automatiskt kan konsumera C-headers för att skapa adapters (finns som extra tillägg i många andra språk).

Rust, Zig och Carbon har olika mål. Det enda gemensamma är att alla är "systemspråk" samt att de fixar saker som är kända problem i C och C++.

Zig
Zig vet jag väldigt lite om. Kollade lite snabbt, det har ju fortfarande inte nått en första officiell release så är väldigt svårt att säga något om det blir ett i raden av språk som skapas men i praktiken aldrig används. Eller om det hittar sin plats.

Läser man lite snabbt om Zig verkar fokus vara att hålla kvar vid manuell minneshantering (vilket är gemensamt för alla ovan nämnda språk). Ett annat huvudfokus verkar vara en design som underlättar portabilitet av kod mellan olika arkitekturer, allt från olika CPU-arkitekturer till FPGA, GPU etc.

Carbon
Carbon är ett viktigt projekt, även om Carbon som språk helt misslyckas att ta någon relevant andel (vilket jag själv tror är den sannolikaste utgången). Ett huvudfokus för Carbon är att "bygga ett bättre C++ utan att vara bakbunden av bakåtkompatibilitet".

Carbon är också unikt i att det enda (eller i alla fall en av ytterst få) språk som har direkt kompatibilitet med C++ kod. Ett lite märkligt beslut i C++ är att aldrig definiera en stabil binär ABI, utan en sådan finns inget standardiserat sätt att använda C++ kod med mindre än att man har möjlighet att kompilera om all kod i API-lagret alt. vara säker på att C++ biblioteken är kompilerade med en kompilator som verkligen är binärkompatibel med den man själv använder.

Just kompatibiliteten med C++ gör ändå att Carbon fortfarande är bakbunden på ett sätt som hindrar att fixa flera av de värsta tillkortakommandena med C++. Av den anledningen blir det nog mer en experimentverkstad för vad som kan vara vettigt att stoppa in i standard C++, än en framgångsrikt språk på egen hand.

Rust
Rust huvudfokus är att fixa en av C/C++ mest dyrbara misstag: hur lätt det är att göra den typ av buggar som leder till säkerhetshål. Microsoft säger att ca 70 % av alla deras CVEer kommer från den typen av buggar, en förkrossande majoritet av dessa misstag skulle inte kompilera om man använder "safe Rust"! Så det (ekonomiska) värdet av Rust är uppenbart.

Vidare fixar Rust de lite märkliga "alias regler" (som man kan stänga av i de flesta kompilatorer, men då finns risk att saker går sönder) som finns i C/C++. Detta medför att vissa typer av konstruktioner kan optimeras bättre av en Rust kompilator jämfört med motsvarande kod skriven i C/C++. D.v.s. Rust är i vissa fall snabbare än C/C++ och i de flesta fal är det väldigt snarlikt i prestanda.

Nu har jag bara gjort 2 år Advent of Code samt ett lite större projekt i Rust. Erfarenheten därifrån är att Rust inte kräver mer kod än C++. Visste kan det krävas mer kod i specifika områden, men den typ av problem man ställs inför i Advent of Code så krävs det om något mindre kod i Rust jämfört med C++ (gjort AoC tre år med C++).

Rusts huvudproblem är att det är så stor initial tröskel att ta sig över. Det kommer nog hindra detta språk från att bli riktigt stort.

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

Jag undrar varför det alltid ska finnas en utmanare till C++ och C?

Det kommer alltid uppstå utmanare till allt inte enbart programmeringsspråk. Som människor så fungerar vi väldigt olika och om något inte resonerar med hur du tänker eller vill lösa problem, då uppstår behov för alternativ. Personligen tycker jag inte att man ska motsätta sig detta, om man inte utmanar status quo så kommer man aldrig se utveckling.

Precis som för andra områden så sker det utveckling av programmeringsspråk och nya paradigm/koncept introduceras som förenklar för utvecklare. C och C++ har funnits ett tag och det är svårt att göra förstora förändringar i språken utan att skapa svårigheter för existerande projekt, ska man stödja den nya versionen för features eller behålla bakåtkompatibilitet?

Skrivet av heretic16:

Rust är ett språk som verkar ha fått mycket stor uppmärksamhet bland öppen källkodsvärlden.
Nu finns det ett språk som heter Zig som sägs bara en ersättare till Rust och snart kommer Carbon som sägs vara ultimata ersättaren.

Rust har fått mycket uppmärksamhet eftersom språket är konstruerat på ett sådant sätt att det kan erbjuda garantier gällande vanliga problem i C (Jag är oklar gällande C++ eftersom jag inte kodar C++). För att Rust ska kunna lämna dessa garantier så krävs ibland annoteringar för att hjälpa kompilatorn och det kan ibland upplevas som komplicerat.

Zig sägs kunna lösa en del av komplexiteten som Rust har med sina annoteringar. Kompilatorn verkar exempelvis kunna räkna ut minneslivslängder på ett automagiskt sätt. Min uppfattning är att Zig inte explicit tagits fram som en ersättare till Rust utan ett alternativ till C och hamnar i samma kategori som Rust. Jag kan förstå varför man kan se Zig som en ersättare till Rust med det förenklade utvecklingsförfarandet. Det tåls att nämna att jag sett Zig program som segfaultar något som jag ännu inte sett i Rust dvs min uppfattning är att Zig inte lämnar samma starka garantier som Rust.

Skrivet av heretic16:

Varför kommer dessa språk hela tiden som sägs ska kunna ersätta C och C++? Men det händer inte. Varför inte då?
Jag tittar på halvledarföretagen och inget av dessa har implementerat Rust, Zig eller Carbon. Istället är det C, C++ och Assembler som finns tillgängligt där.

Dom kan teoretiska ersätta C och C++ men det krävs att språken anammas av existerande community. För många projekt är det inte relevant eftersom det skulle kräva en omskolning av majoriteten av projekt-communitiet följt av en omskrivning från scratch som antagligen kommer introducera allvarligare logiska fel.

SoC-tillverkare vill sikta på så stor skara utvecklare som möjligt. Genom att erbjuda C så täcker dom upp för C och de flesta andra språk som kan interface:a mot C (C++, Rust, Zig, Go, Python, Erlang, Java osv).

För att avsluta med ett tips. Jag brukar se på språk som verktyg. Du ska självklart välja det språk som du är bekväm med eller ett språk som intresserar dig dock är det kanske bra att lära dig några olika språk för olika syften. Typ ett lågnivå, ett högnivå, ett skriptspråk, ett concurrent-språk. Detta är dock en balansgång där man ska vara lite försiktig med att bli för spretig, annars riskerar man att sakna djupare förståelse för språken.

Permalänk
Skrivet av Yoshman:

Rusts huvudproblem är att det är så stor initial tröskel att ta sig över. Det kommer nog hindra detta språk från att bli riktigt stort.

Borde inte detta vara logiskt?
Om Rust är bättre än C++, men svårare, ja då får man det man betalar för?

Jag tycker Rust verkar krångligt. Konstig syntax.

Permalänk
Datavetare
Skrivet av heretic16:

Borde inte detta vara logiskt?
Om Rust är bättre än C++, men svårare, ja då får man det man betalar för?

Jag tycker Rust verkar krångligt. Konstig syntax.

Beror på vilka brister man fokuserar att fixa.

Go är på en lång rad sätt bättre än C och C++, ändå är det ett långt enklare språk än C++ och skulle vilja hävda att det även är enklare än C (då har jag ändå ~30 års erfarenhet av C och C++, mindre än 1 år med Go, skulle ändå aldrig vilja gå tillbaka till C/C++ i de fall jag nu använder Go). Fast en av huvudmålsättningarna med Go är just att det ska vara enkelt då man identifierat användare av "stora komplexa språk" som ett stort problem i projekt med många iblandade och stor kodbas.

Det som är spännande med Rust är att man gett sig på att nära nog lösa en av den värsta klassen av buggar vi har i IT-världen. Och man gör det i ett språk lämpligt ända ned till OS-kernel utveckling, d.v.s. verkligen ett "system level" språk.

I Linux jobbas det redan för att möjliggöra bl.a. drivrutiner i Rust. Vad jag förstår jobbar Microsoft med liknande för Windows.

Värt att notera att ingen av dessa OS använder C++ i kärnan. Det är fullt tekniskt möjligt att tillåta det, eller i alla fall delvis, finns OS som tillåter en relativt stor delmängd av C++ att användas i OS-kärnan. Rust (och vad jag förstår även nämnda Zig) har en väldefinierad/standardiserad delmängd som fungerar i t.ex. OS-kärnor och mikrokontrollers, använder man C++ blir det lite upp till var och en att definiera denna delmängd.

Så även detta är ett tillkortakommande som "C++-killers" fixar, men här finns försök till standard även för C++, t.ex. detta och detta

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

Borde inte detta vara logiskt?
Om Rust är bättre än C++, men svårare, ja då får man det man betalar för?

Jag tycker Rust verkar krångligt. Konstig syntax.

Kostnaderna för mjukvaruproblem blir dyrare ju närmre slutanvändaren som dom upptäcks. Min uppfattning är att man röker ut betydligt fler problem innan programmet ens kompileras i Rust, jämfört med andra språk. Rust är krångligt när man måste guide:a kompilatorn gällande exempelvis livslängder för minne. Syntax är alltid konstig i nya språk. När juniora utvecklare börjar med Python så tycker dom att det är svårt att tillfredsställa interpretern för att dom har dålig koll på indentering.

Skrivet av Yoshman:

I Linux jobbas det redan för att möjliggöra bl.a. drivrutiner i Rust. Vad jag förstår jobbar Microsoft med liknande för Windows.

Den första Rust-drivaren har landat upstream i Linux om jag inte är helt fel på det.

Om man ska ge en kommentar om Go vs Rust så i Go valde man att designa ett simpelt språk som är lätt att lära med få features. Man missade inledningsvis att implementera något i templating-kategorin av features dvs macros/templates/generics. Nyligen har generics introducerats i Go men det kom med en hel lista begränsningar (några av dessa löstes i senaste releasen) men detta ihop med prestandadippar pga GC gjorde att jag valde om från Go till Rust. Samt att jag pysslar mestadels med embedded och C så Rust passar min profil bättre.

Permalänk
Datavetare
Skrivet av orp:

Om man ska ge en kommentar om Go vs Rust så i Go valde man att designa ett simpelt språk som är lätt att lära med få features. Man missade inledningsvis att implementera något i templating-kategorin av features dvs macros/templates/generics. Nyligen har generics introducerats i Go men det kom med en hel lista begränsningar (några av dessa löstes i senaste releasen) men detta ihop med prestandadippar pga GC gjorde att jag valde om från Go till Rust. Samt att jag pysslar mestadels med embedded och C så Rust passar min profil bättre.

Har kikat rätt grundligt på implementationen av Rust och Go för ett par år sedan, detta för att lägga in stöd för dessa i ett RTOS. Slutade med att endast Rust togs med (har även implementerat C11 och C++11/14/17 standardbibliotek för samma OS).

Är det något som är unikt/bra med Go, förutom att det är ett så enkelt språk att lära sig, är den otroligt genomtänkta modell man använder för att schemalägga "go-rutiner" över tillgängliga CPU-kärnor.

Men precis som du skriver: Go har samma problematik som alla språk med GC, inte en bra match om man är ute efter bra realtidskrav (och var det som gjorde att Go skippades efter "proof-of-concept" delen).

Däremot fungerar Go super för embedded förutsatt att man bara har "mjuka" realtidskrav. Är precis sådana saker jag använder Go till i nuläget (ihop med fältbussar som SPI, I2C, RS485 etc). Go:s sätt att implementera interface är faktiskt riktigt smidigt när man bygger APIer mot HW-register . Men självklart är Go:s riktigt stora styrkor i mer traditionella "backend" system och/eller egentligen allt där man har mycket samtidig I/O att hantera.

Template (som kom i 1.18 våren 2022) känns som de lika gärna kunde skippat. Är några enstaka saker som blir lite trevligare, men är väldigt sällan man verkar behöva det om man skriver idiomatisk Go. Är fullt möjligt att programmera "funktionellt" i Go, finns även ett gäng bibliotek för detta. Men håller med de som säger: but why? Det finns bättre språk om man vill ha den stilen, en av Go:s styrkor är att koden är lika explicit och lätt att följa som C (till skillnad från t.ex. C++ saknar dessa "implicita" anrop).

Gillar Rust, det är trevligt efter man kommit över den initiala frustrationen med att bråka med "borrow-checker". Men har insett att jag underskattat de egenskaper man prioriterade när Go designades. Var först när jag verkligen började skriva Go-kod som det blev uppenbart hur rätt tänkt "enkelheten" är.

Orsaken till att det blev Go initialt var för att ett bibliotek jag behövde för low-level stuff på RPi4 (saker som använder GPIO-pinnarna) visade sig vara "abandonware" i dess C++ form, C++ var det spåk jag tänkte använda. Visade sig att Go hade ett bibliotek för motsvarande funktioner med bra dokumentation och aktiv utveckling (+ att jag då kört Advent of Code i Go en gång och valde därför att köra det 2022 också).

Just fokus på specifika saker tror jag är viktigt om man ska ha en poäng som språk. Rust har ju sin "killer-app" med att saker som minnesläckor och, än viktigare, race-condition orsakar kompileringsfel (hur brutalt bra är inte det för t.ex. drivers?). Go har sin enkelhet och klassledande "concurrent programmering" modell (async/await som andra annamat, inklusive Rust, är en katastrof jämfört med det Go/Erlang har). Zig:s fokus på portabilitet och hur man kan opt-in i bara de delar av standardbiblioteket som man faktiskt behöver kan ge det en vettig nisch

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 har sin enkelhet och klassledande "concurrent programmering" modell (async/await som andra annamat, inklusive Rust, är en katastrof jämfört med det Go/Erlang har). Zig:s fokus på portabilitet och hur man kan opt-in i bara de delar av standardbiblioteket som man faktiskt behöver kan ge det en vettig nisch

Om jag förstått det rätt så erbjuder Rust enbart språkkoncepten för lättviktiga processer men vill inte påtvinga utvecklare en runtime, därför har man valt att lägga det utanför. Det är väl därför implementationer som tokio används flitigt.

Jag kom från Erlang när jag började med Go och jag blev ganska besviken med concurrency-implementationen. Jag tycker att den påminner alldeles för mycket om pthreads med channels (spawn, join(mha waitgroup), select).

Jag råkade göra ett misstag tidigt där jag satt fel riktning på en channel som resulterade i att applikationen frös. Kompilatorn klagade inte och jag kunde inte hitta felet med varken race detection eller debuggern. Jag tycka att man borde fått en kompilator varning eller något.

I övrigt så är Go väldigt lätt att komma igång med och jag upplever mig själv som väldigt produktiv. Jag tycker att Go utmanar Python en del. Jag har för vana att skriva funktionstester i Python med pytest men jag upplever att dom skalar dåligt(lång exekveringstid). Min plan framöver är att växla till Go's testing.

Permalänk
Medlem

Tänk Fortran då som har funnits i över 60 år. Det har förenklats och ändrats en hel del genom åren men används fortfarande. Snacka om seglivat.

Permalänk
Datavetare
Skrivet av orp:

Om jag förstått det rätt så erbjuder Rust enbart språkkoncepten för lättviktiga processer men vill inte påtvinga utvecklare en runtime, därför har man valt att lägga det utanför. Det är väl därför implementationer som tokio används flitigt.

Jag kom från Erlang när jag började med Go och jag blev ganska besviken med concurrency-implementationen. Jag tycker att den påminner alldeles för mycket om pthreads med channels (spawn, join(mha waitgroup), select).

Jag råkade göra ett misstag tidigt där jag satt fel riktning på en channel som resulterade i att applikationen frös. Kompilatorn klagade inte och jag kunde inte hitta felet med varken race detection eller debuggern. Jag tycka att man borde fått en kompilator varning eller något.

I övrigt så är Go väldigt lätt att komma igång med och jag upplever mig själv som väldigt produktiv. Jag tycker att Go utmanar Python en del. Jag har för vana att skriva funktionstester i Python med pytest men jag upplever att dom skalar dåligt(lång exekveringstid). Min plan framöver är att växla till Go's testing.

Har förstått det på samma sätt . Vet hur mycket man planerar lägga in i språket kring async, finns ju fördelar med att hålla saker som bibliotek.

Tokio gör väl ungefär ett så bra jobb man kan göra givet förutsättningarna, d.v.s. att man i grunden har just OS-level trådar man jobbar med (så samma som async i C++, C# etc). Det fungerar inte att ha massiv mängd OS-trådar, varken schemaläggningen eller mängden minnen gör det realistiskt att hantera 10-tusen och än mindre 100-tusentals trådar.

Problemet med async/await modellen är att den leder till system som är exceptionellt svåra att förstå (d.v.s. förstå runtime beteendet) och därmed debugga. Rent prestandamässigt fungerar tekniken, den är bara väldigt svårt att debugga. Använde just Tokio i det lite större Rust projekt jag jobbat med, det var väl den mindre trevliga upplevelsen av Rust (fanns andra delar / processer i det projektet som tack och lov inte körde async).

Det som är unikt med Go (och som jag förstår det även Erlang, har bara gjort småsaker i Erlang + läst en del om implementation) är att stacken kan växa dynamiskt (vilket inte är möjligt i C, C++, C#, Java, Python, Rust, etc). De flesta tasks (Go-rutiner / Erlang processer) kommer klara sig med en stack på bara några 100-tals bytes, så är minnesmässigt inga problem att ha 100-tusentals sådana!

Kan inte detaljerna kring hur Erlang schemalägger sina processer (i alla fall inte på den nivå jag satt mig in i Go:s modell). Go har även här en modell som utan problem hantera 100-tusentals "go-rutiner". Något som är helt orealistiskt med pthreads (även om man hade tillräckligt med RAM skulle prestanda bli horribel).

Dessa två saker sammantaget: man slipper hålla på med "asyn/overlapped I/O" som gör det svårt att riktigt se vad som händer. Istället kan man köra helt vanlig blockade I/O i dessa taskar (vilket i debuggern också gör saken enkel då varje go-routine/erlang-process har en egen call-stack, inte en kompilatorgenererad tillståndsmaskin som är fallet för async/await).

Det är en (av flera) killer-app för Go/Erlang.

Killer-app för C och C++ är idag mängden programvara/bibliotek som redan finns och är skrivet i dessa språk. C har också att det är "standarden" för egentligen allt annat när man kommunicerar mellan olika språk/ramverk. Sen är ju C och C++ möjliga att skriva riktigt snabba program i, dock inte fundamental snabbare än t.ex. Rust och Fortran (och inte långt efter kommer Swift, Go, Java, m.fl).

Skrivet av kaimor:

Tänk Fortran då som har funnits i över 60 år. Det har förenklats och ändrats en hel del genom åren men används fortfarande. Snacka om seglivat.

Har bara läst Fortran-kod, aldrig skrivit något. Men även här finns ju en "killer-app". Semantiken hos Fortran gör det långt enklare/effektivare att utnyttja SIMD-instruktioner för saker som matris-operationer jämfört med C/C++.

Så Fortran kan vara klart snabbare än C/C++ för vissa områden, områden som är tillräckligt viktiga/vanliga för att Fortran ska kunna leva vidare. Finns ju lite varianter av C/C++ som kommer runt problemet, Nvidias CUDA är en, Intels ISPC är en annan. Dessa är ändå inte C eller C++, de är bara "C/C++-like".

Varken CUDA eller ISPC ersätter C eller C++, det är inte alls tanken. Utan de hanterar bara en rätt specifik nisch, det långt bättre/mer effektivt än vad som är möjligt i C eller C++.

Någon som har lite insikt i hur pass väl "ren" Fortran fungerar för att ge riktigt bra SIMD-kod via en kompilator? Vet egentligen inte mer än att Fortran hanterar just detta klart bättre än C och C++.

Visa signatur

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