Välkommen till linuxportalen.se!

Linuxportalen.se är Sveriges största och aktivaste webbplats för användare av öppen- och fri programvara.

Du besöker Linuxportalen.se som gäst vilket begränsar din möjlighet att använda webbplatsens alla funktioner. Genom att registera dig som medlem får du inte bara möjlighet att söka bland webbplatsens innehåll, skapa nya och delta i befintliga diskussioner, skapa din egen blogg, kommunicera med andra medlemmar genom privata meddelanden och delta i omröstningar. Du får också tillgång till Veckans Kadavro - en seriestrip unikt skapad för Linuxportalen.se!

Registeringen sker snabbt och är helt kostnadsfri - tveka inte, bli medlem idag!

C++ - en klumpig dinosaurie

Jag trivs själv dåligt med C++, men jag gillar både Java och C (de är små och trots det kraftfulla). På något vis känns det som att C++ har stöd ett flertal tekniker, men driver ingen linje till fullo.

Jag skriver ofta program där samma objekt kan delas och hanteras av flera "ägare" - här får man stora problem i C++, vem ska ta bort objektet och vem ska avgöra det? Referensräknare kan implementeras snyggt i C++, men det fungerar inte för cirkulära strukturer som man tyvärr ofta kan få (särskilt om ägaren känner till ägodelen och ägodelen känner till sin ägare). Man ska inte behöva bekymra sig om sådant i ett "högnivåspråk".

Därmed inte sagt att C löser problemet bättre, men det känns som att ett så avancerat programmeringsspråk som C++ är lite handikappat om det inte kan lösa ett så vanligt problem per automatik. Med C är programmeraren helt fri att designa en lösning på hur objekt/element ska användas, skapas, fungera, samverka och tas bort (och i bästa fall återanvändas) - en frihet på gott och ont.

Har man använt trådar, monitorer och blivit bekväm med garbage collection i ett språk som Java, känns C++ så primitivt. Vill man ha dessa feutures i C++ får man snickra på dem utanpå, som att spika på brädor för att täta ett gammalt murket tak. Ännu mer komplexitet på ett redan komplext språk.

iostream verkar snyggt, generaliserat och enkelt på ytan - stl likaså. Men att skriva en egen generell mallklass är ingen lätt uppgift och koden blir sällan vacker.

I standard C++ kan man hantera unicode genom mallar tex. basic_string, men hur ofta är det egentligen användbart. I verkligheten används UTF-8 och ingen standardklass kan hantera detta.

g++ är ingen särskilt lysande C++ kompilator, och det är överhuvudtaget inte lätt för en kompilator att optimera kod i ett språk med avancerad syntax. Inte heller är det lätt för programmeraren att skriva den.

Visst, mallar är bra och objektorientering är också trevligt - men C++s implementation är alldeles för komplicerad, hur ofta används något annat än publikt arv? Hur ofta tillämpas multipelt arv? Javas "interfaces" är betydligt renare. Att använda mallar är en fröjd, men att skapa dem på ett "ordentligt sätt" är inte enkelt.

C som språk är enklare än C++ - man kan lära det språket på ganska kort tid (det samma gäller Java och det stödjer ändå det mest användbara i C++). C++ är ett rejält projekt att sätta sig in i till fullo.

Slutligen kan man åstadkomma precis allt i C som i C++, ibland blir det mindre vackert - ibland vackrare. Man kan skriva vacker C-kod - faktiskt. Verktygen må vara färre men friheten desto större.

C++ är mäktigt, men det står på ostadig grund - det vill vara allt och lyckas precis lika bra som en ensamstående fembarnsmor. Det går inte att vara bäst på allt - man blir halvbra och får ständigt göra komprimisser.

Det finns en princip inom programmering som kritiserar "överdesign", dvs att skapa "features" som "skulle kunna vara bra att ha" innan man vet ifall de verkligen behövs. Genom att lägga till dem skapar man ökad komplexitet utan någon egentlig anledning. Jag tycker man har exprimenterat för mycket vid design av C++. När man skapades Java valde man att göra språket litet ifrån start och nya egenskaper har istället lagts till sakta med säkert, när de väl visat sig nödvändiga.

UNIX och C lever och frodas än, mer än 30 år efter dess skapelse. C++ tappar allt mer mark för modernare och enklare språk såsom python/Java/C#. Keep it simple stupid Smile

--------------------------------
where my .emacs is, that's my home

Alternativ för kommentarvisning

Välj ditt önskade sätt att visa kommentarerna och klicka på "Spara" för att verkställa dina ändringar.

muchas bild

