In Industriespielen meine ich Quake, CoD etc.
In Industriespielen meine ich Quake, CoD etc.
Antworten:
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.
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.
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.
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.
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.
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
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.
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.