OK, solo para hacer algunos agujeros en esa diatriba que vinculaste:
- "C # se basa en un intérprete" Just In Time "" - incorrecto - es un compilador JIT . Después de que un método se JIT una vez , el código compilado se reutiliza para cada invocación. El código compilado es casi tan rápido como el código nativo precompilado.
- "La CPU Xenon es un procesador" en el lugar " : ¿quiere decir" en orden "? - Y: "La CPU Xenon no tiene predicción de rama" . Él implica que esto significa que la compilación JIT produce naturalmente código incorrecto que debe ser reordenado por la CPU y causa muchas ramificaciones, lo cual es una tontería absoluta . El mismo consejo de rendimiento para ejecutar en esta arquitectura de CPU se aplica tanto a C ++ como a C #.
- "[JIT] requiere un enjuague constante en el 360" : incorrecto, el código compilado se puede guardar en caché como cualquier código compilado normalmente. (Si se refiere al lavado de la tubería, vea el punto anterior).
- "los genéricos [...] usan la generación de código" : los genéricos son JITted como todo lo demás y, como todo lo demás, el código JITted es rápido. No hay penalización de rendimiento por usar genéricos.
- "todas las partes sexys del lenguaje [...] requieren una predicción de rama ..." : ¿cómo no se aplica esto también a C ++? - "... o [...] generación de código in situ" - ¿quiere decir JITting? ¿Mencioné que es rápido? (No entraré en todos los lugares donde el CLR de escritorio usa la generación de código real , ¡una función que no es compatible con Xbox 360!)
- "[C # no tiene] las bibliotecas masivas [de C ++]" , ¿excepto, por ejemplo, XNA? Y muchos más . (Aún así, este es un punto un tanto justo).
XNA en Xbox 360 se ejecuta en una versión modificada de .NET Compact Framework CLR. No tengo dudas de que no está a la altura de la versión de escritorio. El JITter probablemente no sea tan bueno, pero tampoco creo que sea malo . Me sorprende que no haya mencionado el recolector de basura que es terrible en comparación con el CLR de escritorio.
(Por supuesto , de todos modos no deberías golpear al recolector de basura en un juego desarrollado profesionalmente , así como debes tener cuidado con las asignaciones en cualquier juego de nivel profesional).
(Para una discusión técnica real de .NET Compact Framework, quizás comience con esta serie de artículos: Descripción general , Compilador JIT y GC y montón ).
La forma en que es completamente inespecífico sobre su terminología hace que sea difícil incluso entender lo que quiere decir. O está en modo de despotricar o no sabe de qué está hablando.
Ahora que lo hemos eliminado, aquí hay algunas cosas que puede hacer. se pierda en mediante el uso de XNA en el 360, en lugar de convertirse en nativo :
- Acceso a la unidad SIMD / Vector para realizar cálculos de punto flotante de CPU muy, muy rápidos
- Posibilidad de usar código de idioma nativo que probablemente sea un poco más rápido que C #
- Habilidad para ser un poco más vago con la forma de asignar memoria
- Los juegos XBLIG tienen acceso a solo 4 de los 6 núcleos (pero todavía obtenemos las 3 CPU, y tampoco son núcleos completos, por lo que no nos perdemos mucho), no estoy seguro de si esto se aplica a XNA no XBLIG juegos
- Acceso completo a DirectX para hacer trucos gráficos realmente oscuros
También vale la pena señalar que estas son solo restricciones del lado de la CPU. Todavía tienes acceso completamente gratuito ejecutándose en la GPU.
Describí estas cosas en esta respuesta a lo que efectivamente es la misma pregunta que esta. Como mencioné en esa respuesta, XNA es absolutamente adecuado para el desarrollo "profesional" .
La única razón por la que evitaría es porque no puede contratar talento C #, licenciar motores C # y reutilizar el código C # existente de la misma manera que lo hace con la base existente de conocimiento de C ++. O porque también podría estar apuntando a una plataforma que no admite C #.
Por supuesto, para muchos de nosotros que no somos desarrolladores "profesionales", XNA es nuestra única opción para ingresar a Xbox 360, lo que hace que el punto sea discutible.
Para responder a sus otras preguntas:
Nada en C # le impide utilizar enfoques orientados a datos en esencia exactamente la misma forma en que se utilicen en C ++.
C # carece de la capacidad de alinear automáticamente el código en tiempo de compilación, y (sin ir a comprobarlo) estoy bastante seguro de que el JITter de CLR compacto no puede incluir métodos en línea (el CLR de escritorio sí puede). Entonces, para el código crítico para el rendimiento, es posible que tenga que insertarlo manualmente en C #, donde C ++ proporciona alguna ayuda.
Probablemente, una razón más importante por la que a menudo no se ven cosas intensivas en matemáticas de CPU como la detección de colisiones y las simulaciones de fluidos en C # es la falta de acceso a la unidad de vectores (como se mencionó anteriormente).