C# versus C++

Tags:    diverse programmering

Hejsa, jeg har en lille håndfuld spørgsmål, som udspringer af ren nysgerrighed.

  1. Hvad er egentlig forskellen på C# og C++?

  2. Hvilket sprog er bedst til GUI programmering?

  3. Hvilket sprog er bedst til Spil programmering?

  4. Hvilke ulemper har de to typer sprog?

  5. Hvordan kommer jeg bedst igang med et af sprogende (Har i nogle bøger/hjemmesider i vil anbefale)?


Jeg har ofte gået med disse spørgsmål, da jeg aldrig syntes at kunne finde ordentligt svar på dem, på nogle google search's. Jeg overvejer også at 'selv'-studere et af sprogende, og derfor ville det være meget rart at høre jeres mening og svar på spørgsmålene :)

På forhånd tak!




Indlæg senest redigeret d. 11.04.2011 19:47 af Bruger #4487
1. http://www.thinkingparallel.com/2007/03/06/c-vs-c-a-checklist-from-a-c-programmers-point-of-view/ fortæller meget godt de basale forskelle.

2. Det kommer an på hvad du mener med GUI. Et simpelt Windows program med et brugerinterface er nemt at lave i C# og mere kompliceret i C++.

Men avanceret 3D grafik som i et spil, så har du flere muligheder i C++.

3. De fleste grafik-motorer er lavet i C++, så jeg gætter på at det er bedst :-)

4. C++ har den ulempe at man skal huske alt selv (i grove træk) og man får ikke noget foræret. Det er et sværere sprog at lære i mine øjne.





1:
C# har (stortset) ingen arbitrære pointers, og kan derfor ikke memory leake på samme måde som C++. Dette kan opfattes som både et plus og et minus. Hukommelsen styres i C# af en garbage collector, så man skal ikke bekymre sig om hverken oprydning eller hukommelses fragmentering.

C# har indbyggede sprog konstruktioner til syncronisering, C++ har ikke.

C# har reflection (runtime type introspection), kan C++ ikke, C#'s Standard library faciliterer desuden runtime kodegenering i kraft af at det er designet til at køre på en virtuel maskine (anvendelses områderne er få, men de findes).

I C# skal alt puttes i en klasse, det behøver man ikke i C++.

C++ har multiple inheritance, C# har kun single inheritance, men har som et "plaster på såret" interfaces.

Det var vidst de væsentligste forskelle jeg lige kunne komme på.

2:
Jeg har aldrig lavet decideret gui programmering i C++, men:
C# har, i kraft .Net platformen, et indbygget gui library.
Ved C++ skal du enten anvende din platforms native gui kald, eller finde et tredje parts library (bemærk at ingen af løsningerne er en del af C++'s standard library).

3:
Det kommer meget an på hvad du vil lave.

Til Windows (og xbox360) har Microsoft et tilbud til C# der hedder XNA. Jeg har ikke rigtig selv kigget på det, men det er mit indtryk at det er et rigtig godt sted at starte. Kan både lave 2d og 3d. Indeholder også faciliteter til lyd, input osv.

Andre muligheder er at du kan tegne med opengl. Opengl kan godt anvendes fra C#, men det er min erfaring at man engang i mellem støder ind i nogle spøjse ting, fordi at ens link til opengl som regel er maskin genereret, og at man som nævnt tidligere ikke har nogen arbitrære pointers. Jeg mener dog ikke at det er et stort problem. Jeg har førhen brugt Tao framework til opengl, men der er udvikligen gået i stå, så kig i stedet på opentk. OpenTK har også faciliteter til lyd og input, samt OpenCL hvis du skulle lyste at lege med det. OpenTK kører på Windows, Mac og Linux.

Hvis du vil skrive i C++, så har du storset stadig samme muligheder som ovenfor, bortset fra XNA, hvor du så istedet skal bruge DirectX. ydermere har du mulighed for at anvende din cpus simd instruktioner, hvilket potentielt vil kunne give signifikant bedre performance, men jeg tvivler på at det bliver et problem for dig.

Så med mindre du skal ud at lave det næste Need for Speed, eller Batman, eller ... Så er det sprog der er bedst (for dig), det sprog du befinder dig bedst i.

4:
Se 1.

5:
Jeg ved at du har erfaring med java, og derfor burde du have ret nemt ved at lære C#.

ved C# kan du downloade Microsoft Visual C# Express, det er gratis. Hvis du vil kombinere det med XNA, så skal du måske have 2008 udgaven.

Jeg har ingen anbefalinger hvad angår C++, bruger selv en flad teksteditor (dog med syntax highlighting) og en konsol, til det lidt jeg skriver.


Hvis der er noget i mit indlæg du, eller andre, er i tvivl om, så spørg endelig.



Du har ikke nogle anbefalinger til bøger om C#, som jeg kan benytte mig af. Meget gerne bøger som hurtigt går igennem det basale, som også går igen i Java (Da jeg har noget erfaring med dette), men sætter fokus på hurtigt at tilegne sig C#'s syntaks og mere 'avancerede' funktioner, da dette sprog indtil nu lyder som noget jeg skulle kigge nærmere på :)

Og lige et spørgsmål til C++, Er pointers henvisninger til adresser i ens memory, eller har jeg misforstået ideen med dette? :)

Ellers tak for tilbagesvarende.



Jeg har aldrig selv læst en (hel) bog om C#, så kan af gode grunde ikke rigtig anbefale en. Men jeg vil mene at du ved så meget java at du bare sætter dig ned med en editor, en stak eksempler, og sidst men ikke mindst: google.

du har ikke misforstået ideen med pointers, men husk på at man også godt kan have en pointer til en pointer til en pointer...



For at nævne en god bog om C#, kan jeg varmt anbefale Pro C# 2010 and the .NET Platform 4.0

Der kommer du omkring en del, både Windows Forms, WPF, ASP.NET og så vidt jeg husker en smule Silverlight...

Der er også lidt om LINQ og ADO.NET.

edit: Fandt lige bogen på bordet nu da jeg er kommet hjem, og ISBN er 978-1-4302-2549-2... det er en lille 1700 siders sag - desværre på engelsk..



Indlæg senest redigeret d. 14.04.2011 12:46 af Bruger #16372
Jeg vil lige kigge på den bog, og se om det er en jeg ønsker at købe :P



t