Wird C ++ in Industriespielen durch C # ersetzt?


23

In Industriespielen meine ich Quake, CoD etc.


7
Es wäre hilfreich, wenn Sie kurz erklären würden, was Sie auf die Idee gebracht hat, da es, gelinde gesagt, eine sehr seltsame Idee ist.
Konrad Rudolph

2
In Anbetracht Quake ist in C getan .. ;-)
Die kommunistische Ente

Ich habe mich nur gefragt, diese Frage selbst!
Jeff

2
Es klingt so, als würden Sie mit "Industriespielen" das meinen, was normalerweise "AAA-Titel" genannt werden.
Chaos

Antworten:


53

In gewisser Weise wird C ++ tatsächlich ersetzt - nicht nur durch C #, sondern durch eine ganze Reihe anderer Sprachen. Aber wenn Sie fragen, wird es komplett ersetzt - dann ist die Antwort definitiv nein .

Dies liegt daran, dass C ++ traditionell in zwei Funktionen verwendet wird. Um die Spiel- Engine zu erstellen, müssen Sie zunächst die Komponenten auf niedriger Ebene verwenden, die Ressourcen laden, Polygone verschieben, um Zahlen in Physiksimulationen zu überprüfen und zu berechnen. Zweitens, um die Spiellogik zu kodieren : die eigentlichen Regeln, die das Gameplay ausmachen.

