Platformlar Arası Oyun Motoru Geliştirme için C ++ 11 kullanma


18

Not: Bu, C ++ 03 ve C ++ 11 hakkında 'fikir verin' sorusu değildir.

C ++ 03 ile yazılmış oyun motorumuz Windows, OSX ve iOS'ta derlenecek şekilde tasarlanmıştır. Linux desteği (çok) yakın gelecek için planlanmaktadır. Konsollar söz konusu olduğunda deneyimimiz sınırlıdır, bu yüzden bu soruyu soruyorum.

Şu anda, C ++ 11'e geçmenin ve C ++ 11 standardının uyumlu olmayan özelliklerini kullanmanın, motorumuzu mevcut gen konsollarından herhangi birine (belki de Bazı konsol (lar) tarafından desteklenen derleyiciler henüz C ++ 11'i desteklemiyor mu? Bilmiyoruz ...).

Yani, birden fazla platform ve konsolda deneyimi olan oyun geliştiricileri, yeni nesil konsollar gelene ve herkesin çoğu C ++ 11 standardına geçene kadar C ++ 03'e bağlı kalmamız gerektiğini düşünüyor musunuz? Yoksa çoğu konsol zaten C ++ 11 özelliklerini destekleyen / destek derleyicilerini (VC ++, GCC veya varyantlar) kullanıyor mu?


1
Benim bilgim biraz güncel değil, bu yüzden bunu bir cevap olarak göndermeyeceğim, ancak eski konsol derleyicileriyle ilgili geçmiş deneyimlerim, eski standarda uyuyorlarsa şanslı olduğunuz, yeni bir tane almayın.
Kylotan

1
Hangi özellikler ve neden bu kadar önemlidir? En popüler geliştirme platformlarında bile tam olarak uygulanmayan bir standart kullanmayı düşünürsünüz?
snake5

4
@ snake5: otomatik, lambda, şablon takma adı, c-tor delegasyonu. Bu özellikler sadece kodumuzu daha okunabilir / bakımı kolay hale getirmekle kalmayacak, aynı zamanda imo verimliliği de artıracaktır. C ++ 11'den C ++ 03'e geçiş yaptığımda sadece otomatik anahtar kelime çok özlediğim şeylerden biri. Variadic şablonlar gibi diğer özellikler, çok güçlü olmasına rağmen ve kesinlikle kodu geliştirebilir, biz olmadan yapabiliriz (ve şimdiye kadar VC ++ derleyicisi tarafından uygulanmadı).
Samaursa

Kylotan'ın yorumlarına ek olarak, onun fikrine tamamen katılıyorum ve hatta deneyimlerime belirli bir örnek ekliyorum. Bu motoru C ++ kullanarak yapılabilecek android platformuna genişletecekseniz, C ++ özellikleri NDK'de eksik olduğu için kötü bir zamanınız olacak. Yeni standardı kullanamayacaksınız ve önceki standarttaki bazı şeyler bile hatalı olacaktır.
Grimshaw

1
@DevilWithin, Android NDK'de birkaç C ++ 11 özelliğini sorunsuz kullanıyorum.
notlesh

Yanıtlar:


19

Yiyecek ve barınak için ödeme yapmak için kodunuza güveniyorsanız ve gelecekteki bilinmeyen platformlarda çapraz platformu desteklemeniz gerekiyorsa (veya gelecekte çapraz platformu desteklemeniz gerekebilir), ardından kodunuzu bir bir sürü bilinmeyen derleyici yazarının kanayan dil standartlarına doğru şekilde uyması tehlikelidir (ve iddia ediyorum, sorumsuzum). Bu sizin için tehlikelidir ve bu nedenle bakmakla yükümlü olduğunuz kişiler için de tehlikelidir.

Uğruna bu tür bir risk almaya istekli iseniz auto , elbette, bunun için gidin. Ama bunu yapmanızı tavsiye etmeyeceğim.

Çünkü tecrübelerime göre, platformlar arası gidiş, özellikle konsollarda , en iyi whiz-bang dil özelliklerine dayanarak değil, hemen hemen her yerde çalışacağından emin olabileceğiniz en düşük ortak paydayı hedefleyerek en iyi şekilde yapılır. Bir gün onları desteklemeyen bir platforma geçmeniz gerekiyorsa, sistemlerinizi sıfırdan yeniden yazmak zorunda kalırsınız. Bu gerçekleşirken ücret / kira ödeyebilir misiniz?


4
Bunun için +1 (ve postanın geri kalanı, ancak bu): "bilinmeyen bir derleyici yazarının kanayan kenar dil standartlarına doğru şekilde uyması tehlikeye atılmak tehlikelidir". En son oyuncaklarla denemek her zaman eğlencelidir, onlara çok fazla güvenmemek.
NoobsArePeople2

2
Bu "temkinli" cevapları vermek konusunda her zaman gerçekten endişeliyim, özellikle de orijinal afişin duymak istediği şeyler olmadığı zaman. Ancak, platformlar arası bir projede yeni dil standartlarına atlamaktan rahat hissetmem için kariyerimde konsollarda büyük derleyici hataları gördüm. Bir derleyici sorunları aşmanın kodunuzu yeniden yazmak gerek olduğunu asla bir süre altındasın özellikle, herhangi bir eğlence.
Trevor Powell

Bunu küçümsemeyeceğim, ancak yeni C ++ standardı, otomatik anahtar kelime gibi sözdizimsel şekerden çok daha fazla.
vdaras

1
@TrevorPowell, yeni C ++ standardında çok daha önemli ve temel özellikler olduğunda, alacağı riskin otomatik anahtar kelime uğruna olduğunu söylediniz. Bunlardan bazıları, rvalue referansları gibi, risk hakkında düşünürken dikkate alınmalıdır.
vdaras

2
@TrevorPowell bu yüzden bu konuda sahip olduğum argümanlara rağmen gönderinin aşağı oylamaya değmediğini söyledim. Bu iyi bir yazı olduğuna inanıyorum, sadece yeni C ++ standardının bazı çok önemli özelliklere sahip olduğunu açıklamak istedim ve kullanmayı düşünmek sadece otomatik gibi küçük bir şeyle ilgili olmayacaktı.
vdaras

6

Biraz daha fazla iş yapmaya istekliyseniz, refrakter çözümlerine bakabilirsiniz. clang şu anda bu alanda bazı ilginç şeyler oluyor. Otomatik anahtar kelimeyi kullanmak, tüm kullanım alanlarını bulabilecek refactorer aracılığıyla çalıştırmak, bunları sizin için çözmek ve kodu çıkarmak ve sonra istediğiniz her şeyi derlemek mümkün olmalıdır.

Ancak bu, oyununuz üzerinde çalışmak için daha az zaman demektir.

Ayrıca yansıma gibi bazı ekstra özellikler için potansiyel vardır. Bir sınıf oluşturabilir ve çalışma zamanında denetlenecek tüm özelliklerin bir listesini otomatik olarak oluşturabilirsiniz. Komut dosyası oluşturmak, oyun editörleri üretmek vb. EDIT: clreflect kontrol edin .

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


Son derece ilginç; bunu (ya da benzeri) bir amaç için kendiniz denediniz mi?
Jonas Byström

Henüz değil, biraz daha iyi olana kadar beklemeye karar verdi ama son kez gerçekten baktım, sadece svn oldu.
David

Çok ilginç (+1)
Samaursa

Bu bana python gibi bir şey hatırlatıyor 2to3ama ters ve çok daha harika ama muhtemelen daha zor. Adamım, ne kadar iyi olabilir auto?
Steven Lu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.