Verwendung von C ++ 11 für die plattformübergreifende Game Engine-Entwicklung

18

Hinweis: Dies ist keine Frage, bei der Sie Ihre Meinung zu C ++ 03 und C ++ 11 äußern.

Unsere in C ++ 03 geschriebene Spiele-Engine ist für die Kompilierung unter Windows, OSX und iOS ausgelegt. Linux-Support ist für die (sehr) nahe Zukunft geplant. Unsere Erfahrung mit Konsolen ist begrenzt, weshalb ich diese Frage stelle.

Derzeit diskutieren wir, ob der Wechsel zu C ++ 11 und die Verwendung nicht kompatibler Funktionen des C ++ 11 - Standards in naher Zukunft ein Problem darstellen könnte, wenn wir unsere Engine auf eine der aktuellen Konsolen (möglicherweise die C ++ 11 - Konsole) portieren müssen Compiler, die von einigen Konsolen unterstützt werden, unterstützen C ++ 11 noch nicht? Wir wissen nicht ...).

Also, Spieleentwickler, die Erfahrung mit mehreren Plattformen und Konsolen haben, denken Sie, wir sollten bei C ++ 03 bleiben, bis die neue Generation von Konsolen ankommt und fast jeder auf den C ++ 11-Standard umgestiegen ist (oder schon?). Oder verwenden die meisten Konsolen / Support-Compiler (VC ++, GCC oder Varianten?), Die bereits C ++ 11-Funktionen unterstützen?

Samaursa
quelle
1
Mein Wissen ist etwas veraltet, daher werde ich dies nicht als Antwort veröffentlichen, aber meine bisherigen Erfahrungen mit Konsolen-Compilern haben gezeigt, dass Sie Glück haben, wenn sie dem alten Standard entsprechen, ganz zu schweigen von einem neuen.
Kylotan
1
Welche Funktionen und warum sind sie so wichtig, dass Sie in Betracht ziehen, einen Standard zu verwenden, der selbst auf den gängigsten Entwicklungsplattformen nicht vollständig implementiert ist?
snake5,
4
@ snake5: Auto, Lambda's, Template-Alias, C-Tor-Delegation. Diese Funktionen verbessern nicht nur die Lesbarkeit und Pflege unseres Codes, sondern steigern auch die Produktivität. Gerade das Auto-Schlüsselwort ist eines der Dinge, die ich sehr vermisse, wenn ich von C ++ 11 auf C ++ 03 umsteige. Andere Funktionen, wie z. B. verschiedene Vorlagen, sind zwar sehr leistungsfähig und können den Code definitiv verbessern, aber wir können darauf verzichten (und werden bisher vom VC ++ - Compiler nicht implementiert).
Samaursa
Was Kylotan kommentierte, stimme ich seiner Meinung voll und ganz zu und füge meiner Erfahrung sogar ein bestimmtes Beispiel hinzu. Wenn Sie diese Engine auf die Android-Plattform erweitern, was mit C ++ möglich ist, werden Sie eine schlechte Zeit haben, da die C ++ - Funktionen im NDK unvollständig sind. Sie können den neuen Standard nicht verwenden, und selbst einige Dinge im vorherigen Standard sind fehlerhaft.
Grimshaw
1
@ DevilWithin, ich habe einige C ++ 11-Funktionen im Android NDK ohne Probleme verwendet.
notlesh

Antworten:

19

Wenn Sie sich bei der Bezahlung von Lebensmitteln und Unterkünften auf Ihren Code verlassen und plattformübergreifende Unterstützung auf unbekannten zukünftigen Plattformen benötigen (oder vernünftigerweise in Zukunft plattformübergreifende Unterstützung benötigen), müssen Sie Ihren Code so gestalten, dass er sich auf a stützt Die korrekte Einhaltung der neuesten Sprachstandards durch unbekannte Compiler-Autoren ist gefährlich (und ich würde argumentieren, unverantwortlich). Es ist gefährlich für Sie und daher auch gefährlich für Ihre Angehörigen.

Wenn Sie bereit sind, ein solches Risiko einzugehen auto, gehen Sie es auf jeden Fall an. Aber ich werde dir nicht raten, es zu tun.

