Los juegos se escribieron una vez en lenguaje de máquina, porque tenían un hardware exótico para el que no había compilador. El hardware también carecía de características que los programadores de C dan por sentado, como la matemática de enteros de 16 bits eficiente.
Una vez que los juegos se instalaron en hardware conocido, los compiladores de C estuvieron disponibles y en poco tiempo todos los juegos se escribieron en C.
C ++ parecía una buena idea a la vez, y la mayoría de los juegos son C ++ en la actualidad, pero los ingenieros ahora están murmurando acerca de un regreso a C, y eso podría suceder. Me encantaría trabajar en un juego en C, y también lo harían muchos compañeros de trabajo. No hay ninguna característica nueva en C ++ que creo que mejore los juegos.
Parece que ahora las computadoras son 1000 veces más rápidas que hace unos años, un lenguaje de alto nivel reduciría el tiempo de desarrollo ($) haciendo que C sea obsoleto.
Esto no ha sucedido porque los compradores de juegos saben que el hardware es 1000 veces mejor y quieren cambiar sus dólares por un juego que se ve y suena 1000 veces mejor. Esto elimina la holgura del sistema que consumiría un lenguaje de alto nivel.
Los requisitos de rendimiento en los juegos son brutales. Se debe representar un nuevo marco de gráficos en menos de 33 ms (¡o 16 ms!) Sin falta. Todo lo que hace el hardware debe tenerse en cuenta para que se pueda cumplir con este presupuesto. Cualquier lenguaje que suene y haga algo con el hardware que el programador no entienda o espere hará que sea muy difícil cumplir con este presupuesto. Este es un menos automático contra cualquier cosa de alto nivel.
Los programadores de juegos no solo trabajan en un lenguaje de bajo nivel, sino que también evitan las estructuras de datos de alto nivel y los algoritmos. Los juegos generalmente no tienen listas vinculadas y rara vez tienen árboles. Hay un movimiento para evitar punteros siempre que sea posible *. Cualquier algoritmo con más de O (N) tiempo u O (1) espacio tiende a no encontrar un uso amplio.
* Si un puntero no causa una pérdida de caché, ¿por qué gastar 32 bits para almacenarlo? Si un puntero causa una falla de caché, es mejor deshacerse de esa falta de caché.