Utilizzo di C ++ 11 per lo sviluppo di Game Engine multipiattaforma


18

Nota: questa non è una domanda "lascia la tua opinione" su C ++ 03 e C ++ 11.

Il nostro motore di gioco, scritto in C ++ 03, è progettato per essere compilato su Windows, OSX e iOS. Il supporto per Linux è previsto per il (molto) prossimo futuro. La nostra esperienza è limitata quando si tratta di console, motivo per cui sto ponendo questa domanda.

Attualmente, stiamo discutendo se il passaggio a C ++ 11 e l'utilizzo di funzionalità non compatibili dello standard C ++ 11 potrebbe rappresentare un problema nel prossimo futuro quando avremo bisogno di portare il nostro motore su una delle console gen attuali (forse il i compilatori supportati da alcune console non supportano ancora C ++ 11? Non lo sappiamo ...).

Quindi, gli sviluppatori di giochi che hanno esperienza su più piattaforme e console, pensi che dovremmo attenerci al C ++ 03 fino all'arrivo della nuova generazione di console e quasi tutti sono passati allo standard C ++ 11 (lo hanno già fatto?). Oppure la maggior parte delle console utilizza / supporta compilatori (VC ++, GCC o varianti?) Che supportano già le funzionalità di C ++ 11?


1
Le mie conoscenze sono un po 'obsolete, quindi non pubblicherò questo come una risposta, ma la mia esperienza passata con i compilatori di console è che sei fortunato se corrispondono al vecchio standard, non importa un nuovo.
Kylotan,

1
Quali caratteristiche e perché sono così importanti da considerare l'utilizzo di uno standard non completamente implementato anche sulle piattaforme di sviluppo più popolari?
snake5,

4
@ snake5: auto, lambda, template alias, delegazione c-tor. Queste caratteristiche non solo renderanno il nostro codice più leggibile / gestibile, ma aumenteranno anche la produttività. Solo la parola chiave auto è una delle cose che mi mancano molto quando passo da C ++ 11 a C ++ 03. Altre caratteristiche come i modelli variadici, sebbene molto potenti e possono sicuramente migliorare il codice, possiamo farne a meno (e non sono implementate finora dal compilatore VC ++).
Samaursa,

Aggiungendo ciò che Kylotan ha commentato, sono pienamente d'accordo con la sua opinione e aggiungo persino un esempio particolare nella mia esperienza. Se hai intenzione di estendere quel motore alla piattaforma Android, cosa che puoi fare usando C ++, avrai un brutto momento poiché le funzionalità C ++ sono incomplete in NDK. Non sarai in grado di utilizzare il nuovo standard e anche alcune cose nella precedente saranno difettose.
Grimshaw,

1
@DevilWithin, ho usato alcune funzionalità C ++ 11 in Android NDK senza problemi.
notlesh,

Risposte:


19

Se fai affidamento sul tuo codice per pagare cibo e alloggio e devi supportare multipiattaforma su piattaforme future sconosciute (o ragionevolmente potrebbe essere necessario supportare multipiattaforma in futuro), quindi progettare il codice per fare affidamento su un il gruppo di scrittori di compilatori sconosciuti che aderiscono correttamente agli standard linguistici sanguinanti è pericoloso (e direi, irresponsabile). È pericoloso per te e quindi anche per i tuoi familiari a carico.

Se sei disposto a correre quel rischio per il gusto di autofarlo, allora provaci. Ma non ti consiglierò di farlo.

Perché nella mia esperienza, passare da una piattaforma all'altra, in particolare su console , si ottiene meglio mirando al minimo comune denominatore di cui si può essere certi che funzionerà praticamente ovunque, non facendo affidamento su tutte le ultime funzionalità del linguaggio whiz-bang. Se un giorno devi eseguire il port su una piattaforma che non li supporta, finisci per riscrivere i tuoi sistemi da zero. Potete permettervi di pagare salari / affitto mentre ciò accade?


4
+1 per questo (e per il resto del post, ma questo): "fare affidamento su [ing] un gruppo di scrittori di compilatori sconosciuti che la corretta aderenza agli standard linguistici all'avanguardia è pericoloso". Sperimentare con gli ultimi giocattoli è sempre divertente, basandosi su di essi non tanto.
NoobsArePeople2

2
Sono sempre molto ansioso di dare queste risposte "sii cauto", in particolare quando chiaramente non sono ciò che il poster originale vuole sentire. Ma ho visto troppi bug di compilatore su console troppe volte nella mia carriera per sentirmi a mio agio nel saltare nuovi standard linguistici in un progetto multipiattaforma. La necessità di riscrivere il codice per aggirare i problemi in un compilatore non è mai divertente, in particolare quando hai una scadenza.
Trevor Powell,

Non ho intenzione di sottovalutare questo, ma il nuovo standard C ++ è molto più di zucchero sintattico come la parola chiave auto.
vdaras,

1
@TrevorPowell, hai detto che il rischio che avrebbe corso sarebbe stato per il bene della parola chiave auto, quando ci sono molte più importanti e fondamentali funzionalità nel nuovo standard C ++. Alcuni di essi, come i riferimenti ai valori, dovrebbero essere tenuti in grande considerazione quando si pensa al rischio.
vdaras,

2
@TrevorPowell è per questo che ho detto che il post non vale la pena effettuare il downvoting nonostante tutti gli argomenti che ho a riguardo. Credo che questo sia un buon post, volevo solo chiarire che il nuovo standard C ++ ha alcune caratteristiche molto importanti e considerando che usarlo non riguarderebbe solo una cosa minore come l'auto.
vdaras,

6

Se sei disposto a fare un po 'più di lavoro, potresti cercare soluzioni di rifrazione. clang ha alcune cose interessanti in corso in quella zona al momento. Dovrebbe essere possibile usare la parola chiave auto, eseguirla attraverso il refactorer che troverà tutti gli usi di esso, risolverli per te e produrre il codice, quindi compilarlo con quello che vuoi.

Ma questo significa meno tempo per lavorare sul tuo gioco.

Vi è anche il potenziale per alcune funzionalità extra, ad esempio la riflessione. È possibile creare una classe e generare automaticamente un elenco di tutte le proprietà da ispezionare in fase di esecuzione. Potrebbe essere molto utile per lo scripting, la produzione di editor di giochi e così via. EDIT: controlla 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


Molto interessante; l'hai provato tu stesso per questo (o simile) scopo?
Jonas Byström,

Non ancora, ho deciso di aspettare fino a quando non fosse stato sviluppato un po 'meglio, ma l'ultima volta che l'ho davvero esaminato, era solo in svn.
David C. Bishop,

Molto interessante (+1)
Samaursa,

Questo mi ricorda qualcosa come Python 2to3ma al contrario e molto più fantastico ma probabilmente più difficile da usare. Amico, quanto meglio può autoottenere?
Steven Lu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.