OK, nur um ein paar Löcher in das Geschwätz zu stecken, das du verlinkt hast:
- "C # ist auf einen" Just In Time "-Interpreter angewiesen - falsch - es ist ein JIT- Compiler . Nachdem eine Methode einmal JITted wurde , wird der kompilierte Code für jeden Aufruf erneut verwendet. Der kompilierte Code ist fast so schnell wie nativer, vorkompilierter Code.
- „Xenon CPU ist ein‚in place‘Prozessor“ - bedeutet er „in Ordnung“? - Und: "Xenon-CPU hat keine Verzweigungsvorhersage" . Er impliziert dies bedeutet, dass die JIT-Kompilierung auf natürliche Weise fehlerhaften Code erzeugt, der von der CPU neu angeordnet werden muss, und viel Verzweigung verursacht - was absoluter Unsinn ist . Die gleichen Leistungsempfehlungen für die Ausführung auf dieser CPU-Architektur gelten sowohl für C ++ als auch für C #.
- "[JIT] erfordert ständiges Spülen des 360" - falsch, der kompilierte Code kann wie jeder normal kompilierte Code im Cache gehalten werden. (Wenn er Rohrleitungsspülung meint, siehe den obigen Punkt.)
- "generics use code generation" - generics sind wie alles andere JITted und wie alles andere ist der JITted-Code schnell. Es gibt keine Leistungseinbußen für die Verwendung von Generika.
- "alle sexy sprachen erfordern eine [...] verzweigungsvorhersage ..." - wie trifft dies nicht auch auf c ++ zu? - "... oder [...] In-Place-Codegenerierung" - meint er JITting? Habe ich schon erwähnt, dass es schnell ist? (Ich werde nicht auf alle Bereiche eingehen , in denen die Desktop- CLR die eigentliche Codegenerierung verwendet - eine Funktion, die von der Xbox 360 nicht unterstützt wird!)
- "[C # hat] nicht die massiven Bibliotheken [von C ++]" - außer zum Beispiel XNA selbst? Und vieles mehr . (Trotzdem ist dies ein ziemlich fairer Punkt.)
XNA auf der Xbox 360 läuft auf einer modifizierten Version der .NET Compact Framework CLR. Ich habe keinen Zweifel, dass es nicht dem Standard der Desktop-Version entspricht. Der JITter ist wahrscheinlich nicht so gut - aber ich denke auch nicht, dass er schlecht ist . Ich bin überrascht, dass er den im Vergleich zur Desktop-CLR schrecklichen Müllsammler nicht erwähnt hat .
(Natürlich - Sie sollten in einem professionell entwickelten Spiel sowieso nicht auf den Müllsammler treffen , genauso wie Sie bei Zuweisungen in einem professionellen Spiel vorsichtig sein müssen .)
(Für eine aktuelle technische Diskussion des .NET Compact Framework beginnen Sie möglicherweise mit dieser Artikelserie: Overview , JIT Compiler , GC und Heap .)
Die Art und Weise, wie er in Bezug auf seine Terminologie völlig unspezifisch ist, erschwert es, überhaupt zu verstehen, was er meint. Entweder ist er im Maximalmodus oder er weiß nicht, wovon er spricht.
Jetzt, wo wir haben , dass aus dem Weg, hier einige Dinge, die Sie tun auf verpassen von XNA mit auf den 360, anstatt going native :
- Zugriff auf die SIMD / Vector-Einheit für wirklich schnelle CPU-Gleitkomma-Berechnungen
- Möglichkeit zur Verwendung von muttersprachlichem Code, der wahrscheinlich etwas schneller als C # sein wird
- Die Fähigkeit, ein bisschen zu sein etwas fauler mit , wie Sie Speicher zuweisen
- XBLIG-Spiele haben nur Zugriff auf 4 der 6 Kerne (aber wir haben immer noch alle 3 CPUs und sie sind auch nicht voll, so dass wir nicht viel verpassen) - nicht sicher, ob dies für Nicht-XBLIG-XNA gilt Spiele
- Voller DirectX-Zugriff für wirklich unübersichtliche grafische Tricks
Es ist auch erwähnenswert, dass dies nur CPU-seitige Einschränkungen sind. Sie haben immer noch freien Zugriff auf die GPU.
Ich habe diese Dinge in dieser Antwort auf die Frage beschrieben, die im Grunde genommen dieselbe ist wie diese. Wie ich in dieser Antwort erwähnt habe, ist XNA absolut für die "professionelle" Entwicklung geeignet .
Der einzige Grund, den Sie vermeiden sollten, besteht darin, dass Sie kein C # -Talent einstellen, C # -Module lizenzieren und vorhandenen C # -Code auf dieselbe Weise wiederverwenden können, wie Sie es mit der vorhandenen Basis von C ++ - Kenntnissen tun können. Oder weil Sie möglicherweise auch auf eine Plattform abzielen, die C # nicht unterstützt.
Für viele von uns, die keine "professionellen" Entwickler sind, ist XNA natürlich unsere einzige Option, um auf die Xbox 360 zuzugreifen.
Um Ihre anderen Fragen zu beantworten:
Nichts in C # hindert Sie daran, datenorientierte Ansätze genau so zu verwenden, wie Sie sie in C ++ verwenden würden.
C # ist nicht in der Lage, Code beim Kompilieren automatisch inline zu schreiben, und ich bin mir ziemlich sicher, dass der JITter der kompakten CLR keine Inline-Methoden kann (das kann die Desktop-CLR). Für leistungskritischen Code müssen Sie möglicherweise manuell in C # einbinden, wobei C ++ Unterstützung bietet.
Wahrscheinlich ist ein größerer Grund, warum Sie CPU-mathematikintensive Dinge wie Kollisionserkennung und Fluidsimulationen in C # nicht oft sehen, der fehlende Zugriff auf die Vektoreinheit (wie oben erwähnt).