Menggunakan C ++ 11 untuk Pengembangan Mesin Game lintas platform

18

Catatan: Ini bukan pertanyaan 'berikan pendapat Anda' tentang C ++ 03 dan C ++ 11.

Mesin permainan kami, yang ditulis dalam C ++ 03, dirancang untuk dikompilasi pada Windows, OSX dan iOS. Dukungan Linux direncanakan dalam waktu dekat. Pengalaman kami terbatas ketika datang ke konsol, itulah sebabnya saya mengajukan pertanyaan ini.

Saat ini, kami sedang memperdebatkan apakah beralih ke C ++ 11 dan menggunakan fitur yang tidak kompatibel dari standar C ++ 11 dapat menimbulkan masalah dalam waktu dekat ketika kami perlu mem-porting mesin kami ke salah satu konsol gen saat ini (mungkin kompiler yang didukung oleh beberapa konsol (s) belum mendukung C ++ 11? Kami tidak tahu ...).

Jadi, pengembang game yang memiliki pengalaman di berbagai platform dan konsol, apakah Anda pikir kami harus tetap berpegang pada C ++ 03 sampai generasi baru konsol tiba dan sebagian besar orang telah beralih ke standar C ++ 11 (sudahkah itu?). Atau sebagian besar konsol menggunakan / mendukung kompiler (VC ++, GCC atau varian?) Yang sudah mendukung fitur C ++ 11?

Samaursa
sumber
1
Pengetahuan saya agak ketinggalan zaman sehingga saya tidak akan memposting ini sebagai jawaban, tetapi pengalaman saya sebelumnya tentang kompiler konsol adalah bahwa Anda beruntung jika mereka cocok dengan standar lama, apalagi yang baru.
Kylotan
1
Fitur apa dan mengapa mereka begitu penting sehingga Anda mempertimbangkan untuk menggunakan standar yang tidak sepenuhnya diimplementasikan bahkan pada platform pengembangan yang paling populer?
snake5
4
@ snake5: otomatis, lambda's, alias templat, delegasi c-tor. Fitur-fitur ini tidak hanya akan membuat kode kita lebih mudah dibaca / dipelihara tetapi juga meningkatkan produktivitas. Hanya kata kunci otomatis adalah salah satu hal yang sangat saya lewatkan ketika saya beralih dari C ++ 11 ke C ++ 03. Fitur-fitur lain seperti templat variadic, walaupun sangat kuat dan pasti dapat meningkatkan kode, kita dapat melakukannya tanpa (dan tidak diimplementasikan sejauh ini oleh kompiler VC ++).
Samaursa
Menambah komentar Kylotan, saya sepenuhnya setuju dengan pendapatnya, dan bahkan menambahkan contoh tertentu dalam pengalaman saya. Jika Anda akan memperluas mesin itu ke platform android, yang dapat dilakukan dengan menggunakan C ++, Anda akan memiliki waktu yang buruk karena fitur C ++ tidak lengkap di NDK. Anda tidak akan dapat menggunakan standar baru dan bahkan beberapa hal di sebelumnya akan salah.
Grimshaw
1
@DevilWithin, saya telah menggunakan beberapa fitur C ++ 11 di Android NDK tanpa masalah.
notlesh

Jawaban:

19

Jika Anda mengandalkan kode Anda untuk membayar makanan dan tempat tinggal, dan Anda perlu mendukung cross-platform di platform masa depan yang tidak diketahui (atau mungkin perlu mendukung cross-platform di masa depan), maka rancang kode Anda untuk mengandalkan sekelompok kepatuhan yang benar penulis compiler tidak diketahui untuk standar bahasa tepi pendarahan adalah berbahaya (dan saya berpendapat, tidak bertanggung jawab). Ini berbahaya bagi Anda, dan karenanya juga berbahaya bagi tanggungan Anda.

Jika Anda bersedia mengambil risiko semacam itu demi auto, maka tentu saja, lakukanlah. Tetapi saya tidak akan menyarankan Anda untuk melakukannya.