Okej, jag kör egentligen mycket hellre java/python om jag får välja språk. Fast ifall jag vill ha ett snabbt litet program är c++ mitt självklara val. Eftersom jag alltid programmerar objektorienterat så känns C++ naturligare då, samt så ser jag inte vad C kan ge mig som inte C++ har. Men jag kan hålla med dig om att de känns lite bökigt att hålla på med objekt/classer i C++

distens bild

Såg att du flyttade hit din kommentar från forumet. Undrar vilken bok/böcker som du rekomenderar?

netbears bild

Känner mig tvungen att ge min syn på C++.

Det stämmer C++ är ett ganska komplext språk med många möjligheter. Därmed inte sagt att du måste använda alla dessa. Tycker du det är smidigare med en metod som heter "add(int hej)" eller lilnande är du självklart välkommen att implementera denna istället för att överlagra den mer intuitiva operatorn +. Den resulterande maskinkoden lär efter kompilering bli (i stort sett???) den samma.

Vidare tillåter c++ användning av en mängd olika programeringsmetodiker och det är upp till programeraren att välja och använda en eller flera.

"g++ är ingen särskilt lysande C++ kompilator, och det är överhuvudtaget inte lätt för en kompilator att optimera kod i ett språk med avancerad syntax. Inte heller är det lätt för programmeraren att skriva den."

Vet egentligen inte så mycket om C++ kompilatorer så det skulle vara kul att känna till bristerna i g++. Finns det någon annan kompilator som är bättre? Och hur fungerar det egentligen? Jag har fått för mig att en c++ kompilarot "kompilerar" din kod till C kod och en C kompilator kompilerar den till maskinkod och att det är därför det tar betydligt längre tid att kompilera att c++ program. Resultatet borde alltså bli ganska bra då gcc inte mig veteligt är en dålig kompilator. Rätta mig gärna om jag har fel. Vidare finns det redan en hög c++ kompilatorer så vi dödliga behöver inte skriva dem! Face it hur många java kompilatorer har ni skrivit? och hur svårt skulle det inte vara att skriva en?

I alla fall så känns Java mer som C++ for dummies, inget ont menat, jag använder själv Java iblande men jag blir ofta besviken på dålig prestanda specielt om man vill ha någon form av GUI.

Jag ser C++ som ett väldigt effektivt språk, men som sagt du behöver veta vad du vill. Det är som ett julbord. Där finns lite av allt men gillar du inte sillen hoppa över den och det kan bli kladdigt om du ska ha allt på en gång.

Java är mer som en burk barnmat, färdigtuggad och utan valmöjligheter bara gapa och svälja. Åter igen, detta behöver inte vara något dåligt... det kan drar ner utvecklingstiden men till vissa kostnader.

God jul!
-------------------------------------------
Björn (netbear)
Numbers don't lie, people do.

------------------------------------------- Björn (netbear) Numbers don't lie, people do.

Kristians bild

Jag har tyvärr inget tips på någon bra C-bok Sad Jag har lärt mig C genom C++ och lärt mig uppskatta och utveckla mina färdigheter i det genom kurser på LTH.

Det är absolut inget fel att lära sig C++ - det är ett mycket använt och användbart språk, det är dock inte mitt favoritspråk, det är allt Smile Min första och mest lästa C++-bok är "C++ programmering" av Stephen Prata. Den är mycket bra och du lär dig även C om du följer den. Böcker som "C++ Direkt" börjar direkt med STL och C++:s standardklasser och hoppar över grundläggande C (eller väntar med det till senare), resultatet blir förmodligen detsamma men synen en annan.

----------------------------------
where my .emacs is, that's my home

---------------------------------------

 

Kristians bild

Jag tänker oftast objektorienterat även när jag kodar C Smile

----------------------------------
where my .emacs is, that's my home

---------------------------------------

 

Kristians bild

GCC har den stora fördelen att vara så gott som "standard", den finns för så gott som alla plattformar och den är väldigt stabil och tämligen buggfri.

gcc optimerar emellertid inte i närheten av vad intel's eller ibm's c-kompilator förmår (eller den c99-kompilator som en av d-lektorerna på lth har knåpat ihop). gcc har ganska nyligen gått över till ssa-form för att enklare kunna utföra många optimeringar, detta har funnits i många år i kommerisella kompilatorer. Det finns en himla skoj kurs i optimerande kompilatorer som jag varmt rekommenderar netbear.

Givetvis kan C++ ge betydligt snabbare program än Java och givetvis ger C++ till viss del programmeraren större utrymme än Java/Python/C# (beroende på hur man ser på det). När processorerna blir snabbare och snabbare, minnen billigare och JIT:erna bättre och bättre suddas dock detta ut allt mer. Det handlar så klart också om tycke och smak, hur och med vad man vill programmera. Man ska koda med det man trivs med Smile

Dyker du förresten upp den 27:e?

----------------------------------
where my .emacs is, that's my home

---------------------------------------