Хорошо, просто чтобы пробить дыры в той разглагольствованию, которое вы связали:
- «C # опирается на интерпретатор« Just In Time »» - неправильно - это JIT- компилятор . После того, как метод JITted один раз , скомпилированный код повторно используется для каждого вызова. Скомпилированный код очень близок к такому же быстродействию, как и предварительно скомпилированный код.
- «Ксеноновый процессор - это« на месте »процессор» - он имеет в виду «по порядку»? - И: «Ксеноновый процессор не имеет предсказания ветвления» . Он подразумевает, что это означает, что JIT-компиляция естественным образом создает плохой код, который должен быть переупорядочен ЦП и вызывает много ветвлений - что является абсолютной чепухой . Один и тот же совет по производительности для работы на этой архитектуре процессора применим как к C ++, так и к C #.
- «[JIT] требует постоянного сброса на 360» - неправильно, скомпилированный код может храниться в кеше, как любой обычно скомпилированный код. (Если он имеет в виду конвейерную очистку, см. Пункт выше.)
- «генерики [...] используют генерацию кода» - генерики JITted, как и все остальное, и, как и все остальное, код JITted быстрый. За использование дженериков не снижается производительность.
- «все сексуальные составляющие языка [...] требуют предсказания ветвлений ...» - как это также не относится к C ++? - «... или [...] генерация кода на месте» - он имеет в виду JITting? Я упоминал, что это быстро? (Я не буду вдаваться во все места, где CLR для настольных компьютеров использует фактическую генерацию кода - функция, не поддерживаемая Xbox 360!)
- «[C # не имеет] огромных библиотек [C ++]» - кроме, скажем, самой XNA? И многое другое . (Тем не менее, это несколько справедливо.)
XNA на Xbox 360 работает на модифицированной версии .NET Compact Framework CLR. Я не сомневаюсь, что это не соответствует стандарту настольной версии. JITter, вероятно , не так хорош, но я тоже не думаю, что это плохо . Я удивлен, что он не упомянул сборщик мусора, который ужасен по сравнению с настольным CLR.
(Конечно, в любом случае вы не должны попадать в сборщик мусора в профессионально разработанной игре, так же как вы должны быть осторожны с распределением в любой игре профессионального уровня.)
(Для реального технического обсуждения .NET Compact Framework, возможно, начните с этой серии статей: Обзор , JIT-компилятор , GC и куча .)
То, как он совершенно не определен в своей терминологии, затрудняет даже понимание того, что он имеет в виду. Либо он в режиме максимальной ярости, либо не знает, о чем говорит.
Теперь, когда мы получили , что из пути, вот некоторые вещи , которые вы бы пропустить с помощью XNA на 360, а не идти родным :
- Доступ к блоку SIMD / Vector для действительно очень быстрой математики с плавающей запятой процессора
- Возможность использовать код на родном языке, который, вероятно, будет немного быстрее, чем C #
- Возможность быть немного немного ленивее с тем, как вы выделяете память
- Игры XBLIG имеют доступ только к 4 из 6 ядер (но мы по-прежнему получаем все 3 процессора, и они также не являются полными ядрами, поэтому мы не пропускаем много) - не уверен, применимо ли это к не-XBLIG XNA игры
- Полный доступ к DirectX для выполнения действительно непонятного графического обмана
Также стоит отметить, что это только ограничения на стороне процессора. У вас все еще есть совершенно бесплатный доступ к графическому процессору.
Я описал эти вещи в этом ответе на тот же вопрос, что и этот. Как я уже упоминал в этом ответе, XNA абсолютно подходит для «профессионального» развития .
Единственные причины, по которым вам следует избегать, это то, что вы не можете нанять талант C #, лицензировать движки C # и повторно использовать существующий код C # так же, как вы можете использовать существующую базу знаний C ++. Или потому что вы также можете ориентироваться на платформу, которая не поддерживает C #.
Конечно, для многих из нас, кто не является «профессиональным» разработчиком, XNA - наш единственный вариант, чтобы перейти на Xbox 360, что делает вопрос спорным.
Чтобы ответить на другие ваши вопросы:
Ничто в C # не мешает вам использовать ориентированные на данные подходы практически так же, как вы используете их в C ++.
В C # отсутствует возможность автоматического встроенного кода во время компиляции, и (без необходимости проверять) я почти уверен, что JITter компактного CLR не может встроить методы (CLR рабочего стола может). Поэтому для кода, критичного к производительности, вам, возможно, придется вручную встроить C #, где C ++ предоставляет некоторую помощь.
Вероятно, еще одной причиной, по которой вы не часто сталкиваетесь с такими сложными математическими процессорами, как обнаружение столкновений и симуляция флюидов в C #, является отсутствие доступа к векторному блоку (как упоминалось выше).