Karena menurut pengalaman saya, lintas platform, terutama pada konsol , paling baik dilakukan dengan membidik penyebut umum terendah yang dapat Anda yakini akan bekerja di mana saja, bukan dengan mengandalkan semua fitur bahasa jagoan terbaru. Jika suatu hari Anda perlu port ke platform yang tidak mendukung mereka, Anda akhirnya harus menulis ulang sistem Anda dari awal. Bisakah Anda membayar upah / sewa saat itu terjadi?

Trevor Powell
sumber
4
Memberi +1 untuk ini (dan sisa postingan, tapi ini): "mengandalkan [sekelompok] kepatuhan yang benar dari penulis kompiler yang tidak sesuai dengan standar bahasa yang berdarah adalah berbahaya". Bereksperimen dengan mainan terbaru selalu menyenangkan, bergantung pada mereka tidak begitu banyak.
NoobsArePeople2
2
Saya selalu sangat cemas tentang memberikan jawaban "hati-hati" ini, terutama ketika mereka jelas bukan yang ingin didengar poster asli. Tetapi saya telah melihat bug kompiler besar pada konsol terlalu sering dalam karir saya sehingga saya merasa nyaman untuk melompat ke standar bahasa baru dalam proyek lintas platform. Perlu menulis ulang kode Anda untuk menyelesaikan masalah dalam kompiler tidak pernah menyenangkan, terutama ketika Anda berada di bawah tenggat waktu.
Trevor Powell
Saya tidak akan menurunkan ini tetapi standar C ++ yang baru jauh lebih banyak daripada gula sintaksis seperti kata kunci otomatis.
vdaras
1
@TrevorPowell, Anda mengatakan bahwa risiko yang akan ia ambil adalah demi kata kunci otomatis, ketika ada fitur yang jauh lebih penting dan mendasar dalam standar C ++ yang baru. Beberapa dari mereka, seperti referensi nilai, harus menjadi pertimbangan penting ketika memikirkan risiko.
vdaras
2
@TrevorPowell itu sebabnya saya mengatakan bahwa posting tidak layak downvoting meskipun ada argumen yang saya miliki tentang hal itu. Saya percaya bahwa ini adalah posting yang bagus, saya hanya ingin mengklarifikasi bahwa standar C ++ baru memiliki beberapa fitur yang sangat penting dan mempertimbangkan untuk menggunakannya bukan hanya tentang hal kecil seperti auto.
vdaras
6

Jika Anda bersedia melakukan sedikit lebih banyak pekerjaan, Anda bisa mencari solusi refractoring. dentang memiliki beberapa hal menarik yang terjadi di daerah itu saat ini. Seharusnya dimungkinkan untuk menggunakan kata kunci otomatis, menjalankannya melalui refactorer yang akan menemukan semua kegunaannya, menyelesaikannya untuk Anda dan mengeluarkan kode lalu kompilasi dengan apa pun yang Anda inginkan.

Tapi itu berarti lebih sedikit waktu untuk mengerjakan gim Anda.

Ada juga potensi untuk beberapa fitur tambahan, misalnya refleksi. Anda bisa membuat kelas dan secara otomatis menghasilkan daftar semua properti untuk diperiksa saat runtime. Bisa jadi sangat berguna untuk scripting, memproduksi editor game dan sebagainya. EDIT: Lihat 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
sumber
Sangat menarik; Sudahkah Anda mencobanya sendiri untuk tujuan (atau serupa) ini?
Jonas Byström
Belum, memutuskan untuk menunggu sampai sedikit lebih berkembang tetapi terakhir kali saya benar-benar melihatnya, itu hanya di svn.
David C. Bishop
Sangat menarik (+1)
Samaursa
Ini mengingatkan saya pada sesuatu seperti python 2to3tetapi secara terbalik dan jauh lebih mengagumkan tetapi mungkin lebih sulit untuk digunakan. ***, seberapa banyak yang bisa autodidapat?
Steven Lu