C# framtiden inom spelprogrammering?

Permalänk
Medlem

Var det inte matricks som programmerar åt Avalanche (spelutvecklare här i sverige) som sa att deras motor var skriven i C++ men de mest tidskritiska delarna var skrivna i C eftersom C++ har så mycket "skräp" som segar ner. Främst all kod som krävs för klasser och hela OOP-konceptet.

Som många sagt lär all utveckling gå åt mer högnivåspråk men tidskritiska delar och små system kommer under lång tid framöver behöva lågnivåspråken som C och Assembler.

Visa signatur

Archlinux, Sway och Rust, vad mer behövs?

Permalänk
Medlem

C# för mindre projekt, XBLA och hobby. Visst, dom är väl redan där.

Men för dom stora triple A spel som släppts till 360 och PS3. Nej. Denna generations konsoller har iallafall 5-6 år kvar innan nästa kommer (spekulationer) och jag ser inte att det kommer bytasspråk inför nästa generation, och den skall väl överleva ~10år också. Så 15 år till med C++ på triple A spelfronten iallafall.

Sedan tror jag inte det är C# man kommer använda när man vill feta på med prestanda. Prestanda får du genom att veta din data, hur den skall transformeras och hur hårdvaran under dig faktiskt ser ut. Att bygga performance kod på en mjukvaruplatform kommer aldrig vara lika snabbt som att bygga det på en hårdvaruplatform.

EDIT: Tänker inte spekulera längre fram än 15år. Det är bra lång tid bara det.

Visa signatur

Teeworlds - För dig som gillar gulliga saker med stora vapen.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Gräs-Mannen
Var det inte matricks som programmerar åt Avalanche (spelutvecklare här i sverige) som sa att deras motor var skriven i C++ men de mest tidskritiska delarna var skrivna i C eftersom C++ har så mycket "skräp" som segar ner. Främst all kod som krävs för klasser och hela OOP-konceptet.

Som många sagt lär all utveckling gå åt mer högnivåspråk men tidskritiska delar och små system kommer under lång tid framöver behöva lågnivåspråken som C och Assembler.

Huvudproblemet med C++ är att språket har massor av extra detaljer och regler som inte är helt uppenbara, vilket också är en av orsakerna till att man fortfarande skriver OS-kärnor i C. C gör uppenbarligen vad koden säger. C++ är mycket mindre uppenbart (om man nu inte verkligen är en C++ guru). Exceptions, polymorfism (virtuella funktioner) och "för mycket OOP" tenderar också att vara skadligt, prestanda-mässigt sett.

Att byta över till C helt för dem tidskritiska delrana är oftast inte nödvändigt. Istället brukar man helt enkelt skriva de facto C-kod i C++ för sådana delar (eller rättare sagt, man stoppar in allt i ett fåtal icke-ärvda, icke-ärvande klasser) alternativt använder sig kraftigt av compile-time polymorfism (i.e. template metaprogrammering).

Det är värt att observera att många C++ kompilatorer egentligen är C kompilatorer med en front-end som konverterar C++ kod till C kod (t.ex. mixar om namnen på funktionerna).

Visa signatur

"Nothing is impossible because impossible itself says I M Possible..."

Permalänk
Avstängd
Citat:

Ursprungligen inskrivet av Weeblie
Huvudproblemet med C++ är att språket har massor av extra detaljer och regler som inte är helt uppenbara, vilket också är en av orsakerna till att man fortfarande skriver OS-kärnor i C. C gör uppenbarligen vad koden säger. C++ är mycket mindre uppenbart (om man nu inte verkligen är en C++ guru). Exceptions, polymorfism (virtuella funktioner) och "för mycket OOP" tenderar också att vara skadligt, prestanda-mässigt sett.

Att byta över till C helt för dem tidskritiska delrana är oftast inte nödvändigt. Istället brukar man helt enkelt skriva de facto C-kod i C++ för sådana delar (eller rättare sagt, man stoppar in allt i ett fåtal icke-ärvda, icke-ärvande klasser) alternativt använder sig kraftigt av compile-time polymorfism (i.e. template metaprogrammering).

Det är värt att observera att många C++ kompilatorer egentligen är C kompilatorer med en front-end som konverterar C++ kod till C kod (t.ex. mixar om namnen på funktionerna).

Jasså? Angående kernel utveckling, jag har hört att C++ har så mycket bibliotek (t.ex. STL) och mycket overhead att du vill slippa allt sånt när du programmerar bare-metal som kernel utvecklare. Och skalar du bort bort allting med mycket barlast i C++ så återstår något som liknar C. Då är det lika bra att köra C rakt av.

Angående C++ kompilatorer som gör allt till C, så har jag hört att det gällde förrut för längesen. Numera sker inte det. Dagens C++ kompilatorer funkar som vanligt.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av saddam
Jasså? Angående kernel utveckling, jag har hört att C++ har så mycket bibliotek (t.ex. STL) och mycket overhead att du vill slippa allt sånt när du programmerar bare-metal som kernel utvecklare. Och skalar du bort bort allting med mycket barlast i C++ så återstår något som liknar C. Då är det lika bra att köra C rakt av.

"... man fortfarande skriver OS-kärnor i C."

C++ i sig har egentligen ingen (märkbar) overhead jämfört med C, om man glatt använder sig av templates och kompilerings-tids polymorfism (och dylikt) istället för vanlig dynamisk polymorfism.

Men det finns egentligen ingen tvekan om att C är kod-stils mässigt sett mer robust än C++.

C++ har:

- Ett helt isberg med finstila regler. Folk som har jobbat med C i 10+ år vet oftast det mesta om språket. Folk som har jobbat med C++ i 10+ år kan lätt "knäckas" med "finstila frågor" (t.ex. sådana från http://www.gotw.ca/gotw/ ).

- Mindre väldefinerade namn-scheman och dylikt i kompilerade enheter (i.e. varför det är "extern C" men inte "extern C++" ). Att länka C++ kod kompilerad med lite olika kompilatorer är inte en god idé alls. Statiska objekt bör inte användas överhuvudtaget. Med templates så vet man oftast dessutom inte var koden är i för minnes-sida vilket kan få oanade konsekvenser i kernel-läge (t.ex. om man går in i ett läge där minne inte längre kan swappas från hårddisken så vill man med säkerhet veta att dessa minnessidor är i RAM-et redan).

- Undantag. STL och C++ i allmänhet föredrar RAII och användning av exceptions för att signalera fel. Detta kan speciellt i kernel-fallen vara en paradigm som är mycket svårare/omöjlig att göra robust än C-stilens "returnera fel-kod"... för att inte nämna ibland oacceptabla prestanda-förluster med stack-unwinding.

I slutändan är det helt enkelt inte värt att koda i C++ då man ändå måste "artificiellt" lägga på massor av extra egna kodnings-regler (som lätt kan glömmas och få kernel-kodsnutten att crasha... ibland).

Citat:

Ursprungligen inskrivet av saddam
Angående C++ kompilatorer som gör allt till C, så har jag hört att det gällde förrut för längesen. Numera sker inte det. Dagens C++ kompilatorer funkar som vanligt.

I strikt mening så stämmer det att dagens C++ kompilatorer inte gör en ren översättning till C längre, utan konverterar både C och C++ kod till ett "mellan stegs intern representation" (varken C eller C++) som sedan optimiseras och "riktigt" kompileras till binärkod.

Visa signatur

"Nothing is impossible because impossible itself says I M Possible..."