Використання C ++ 11 для розвитку платформних ігрових механізмів


18

Примітка. Це не питання "дайте свою думку" щодо C ++ 03 та C ++ 11.

Наш ігровий движок, написаний на C ++ 03, призначений для компіляції в Windows, OSX та iOS. Підтримка Linux планується в найближчому майбутньому. Наш досвід обмежений, коли мова йде про консолі, саме тому я задаю це питання.

В даний час ми обговорюємо, чи може перехід на C ++ 11 та використання несумісних функцій стандарту C ++ 11 найближчим часом можуть стати проблемою, коли нам потрібно буде підключити двигун до будь-якої з поточних генконсолей (можливо, компілятори, підтримувані деякими консолями, ще не підтримують C ++ 11? Ми не знаємо ...).

Отже, розробники ігор, які мають досвід роботи на багатьох платформах і консолях, чи вважаєте ви, що ми повинні дотримуватися C ++ 03, поки не прийде нове покоління консолей, і більшість з них перейшли на стандарт C ++ 11 (це вже є?). Або більшість консолей, що використовують / підтримують компілятори (VC ++, GCC або варіанти?), Які вже підтримують функції C ++ 11?


1
Мої знання дещо застаріли, тому я не буду публікувати це як відповідь, але мій минулий досвід компіляторів консолей полягає в тому, що вам пощастить, якщо вони відповідають старому стандарту, не маючи на увазі нового.
Кілотан

1
Які функції та чому вони такі важливі, що ви розглядаєте можливість використання стандарту, який не повністю реалізований навіть на найпопулярніших платформах розвитку?
змія5

4
@ snake5: авто, лямбда, псевдонім шаблону, делегація c-tor. Ці функції не лише зроблять наш код більш читабельним / зручним для редагування, але й підвищать їх продуктивність. Просто ключове слово auto - це одне з речей, які мені дуже не вистачає, коли я переключаюся з C ++ 11 на C ++ 03. Інші функції, такі як різноманітні шаблони, хоча і дуже потужні і можуть безумовно поліпшити код, ми можемо обійтися без (і поки що не реалізовані компілятором VC ++).
Самаурса

Додаючи до того, що прокоментував Кілотан, я повністю погоджуюся з його думкою і навіть додаю конкретний приклад зі свого досвіду. Якщо ви збираєтеся поширити цей двигун на платформу Android, що можна зробити за допомогою C ++, у вас буде поганий час, оскільки функції C ++ неповні в NDK. Ви не зможете використовувати новий стандарт, і навіть деякі речі попереднього будуть несправними.
Грімшо

1
@DevilWithin, я використовував досить багато функцій C ++ 11 в Android NDK без проблем.
нотлеш

Відповіді:


19

Якщо ви покладаєтесь на свій код, щоб оплачувати їжу та притулок, і вам потрібно підтримувати крос-платформу на невідомих майбутніх платформах (або розумно може знадобитися підтримувати крос-платформу в майбутньому), то розробляючи свій код, щоб покластися на Купа невідомих письменників-упорядників правильне дотримання норм мови, що кровоточить, є небезпечним (і я б заперечив, безвідповідально). Це небезпечно для вас, а отже, небезпечно і для ваших утриманців.

Якщо ви готові взяти на себе такий ризик заради цього auto, будь-ласка, ідіть на це. Але я не збираюся радити це робити.

Тому що, з мого досвіду, перехід між платформами, особливо на консолі , найкраще досягти, націлюючи на найнижчий загальний знаменник, який, напевно, можна буде працювати практично скрізь, а не покладаючись на всі новітні функції мови вибуху. Якщо коли-небудь вам потрібно буде підключитися до платформи, яка їх не підтримує, вам доведеться переписувати свої системи з нуля. Чи можете ви дозволити собі виплату зарплати / оренди, поки це відбувається?


4
+1 для цього (та решти публікації, але це): "покластись [на] на купу невідомих письменників-упорядників правильне дотримання норм мови, що кровоточить, небезпечно". Експериментувати з останніми іграшками завжди весело, покладатися на них не так вже й багато.
NoobsArePeople2

2
Мені завжди дуже подобається давати ці "обережні" відповіді, особливо коли вони явно не є тим, що хоче почути оригінальний плакат. Але я бачив великі помилки компілятора на консолях занадто багато разів у своїй кар’єрі, щоб мені було комфортно переходити на нові мовні стандарти в рамках кросплатформенного проекту. Не потрібно переписувати код, щоб вирішити проблеми в компіляторі - це ніколи не цікаво, особливо коли у вас є термін.
Тревор Пауелл

Я не збираюся це робити, але новий стандарт C ++ набагато більше, ніж синтаксичний цукор, такий як автоматичне ключове слово.
вдарас

1
@TrevorPowell, ви сказали, що ризик, який він візьме на себе, був заради автоматичного ключового слова, коли в новому стандарті C ++ є набагато важливіші та основні функції. Деякі з них, як-от посилання на рецензії, повинні були б враховуватися, коли мислимо про ризик.
вдарас

2
@TrevorPowell, тому я сказав, що публікацію не варто схиляти, незважаючи на будь-які аргументи з цього приводу. Я вважаю, що це хороший пост, я просто хотів уточнити, що новий стандарт C ++ має деякі дуже важливі функції, і розгляд його використання не стосується лише незначної речі, як, наприклад, авто.
вдарас

6

Якщо ви готові зробити трохи більше роботи, ви можете розглянути рішення про вогнетривку. На даний момент в Кланге є цікаві речі. Потрібно мати можливість використовувати ключове слово auto, запустити його через refactorer, який знайде всі його використання, вирішить їх для вас і виведе код, а потім скомпілює його з усім необхідним.

Але це означає менше часу для роботи над вашою грою.

Також є потенціал для деяких додаткових особливостей, наприклад, рефлексії. Ви можете створити клас та автоматично сформувати список усіх властивостей, які слід перевіряти під час виконання. Може бути дуже корисним для створення сценаріїв, створення редакторів ігор тощо. EDIT: Перевірте 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


Дуже цікаво; чи ви пробували це самостійно для цієї (або подібної) мети?
Йонас Бистрьом

Ще не вирішив зачекати, поки воно буде трохи краще розроблене, але востаннє я справді заглянув у нього, це було лише у svn.
Давид К. Єпископ

Дуже цікаво (+1)
Самаурса

Це нагадує мені щось на кшталт python, 2to3але в зворотному і набагато більш дивовижному, але, ймовірно, більш важкому у використанні. Людина, наскільки краще можна autoотримати?
Стівен Лу
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.