Usando o C ++ 11 para desenvolvimento de mecanismos de jogos entre plataformas

18

Nota: Esta não é uma pergunta 'dê a sua opinião' sobre C ++ 03 e C ++ 11.

Nosso mecanismo de jogo, escrito em C ++ 03, foi projetado para ser compilado no Windows, OSX e iOS. O suporte ao Linux está planejado para o futuro (muito) próximo. Nossa experiência é limitada quando se trata de consoles, e é por isso que estou fazendo essa pergunta.

Atualmente, estamos debatendo se a mudança para o C ++ 11 e o uso de recursos incompatíveis do padrão C ++ 11 podem representar um problema no futuro próximo, quando precisarmos portar nosso mecanismo para qualquer um dos atuais consoles gen (talvez o compiladores suportados por alguns console (s) ainda não suportam C ++ 11? Não sabemos ...).

Então, desenvolvedores de jogos que têm experiência em várias plataformas e consoles, você acha que devemos seguir o C ++ 03 até que a nova geração de consoles chegue e quase todo mundo tenha mudado para o padrão C ++ 11 (já o fizeram?). Ou a maioria dos consoles usa / suporta compiladores (VC ++, GCC ou variantes?) Que já suportam recursos do C ++ 11?

Samaursa
fonte
11
Meu conhecimento está um pouco desatualizado, por isso não vou postar isso como resposta, mas minha experiência anterior com os compiladores de console é que você tem sorte se eles corresponderem ao antigo padrão, não importa o novo.
Kylotan
11
Quais recursos e por que eles são tão importantes que você considera usar um padrão que não é totalmente implementado, mesmo nas plataformas de desenvolvimento mais populares?
snake5
4
@ snake5: auto, lambda, alias de modelo, delegação c-tor. Esses recursos não apenas tornarão nosso código mais legível / sustentável, como também aumentarão a produtividade. Apenas a palavra-chave automática é uma das coisas que eu sinto muita falta quando mudo de C ++ 11 para C ++ 03. Outros recursos, como modelos variados, embora sejam muito poderosos e possam melhorar definitivamente o código, podemos ficar sem (e ainda não foram implementados pelo compilador VC ++).
Samaursa
Além do que Kylotan comentou, concordo plenamente com sua opinião e até adiciono um exemplo particular em minha experiência. Se você estender esse mecanismo para a plataforma Android, o que pode ser feito usando C ++, você terá um mau momento, pois os recursos C ++ estão incompletos no NDK. Você não poderá usar o novo padrão e até algumas coisas anteriores poderão estar com defeito.
Grimshaw 28/11
11
@DevilWithin, tenho usado alguns recursos do C ++ 11 no NDK do Android sem problemas.
notlesh

Respostas:

19

Se você confia no seu código para pagar por comida e abrigo, e precisa oferecer suporte a várias plataformas em plataformas futuras desconhecidas (ou razoavelmente talvez precise oferecer suporte a várias plataformas no futuro), crie seu código para contar com um A adesão correta de muitos escritores de compiladores desconhecidos aos padrões de linguagem de ponta é perigosa (e eu diria, irresponsável). É perigoso para você e, portanto, também perigoso para seus dependentes.

Se você estiver disposto a correr esse tipo de risco auto, por qualquer meio, vá em frente. Mas não vou aconselhá-lo a fazê-lo.

Porque, na minha experiência, a migração de plataforma cruzada, principalmente em consoles , é melhor alcançada, visando o menor denominador comum que você pode ter certeza de que funcionará virtualmente em todos os lugares, sem depender dos recursos mais recentes da linguagem whiz-bang. Se algum dia você precisar portar para uma plataforma que não os suporte, você terá que reescrever seus sistemas do zero. Você pode pagar salários / aluguel enquanto isso acontece?

Trevor Powell
fonte
4
+1 para isso (e para o restante do post, mas para isso): "contar com a adesão correta de vários escritores de compiladores desconhecidos aos padrões de linguagem de ponta é perigoso". Experimentar os brinquedos mais recentes é sempre divertido, contando com eles nem tanto.
NoobsArePeople2
2
Estou sempre muito ansioso para dar essas respostas "seja cauteloso", principalmente quando elas claramente não são o que o pôster original quer ouvir. Mas já vi muitas falhas de compilador nos consoles muitas vezes na minha carreira para me sentir confortável pulando para novos padrões de linguagem em um projeto de plataforma cruzada. A necessidade de reescrever seu código para solucionar problemas em um compilador nunca é nada divertida, principalmente quando você está dentro de um prazo.
Trevor Powell
Não vou diminuir o voto disso, mas o novo padrão C ++ é muito mais do que açúcar sintático, como a palavra-chave auto.
Vdaras #
11
@TrevorPowell, você disse que o risco que ele correria era por causa da palavra-chave automática, quando há recursos muito mais importantes e fundamentais no novo padrão C ++. Alguns deles, como referências a valores, teriam que ser levados em consideração importante ao pensar sobre o risco.
Vdaras #
2
@TrevorPowell, foi por isso que eu disse que não vale a pena votar no post, apesar dos argumentos que tenho sobre ele. Eu acredito que este é um bom post, eu só queria esclarecer que o novo padrão C ++ tem alguns recursos muito importantes e, considerando que usá-lo, não seria apenas uma coisa menor, como auto.
Vdaras
6

Se você estiver disposto a trabalhar um pouco mais, poderá procurar soluções de refratores. O clang tem algumas coisas interessantes acontecendo nessa área atualmente. Deve ser possível usar a palavra-chave auto, executá-la através do refatorador que encontrará todos os usos, resolvê-los para você e emitir o código e, em seguida, compilá-lo com o que quiser.

Mas isso significa menos tempo para trabalhar no seu jogo.

Há também o potencial de alguns recursos extras, por exemplo, reflexão. Você pode criar uma classe e gerar automaticamente uma lista de todas as propriedades para inspecionar em tempo de execução. Pode ser muito útil para scripts, produzindo editores de jogos e assim por diante. EDIT: Confira 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
fonte
Altamente interessante; você já tentou isso para esse (ou semelhante) objetivo?
Jonas Byström
Ainda não, decidi esperar até que estivesse um pouco melhor desenvolvido, mas da última vez que realmente examinei, estava apenas no svn.
David C. Bishop
Muito interessante (+1)
Samaursa 13/02/2013
Isso me lembra algo como o python, 2to3mas ao contrário, e muito mais impressionante, mas provavelmente mais difícil de usar. Cara, quanto melhor pode autoficar?
Steven Lu