Für diese zweite Funktion sind die Stärken von C ++ nicht erforderlich (z. B. die vollständige Kontrolle über Details auf niedriger Ebene), sie weist jedoch Schwächen auf (z. B. fehleranfällige handcodierte Speicherverwaltung). Und in dieser zweiten Eigenschaft wird C ++ durch verschiedene Skriptsprachen ersetzt. Viele Entwickler verwenden Lua. Einige verwenden Python. Wenn jedoch eine CLI-Plattform in Form von .NET oder Mono verfügbar ist, bietet sie einen hervorragenden Kandidaten für den Host für Skripterstellung. Diese Plattformen sind recht schnell, zuverlässig, bieten eine weit verbreitete Sprache (C #) und eine umfassende Basisklassenbibliothek. Vergessen wir nicht die Tools: MS Visual Studio und SharpDevelop / MonoDevelop sind vielleicht nicht die allerbesten IDEs der Welt, aber sie sind ziemlich gut.

Das heißt, die Spiel- Engine wird nicht in C # (oder Lua oder Python) geschrieben. Warum? Weil sie einfach nicht schnell genug sind.

Entgegen vieler populärer Überzeugungen ist der derzeit größte Leistungsverlust auf die Speicherlatenz zurückzuführen . Dies bedeutet, dass der Zugriff auf Speicher ein ernstes Geschäft ist. Und verwaltete Sprachen ermöglichen es dem Benutzer nicht, den Speicherzugriff zu steuern - genau deshalb werden sie in erster Linie "verwaltet". Keine verwaltete Sprache erlaubt es also, eine wirklich schnelle Spiel-Engine zu schreiben. Tatsächlich basieren alle großen "C #" - Engines, an die ich denken kann - XNA, MOGRE, Unity - auf nativem C ++ - Code; aber erlauben, Spiellogik in C # zu schreiben.

Um es zusammenzufassen : C # wird anstelle von C ++ oder anderen Sprachen verwendet. Aber es wird C ++ niemals ersetzen, zumindest solange nicht jemand einen latenzfreien Speicher mit sofortigem Zugriff erfindet.


16
+1 Visual Studio ist eine sehr gute IDE. Auch wenn es die dunkle Seite ist ...
Michael Coleman

1
Bah, meiner Erfahrung nach ist C # auch nicht schnell genug für die Simulation, aber das hindert die Leute nicht daran, es zu versuchen.
BigSandwich

@Nevermind Was ist "Verwaltete Sprachen"?
Quazi Irfan

3
@iamcreasy Im weiteren Sinne meine ich mit "verwalteten Sprachen" Sprachen, die unter einer virtuellen Maschine ausgeführt werden, die eine Form von Garbage Collection und / oder Speicherverwaltung umfasst. Streng genommen handelt es sich bei verwalteten Sprachen um Sprachen, die auf Common Language Runtime abzielen (eine Implementierung von Common Language Runtime), aber meine Antwort gilt nicht nur für diese Sprachen.
Nevermind

Fallen Ihrer Meinung nach referenzierte GC-Systeme unter diese Kategorie?
weberc2

6

Die Wahl der Sprache hängt stark von der Plattform ab. Momentan ist es sehr unwahrscheinlich, dass für etwas anderes als eine Microsoft-Plattform .NET als Implementierung erforderlich ist.

Konventionelle Erkenntnisse besagen, dass eine kleine Plattform in der Nähe des Metalls sein muss, um performant zu sein. Verwaltete Plattformen sind jedoch sicherer . Das ist wahrscheinlich der Grund, warum Windows Phone 7 die Verwendung von .NET erzwingt.

Es wäre sicherlich interessant, wenn eine neue Xbox eine verwaltete Plattform benötigt. Wenn die Hardware eines Telefons damit umgehen kann (und das auch), könnte ich sie auf einer Konsole in voller Größe sehen. Dies würde das Konsolen-Ökosystem ziemlich aufrütteln, da es schwieriger wäre, plattformübergreifende Spiele zu schreiben, ohne Ihren gesamten Spielcode in einer Skriptsprache zu schreiben. In diesem Fall würde C # C ++ nicht ersetzen , aber es würde Hand in Hand gehen.

Momentan könnten Sie Mono als Skript-Back-End verwenden (ähnlich wie bei Unity), aber ich würde mir vorstellen, dass die meisten Motorenhersteller entweder ihre eigenen rollen oder etwas kompakteres wie Lua oder Python als C # verwenden möchten.

In jedem Fall dreht sich alles um das richtige Werkzeug für den richtigen Job. Sie sollten auf jeden Fall beide Sprachen lernen, da es mit C # einfacher ist, bestimmte Dinge zu erledigen (Tools-Entwicklung, Server-Entwicklung usw.) und Sie in einigen Fällen nur C ++ verwenden können.


Ab sofort, 3 Jahre später, ist der Status von C # für die Spieleentwicklung viel weiter entwickelt. Mono-Project hat XNA Game Studio aufgegriffen und MonoGame umbenannt. SharpDX, SlimDX und OpenTK sind allesamt sehr anständige OpenGL / DirectX-Wrapper. Sogar ein paar Physik-Engines in c # sind aufgetaucht. Mit Mono / MonoGame kannst du ein Spiel einmal erstellen und es automatisch auf Android, Linux, Mac OS, iOS, Xbox 360, PS3, PS4 und Wii portieren.
Ryan Mann

3

Das ist nicht wahrscheinlich. C ++ hat den Vorteil, dass es auf niedrigem Niveau arbeitet, sodass Entwickler die kleinsten Details optimieren können, um die bestmögliche Leistung zu erzielen.

Mit C # und .NET verfügen Sie über eine Speicherbereinigung, die sehr nützlich ist. Wenn Sie jedoch mit Plattformen mit begrenztem Arbeitsspeicher und begrenzten Ressourcen (tragbare Konsolen und in gewissem Umfang Heimkonsolen) arbeiten, müssen Sie über eine möglichst umfassende Speicherkontrolle verfügen, um die bestmögliche Verwendung zu erzielen der Ressourcen. Wenn Sie es verwalteten Sprachen erlauben, Speicher für Sie zuzuweisen und freizugeben, treten höchstwahrscheinlich viele Probleme auf.

Die Geschwindigkeit ist auch ein Problem (obwohl wahrscheinlich weniger). Ich bin mir sicher, dass mit der Zeit verwaltete Sprachen vergleichbar mit C ++ - Compilern funktionieren könnten.

Insgesamt sind Spieleentwickler meiner Erfahrung nach eher Kontrollfreaks, wenn es um Speicher, CPU-Zeiten und Ressourcen geht (um so viel Leistung wie möglich herauszuholen), weshalb C / C ++ die am häufigsten verwendeten Sprachen sind.


2

AFAIK .NET GC leidet immer noch daran , den Algorithmus im Weltstil zu stoppen . Dies kann zwar für eine Vielzahl von Anwendungen geeignet sein, ist jedoch für Echtzeit-Apps wie Spiele nicht akzeptabel.

Tatsächlich ist es sehr schwierig, verwaltete Sprachen effektiv für Echtzeitprogramme zu verwenden, bis wir einige Durchbrüche in der GC erzielt haben.


1

Nein. Abhängig von .NET würden massive Umschreibungen für Plattformen ohne verfügbares Framework, wie die PS3, erforderlich sein. Die Leistungsnachteile können auf dem PC oder für Live-Arcade-Spiele durchaus akzeptabel sein, aber größere Spiele werden jede Menge Schrott benötigen Leistung von ihren Konsolen, um schnell genug zu laufen. Darüber hinaus gibt es in C ++ eine riesige Codebasis, die sich niemand leisten kann, selbst wenn er dies wünscht. C ++ ist in der Spielebranche und wird dort noch lange bleiben.


Während Trägheit besteht, sind die C ++ - Codebasen selbst nicht so alt - vielleicht höchstens 10 Jahre. Nahezu der gesamte darin enthaltene Code wurde in dieser Zeit ersetzt - für 3D-Beschleuniger, programmierbare Pipelines, datengesteuerte Architekturen und Unterstützung für Skripte. Wenn ein AAA-Entwickler eine vollständige Migration auf C # durchführen möchte, kann er diese wahrscheinlich zu minimalen Kosten innerhalb von drei Spielen durchführen - erstens als Tool und Skript-Host verwenden, zweitens die Logikebenen des Spiels darauf verschieben und dritten Port Der Renderer verwendet einen verwalteten DX / GL-Wrapper.

1
Mono hat eine kommerzielle .NET-Lösung für PS3.
Dan Olson

Zweitens, wenn Sie Ihr Spiel in C # gegen Mono oder mit Monogame (XNA-Ersatz) erstellen, können Sie es auf PS3 / PS4, Wii, Xbox 360, Android, Max OS usw. portieren.
Ryan Mann

0

In Zeiten, in denen die Computerleistung knapp war, musste alles in C oder C ++ programmiert werden, einfach weil durch die Speicherbereinigung entstehende Sprachen dem Programmierer die Speicherkontrolle nehmen und somit die Leistung sinken kann.

Heutzutage sind Computer schneller, aber wie Knuth sagt und um es kurz zu machen, kann Optimierung böse sein:

  • Es ist offensichtlich, dass Kernfunktionen auf niedriger Ebene optimiert werden müssen, da die Berechnung von 3D-Geometrie, Physik, Kollisionen und Beleuchtung den besten verfügbaren Prozessor schnell aufblähen lässt. Sie können leicht erkennen, dass eine steigende Bildqualität auf einem Computer die Leistung fast immer erheblich beeinträchtigt.

  • Nun gibt es andere Funktionen wie Spielstatus, KI, Sound, Eingabe, Netzwerk, die in einem Spiel immer noch wichtig sind, aber kaum nie so viel Computerressourcen in Anspruch nehmen werden. Diese Funktionen müssen meist nicht optimiert werden. Das ist das Ziel der Skriptsprache und der Sprachen, die mit Speicherbereinigung gesammelt wurden: Sie müssen nicht an Ihre Speicherkohärenz und Ihre Anwendungsorganisation denken, da der Code, den Sie mit diesen Sprachen schreiben, wenn Sie keine Inhalte auf niedriger Ebene codieren, niemals a sein wird Engpass.

Beispiel mit 2 Fällen

  • Versenden Sie 500 kg Möbel mit einem LKW.
  • Versenden Sie 30 Tonnen Material mit einem Boot.

beide sind 500 km entfernt.

In beiden Fällen ist es wichtig, den Lade- / Entladevorgang zu beschleunigen, um die gesamte Transportzeit zu verkürzen, da Sie NICHT wissen, dass das Boot oder der LKW schneller fahren KÖNNEN.

Die Antwort lautet: Es war wichtig für den LKW, aber nicht mehr für das Boot, denn Sie haben bereits viel getan, indem Sie den Bestand mit dem Boot verschoben haben.

Ich weiß nicht, ob Sie diese Metapher verstehen, aber in gewisser Weise können Sie sich das mathematische Problem vorstellen, das wichtiger ist als die Antwort zu verstehen.

Skriptsprachen ermöglichen es, Spiele schneller zu machen, wenn Sie bereits eine in C / C ++ programmierte Engine haben: Die 3D-Engine löst die Probleme auf niedriger Ebene. Jetzt müssen Sie das Spiel mit Ihren Skripten erstellen.

Aber denken Sie daran: Sie werden NIEMALS eine kompilierte Sprache auf niedriger Ebene ersetzen können. Statisch typisierte, kompilierte Sprachen sind der Kern der Leistung, und Sie KÖNNEN sie NICHT ausschließen, wäre es ein Kernel, eine 3D-Engine oder ein Grafikkartentreiber.

Aber natürlich, wenn Ihr Spiel grafisch einfach ist und nicht viel Vektorberechnung erfordert, können Sie sich auf das Gameplay konzentrieren und die Optimierung vergessen, denn in diesem Fall müssen Sie sich nie mit der Optimierung befassen, da Ihr Computer sehr schnell ist dafür

Es sei denn, Sie planen, eine Schnittstelle für den DS einzurichten. Aber ich werde dort aufhören.


1
"Optimierung kann böse sein" ist bei weitem die nutzloseste mutierte Version seiner Aussage, die ich gelesen habe.

Nun, ich erkläre es, deshalb fand ich es nutzlos, seine gesamte Aussage zu zitieren, die ein ziemlich langer Satz ist und nicht wirklich erklärt wird. Außerdem sprechen wir über Spiele, die nicht gleich sind breitere Software, über die Knuth sprechen wollte.
jokoon

Sie erwähnen, dass die Eingabe kaum viele Computerressourcen in Anspruch nimmt. Ich möchte darauf hinweisen, dass dies mit zunehmender physischer Verbindung des Spielers mit dem Spiel weniger wahr wird. Zum Beispiel die Kinect. Es ist eine Form der Eingabe, erfordert jedoch eine Menge Rechenressourcen, um sie nutzen zu können.
Ponkadoodle

0

Schau, ich weiß, das ist ein Scherz, aber ich spalte nicht nur die Haare. Ich bin der Meinung, dass die meisten Programmierer dies nicht wirklich zusammenfassen. Eine Sprache selbst hat nichts mit Laufgeschwindigkeit / Leistung zu tun. Es ist der Compiler / Framework. Sie können gcc besser gegen cl (Microsoft Compiler vor 2010) oder msbuild (aktueller C ++ - Compiler für 2010) argumentieren. Mit jedem Release werden diese Compiler besser, sodass Sie sie auch mit früheren Versionen von sich selbst vergleichen müssen. Ich bin sehr beeindruckt von .net und es funktioniert gut, aber selbst wenn es etwas besser lief, sehe ich nicht, dass es die Kontrolle übernimmt, ein Grund: Portabilität.

AAA-Spiele sollen unter Windows, Linux, Mac, XBox, PS3, Nintendo usw. laufen.


Sicher spielt die Compiler-Implementierung eine Rolle, aber verschiedene Sprachen bieten verschiedene Vorteile für die compilergesteuerte Optimierung und verschiedene Vorteile für Programmierer, um die üblichen Sprachregeln zu umgehen und direkt mit der Hardware zu kommunizieren. Die Sprache und das Ziel an sich haben viel mit Leistung zu tun.

Eine Sprache kann viel mit der Ausführungsgeschwindigkeit / -leistung zu tun haben, da die Syntax und die Standardbibliotheken unterschiedliche Ansätze bevorzugen. Beispielsweise wird eine Sprache, in der es schwierig ist, Arrays mit zusammenhängendem Speicher zu verwenden, da alle ihre Objekte Zeiger sind, dazu neigen, den Cache viel mehr zu überladen als eine Sprache, in der Sie Arrays oder Vektoren effektiv verwenden können.
Kylotan

+1 sehr guter Punkt, den Sie hätten machen können, ohne die dummen Leute zu beleidigen, sie wissen nicht, wer sie sind.
Fire Crow

Abgesehen davon, dass Sie ab heute gegen Mono bauen können und es auf so gut wie alles portiert. ZB ist es jetzt sehr portabel.
Ryan Mann
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.