Utilisation de C ++ 11 pour le développement multiplateforme de moteur de jeu

18

Remarque: Il ne s'agit pas d'une question "Donnez votre avis" sur C ++ 03 et C ++ 11.

Notre moteur de jeu, écrit en C ++ 03, est conçu pour être compilé sur Windows, OSX et iOS. Le support Linux est prévu dans un (très) proche avenir. Notre expérience est limitée en ce qui concerne les consoles, c'est pourquoi je pose cette question.

Actuellement, nous discutons si le passage à C ++ 11 et l'utilisation de fonctionnalités non compatibles de la norme C ++ 11 pourraient poser un problème dans un avenir proche lorsque nous devons porter notre moteur sur l'une des consoles de génération actuelles (peut-être le Les compilateurs pris en charge par certaines consoles ne prennent pas encore en charge C ++ 11? Nous ne savons pas ...).

Donc, les développeurs de jeux qui ont de l'expérience sur plusieurs plates-formes et consoles, pensez-vous que nous devrions nous en tenir au C ++ 03 jusqu'à ce que la nouvelle génération de consoles arrive et que la plupart des gens soient passés au standard C ++ 11 (l'ont-ils déjà?). Ou la plupart des consoles utilisent-elles / prennent-elles en charge des compilateurs (VC ++, GCC ou variantes?) Qui prennent déjà en charge les fonctionnalités C ++ 11?

Samaursa
la source
1
Mes connaissances sont quelque peu dépassées, donc je ne posterai pas cela comme réponse, mais mon expérience passée des compilateurs de consoles est que vous avez de la chance s'ils correspondent à l'ancienne norme, sans parler d'une nouvelle.
Kylotan
1
Quelles fonctionnalités et pourquoi sont-elles si importantes que vous envisagez d'utiliser une norme qui n'est pas entièrement mise en œuvre, même sur les plates-formes de développement les plus populaires?
snake5
4
@ snake5: auto, lambda's, alias de modèle, délégation c-tor. Ces fonctionnalités rendront non seulement notre code plus lisible / maintenable, mais augmenteront également la productivité. Le mot-clé auto est l'une des choses qui me manquent beaucoup lorsque je passe de C ++ 11 à C ++ 03. D'autres fonctionnalités telles que les modèles variadiques, bien que très puissantes et puissent certainement améliorer le code, nous pouvons nous en passer (et ne sont pas implémentées jusqu'à présent par le compilateur VC ++).
Samaursa
Pour ajouter à ce que Kylotan a commenté, je suis entièrement d'accord avec son opinion, et j'ajoute même un exemple particulier dans mon expérience. Si vous allez étendre ce moteur à la plate-forme Android, ce qui peut être fait en utilisant C ++, vous aurez un mauvais moment car les fonctionnalités C ++ sont incomplètes dans le NDK. Vous ne pourrez pas utiliser la nouvelle norme et même certaines choses de la précédente seront défectueuses.
Grimshaw
1
@DevilWithin, j'ai utilisé pas mal de fonctionnalités C ++ 11 dans le NDK Android sans aucun problème.
notlesh

Réponses:

19

Si vous comptez sur votre code pour payer la nourriture et le logement, et que vous devez prendre en charge multiplateforme sur des plates-formes futures inconnues (ou que vous pourriez raisonnablement avoir besoin de prendre en charge multiplateforme à l'avenir), alors concevoir votre code pour s'appuyer sur un une adhésion correcte des auteurs de compilateurs inconnus aux normes linguistiques de pointe est dangereuse (et je dirais, irresponsable). C'est dangereux pour vous, et donc aussi dangereux pour vos personnes à charge.

Si vous êtes prêt à prendre ce genre de risque pour le plaisir auto, alors allez-y. Mais je ne vais pas vous conseiller de le faire.

Parce que, selon mon expérience, il est préférable d' aller sur plusieurs plates-formes, en particulier sur les consoles , en visant le plus petit dénominateur commun dont vous pouvez être sûr qu'il fonctionnera pratiquement partout, et non en s'appuyant sur toutes les dernières fonctionnalités du langage Whiz-Bang. Si un jour vous avez besoin de porter sur une plate-forme qui ne les prend pas en charge, vous devez réécrire vos systèmes à partir de zéro. Pouvez-vous vous permettre de payer un salaire / loyer pendant que cela se produit?

Trevor Powell
la source
4
+1 pour ceci (et le reste de l'article, mais ceci): "s'appuyer sur un tas de rédacteurs de compilateurs inconnus pour respecter correctement les normes linguistiques de pointe est dangereux". Expérimenter avec les derniers jouets est toujours amusant, en comptant moins sur eux.
NoobsArePeople2
2
J'ai toujours très hâte de donner ces réponses "soyez prudents", surtout quand elles ne sont clairement pas ce que l'affiche originale veut entendre. Mais j'ai vu trop de gros bogues de compilateur sur les consoles au cours de ma carrière pour que je me sente à l'aise de sauter sur de nouvelles normes de langage dans un projet multiplateforme. La nécessité de réécrire votre code pour contourner les problèmes dans un compilateur n'est jamais très amusante, en particulier lorsque vous n'avez pas de date limite.
Trevor Powell
Je ne vais pas rejeter cela, mais le nouveau standard C ++ est bien plus que du sucre syntaxique tel que le mot-clé auto.
vdaras
1
@TrevorPowell, vous avez dit que le risque qu'il prendrait était pour le mot clé auto, alors qu'il y a des fonctionnalités beaucoup plus importantes et fondamentales dans le nouveau standard C ++. Certains d'entre eux, comme les références de valeur, devraient être pris en considération lors de la réflexion sur le risque.
vdaras
2
@TrevorPowell c'est pourquoi j'ai dit que la publication ne valait pas la peine de voter malgré les arguments que j'ai à ce sujet. Je pense que c'est un bon article, je voulais juste préciser que le nouveau standard C ++ a des fonctionnalités très importantes et envisager de l'utiliser ne serait pas seulement une chose mineure comme auto.
vdaras
6

Si vous êtes prêt à faire un peu plus de travail, vous pourriez envisager des solutions de réfraction. clang a actuellement des choses intéressantes qui se passent dans ce domaine. Il devrait être possible d'utiliser le mot clé auto, de l'exécuter via le refactorer qui en trouvera toutes les utilisations, de les résoudre pour vous et de générer le code, puis de le compiler avec ce que vous voulez.

Mais cela signifie moins de temps pour travailler sur votre jeu.

Il existe également le potentiel de certaines fonctionnalités supplémentaires, par exemple la réflexion. Vous pouvez créer une classe et générer automatiquement une liste de toutes les propriétés à inspecter lors de l'exécution. Cela pourrait être très utile pour l'écriture de scripts, la production d'éditeurs de jeux, etc. EDIT: Découvrez 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
la source
Très intéressant; l'avez-vous essayé vous-même dans ce but (ou dans un but similaire)?
Jonas Byström
Pas encore, décidé d'attendre qu'il soit un peu mieux développé mais la dernière fois que je l'ai vraiment examiné, ce n'était que dans le svn.
David C. Bishop
Très intéressant (+1)
Samaursa
Cela me rappelle quelque chose comme python 2to3mais en sens inverse et beaucoup plus génial mais probablement plus difficile à utiliser. Mec, que faire de mieux auto?
Steven Lu