Meiner Erfahrung nach ist plattformübergreifendes Arbeiten , insbesondere auf Konsolen , am besten möglich, wenn Sie den kleinsten gemeinsamen Nenner anstreben, von dem Sie sicher sind, dass er praktisch überall funktioniert, und nicht, wenn Sie sich auf die neuesten Sprachfunktionen von Whiz-Bang verlassen. Wenn Sie eines Tages auf eine Plattform portieren müssen, die diese nicht unterstützt, müssen Sie Ihre Systeme von Grund auf neu schreiben. Können Sie es sich leisten, währenddessen Löhne / Mieten zu zahlen?

Trevor Powell
quelle
4
+1 für dies (und den Rest des Beitrags, aber das): "Es ist gefährlich, sich auf die korrekte Einhaltung der neuesten Sprachstandards durch unbekannte Compiler-Autoren zu verlassen." Das Experimentieren mit den neuesten Spielsachen macht immer Spaß, wenn man sich nicht so sehr auf sie verlässt.
NoobsArePeople2
2
Ich bin immer sehr bemüht, diese "vorsichtigen" Antworten zu geben, besonders wenn sie eindeutig nicht dem entsprechen, was das Originalplakat hören möchte. Aber ich habe in meiner Karriere zu oft große Compiler-Fehler auf Konsolen gesehen, als dass ich mich in einem plattformübergreifenden Projekt auf neue Sprachstandards stürzen könnte. Es macht nie Spaß, Ihren Code neu zu schreiben, um Probleme in einem Compiler zu umgehen, besonders wenn Sie sich unter einer bestimmten Frist befinden.
Trevor Powell
Ich werde das nicht ablehnen, aber der neue C ++ - Standard ist so viel mehr als syntaktischer Zucker wie das Schlüsselwort auto.
vdaras
1
@ TrevorPowell, Sie sagten, das Risiko, das er eingehen würde, bestehe aus Gründen des automatischen Schlüsselworts, wenn der neue C ++ - Standard wesentlich wichtigere und grundlegendere Funktionen enthält. Einige davon, wie z. B. Wertreferenzen, müssten bei der Betrachtung des Risikos berücksichtigt werden.
Vdaras
2
@ TrevorPowell Deshalb habe ich gesagt, dass der Beitrag trotz aller Argumente, die ich dazu habe, keine Abwertung wert ist. Ich bin der Meinung, dass dies ein guter Beitrag ist. Ich wollte nur klarstellen, dass der neue C ++ - Standard einige sehr wichtige Funktionen aufweist, und in Erwägung zu ziehen, ihn zu verwenden, wäre nicht nur eine Kleinigkeit wie Auto.
vdaras
6

Wenn Sie bereit sind, ein bisschen mehr zu arbeiten, könnten Sie sich nach Refraktärlösungen umsehen. clang hat momentan einige interessante Sachen in diesem Bereich zu bieten. Es sollte möglich sein, das Schlüsselwort auto zu verwenden, es über den Refactorer auszuführen, der alle Verwendungszwecke findet, sie für Sie auflöst und den Code ausgibt. Kompilieren Sie ihn dann mit den gewünschten Informationen.

Das bedeutet aber weniger Zeit, um an deinem Spiel zu arbeiten.

Es gibt auch das Potenzial für einige zusätzliche Funktionen, z. B. Reflexion. Sie können eine Klasse erstellen und automatisch eine Liste aller Eigenschaften generieren, die zur Laufzeit überprüft werden sollen. Könnte sehr nützlich sein, um Skripte zu schreiben, Spieleditoren zu erstellen und so weiter. BEARBEITEN : Überprüfen Sie clreflect .

http://cppnow.org/session/refactoring-c-with-clang/

http://www.youtube.com/watch?v=mVbDzTM21BQ

http://clang.llvm.org/docs/Tooling.html

http://clang.llvm.org/docs/RAVFrontendAction.html

David C. Bishop
quelle
Sehr interessant; hast du es selbst ausprobiert für diesen (oder einen ähnlichen) zweck?
Jonas Byström
Noch nicht entschieden, zu warten, bis es ein bisschen besser entwickelt war, aber das letzte Mal, als ich mich wirklich damit beschäftigte, war es nur in der SVN.
David C. Bishop
Sehr interessant (+1)
Samaursa
Das erinnert mich an etwas wie Python, 2to3aber umgekehrt und viel fantastischer, aber wahrscheinlich schwieriger zu bedienen. Mann, wie viel besser kann autoes sein?
Steven Lu