Использование 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?

Samaursa
источник
1
Мои знания несколько устарели, поэтому я не буду публиковать это как ответ, но мой прошлый опыт работы с консольными компиляторами заключается в том, что вам повезло, если они соответствуют старому стандарту, не говоря уже о новом.
Kylotan
1
Какие функции и почему они так важны, что вы рассматриваете возможность использования стандарта, который не полностью реализован даже на самых популярных платформах разработки?
snake5
4
@ snake5: авто, лямбда, псевдоним шаблона, делегирование c-tor. Эти функции не только сделают наш код более читабельным / понятным, но и увеличат производительность. Просто ключевое слово auto - одна из вещей, по которой я часто скучаю, когда переключаюсь с C ++ 11 на C ++ 03. Другие функции, такие как шаблоны с переменными значениями, хотя и очень мощные и могут определенно улучшить код, мы можем обойтись (и до сих пор не реализованы компилятором VC ++).
Самаурса
Добавляя к тому, что прокомментировал Килотан, я полностью согласен с его мнением и даже добавлю конкретный пример из моего опыта. Если вы собираетесь расширить этот движок до платформы Android, что можно сделать с помощью C ++, у вас будут плохие времена, поскольку функции C ++ в NDK неполны. Вы не сможете использовать новый стандарт, и даже некоторые вещи в предыдущем будут неисправны.
Гримшоу
1
@DevilWithin, я использую довольно много функций C ++ 11 в Android NDK без каких-либо проблем.
Нотлеш

Ответы:

19

Если вы полагаетесь на свой код для оплаты еды и жилья, и вам необходимо поддерживать кроссплатформенность на неизвестных будущих платформах (или, возможно, в будущем потребуется поддержка кроссплатформенности), тогда разрабатывайте свой код так, чтобы он опирался на Правильное соблюдение устоявшимися стандартами языка многих неизвестных авторов компиляторов опасно (и я бы сказал, безответственным). Это опасно для вас и, следовательно, также опасно для ваших иждивенцев.

Если вы готовы пойти на такой риск ради auto, то во что бы то ни стало, сделайте это. Но я не собираюсь советовать вам делать это.

Потому что, по моему опыту, кросс-платформенность, особенно на консолях , лучше всего достигается, если стремиться к наименьшему общему знаменателю, который, как вы можете быть уверены, будет работать практически везде, а не опираясь на все новейшие возможности языка whiz-bang. Если вам когда-нибудь понадобится портировать на платформу, которая их не поддерживает, вам придется переписывать свои системы с нуля. Можете ли вы позволить себе платить зарплату / арендную плату, пока это происходит?

Тревор Пауэлл
источник
4
+1 за это (и остальную часть поста, но это): «полагаться [на] на кучу неизвестных авторов компиляторов правильное соблюдение самых передовых стандартов языка опасно». Экспериментировать с новейшими игрушками всегда весело, полагаться на них не так уж и много.
NoobsArePeople2
2
Я всегда очень хочу дать эти «осторожные» ответы, особенно когда они явно не то, что хочет услышать оригинальный постер. Но за свою карьеру я слишком много раз сталкивался с большими ошибками компилятора на консолях, чтобы мне было комфортно переходить на новые языковые стандарты в кроссплатформенном проекте. Потребность переписать свой код, чтобы обойти проблемы в компиляторе, никогда не доставляет удовольствия, особенно когда вы находитесь в крайнем сроке.
Тревор Пауэлл
Я не собираюсь преуменьшать это, но новый стандарт C ++ намного больше, чем синтаксический сахар, такой как ключевое слово auto.
vdaras
1
@TrevorPowell, вы сказали, что риск, который он предпримет, был ради ключевого слова auto, когда в новом стандарте C ++ есть гораздо более важные и фундаментальные особенности. Некоторые из них, такие как ссылки на ценности, должны быть приняты во внимание при рассмотрении риска.
Вдарас
2
@TrevorPowell, поэтому я сказал, что пост не стоит опускать голос, несмотря на любые мои аргументы об этом. Я считаю, что это хороший пост, я просто хотел пояснить, что новый стандарт C ++ обладает некоторыми очень важными функциями, и его использование не будет чем-то вроде мелочи, такой как auto.
Вдарас
6

Если вы готовы сделать немного больше работы, вы можете посмотреть на рефракторные решения. У Clang есть кое-что интересное, что происходит сейчас в этой области. Должно быть возможно использовать ключевое слово auto, запустить его через рефакторер, который найдет все варианты его использования, разрешит их для вас и выведет код, а затем скомпилирует его с тем, что вы захотите.

Но это означает меньше времени для работы над игрой.

Существует также потенциал для некоторых дополнительных функций, например, отражения. Вы можете создать класс и автоматически создать список всех свойств для проверки во время выполнения. Может быть очень полезно для написания скриптов, создания игровых редакторов и так далее. РЕДАКТИРОВАТЬ: Проверьте 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получить?
Стивен Лу