Les jeux étaient autrefois écrits en langage machine, car ils avaient du matériel exotique pour lequel il n'y avait pas de compilateur. Le matériel manquait également de fonctionnalités que les programmeurs C tiennent pour acquises, telles que des mathématiques entières 16 bits efficaces.
Une fois les jeux installés sur du matériel familier, les compilateurs C sont devenus disponibles et en peu de temps, tous les jeux ont été écrits en C.
Le C ++ semblait être une bonne idée à un moment donné, et la plupart des jeux sont aujourd'hui du C ++, mais les ingénieurs marmonnent maintenant à propos d'un retour au C, et cela pourrait en fait arriver. J'adorerais travailler sur un jeu en C, tout comme de nombreux collègues. Il n'y a aucune fonctionnalité nouvelle en C ++ qui, je pense, améliore les jeux.
Il semblerait maintenant que les ordinateurs sont 1000 fois plus rapides qu'il y a quelques années, un langage de haut niveau réduirait le temps de développement ($) rendant le C obsolète.
Cela ne s'est pas produit car les acheteurs de jeux savent que le matériel est 1000 fois meilleur et veulent échanger leurs dollars contre un jeu qui ressemble et sonne 1000 fois mieux. Cela supprime le jeu du système qu'une langue de haut niveau consommerait.
Les exigences de performances dans les jeux sont brutales. Un nouveau cadre graphique doit être rendu en moins de 33 ms (ou 16 ms!) Sans faute. Tout ce que fait le matériel doit être pris en compte, afin que ce budget puisse être respecté. Tout langage qui se déclenche et fait quelque chose avec le matériel que le programmeur ne comprend pas ou attend, va rendre très difficile le respect de ce budget. Il s'agit d'un inconvénient automatique contre tout élément de haut niveau.
Les programmeurs de jeux fonctionnent non seulement dans un langage de bas niveau, mais ils évitent également les structures de données et les algorithmes de haut niveau. Les jeux n'ont généralement pas de listes chaînées et ont rarement des arbres. Il y a un mouvement pour éviter les pointeurs dans la mesure du possible *. Tout algorithme avec plus de temps O (N) ou d'espace O (1) a tendance à ne pas être largement utilisé.
* Si un pointeur ne provoque pas un échec de cache, alors pourquoi dépenser 32 bits pour le stocker? Si un pointeur provoque un échec de cache, mieux vaut se débarrasser de cet échec de cache.