Игры когда-то были написаны на машинном языке, потому что у них было экзотическое оборудование, для которого не было компилятора. Аппаратному обеспечению также не хватало функций, которые программисты на С воспринимают как должное, таких как эффективная 16-разрядная целочисленная математика.
Как только игры установились на знакомом оборудовании, стали доступны компиляторы Си, и в скором времени все игры были написаны на Си.
В свое время C ++ казался хорошей идеей, и большинство игр сегодня - это C ++, но инженеры теперь бормочут о возвращении в C, и это может действительно случиться. Я хотел бы поработать над игрой в Си, как и многие коллеги. В C ++ нет ничего нового, что, я думаю, улучшает игры.
Казалось бы, теперь, когда компьютеры работают в 1000 раз быстрее, чем несколько лет назад, язык высокого уровня сократит время разработки ($), что сделает C устаревшим.
Этого не произошло, потому что покупатели игр знают, что аппаратное обеспечение в 1000 раз лучше, и хотят обменять свои доллары на игру, которая выглядит и звучит в 1000 раз лучше. Это устраняет слабость системы, которую потребляет язык высокого уровня.
Требования к производительности в играх жестоки. Новый графический кадр должен быть обработан менее чем за 33 мс (или 16 мс!) В обязательном порядке. Все оборудование должно быть учтено, чтобы этот бюджет был выполнен. Любой язык, который выходит из строя и делает что-то с аппаратным обеспечением, которое программист не понимает или не ожидает, очень усложнит выполнение этого бюджета. Это автоматический минус против всего высокого уровня.
Программисты игр не только работают на языке низкого уровня, но также избегают структур данных высокого уровня и алгоритмов. Игры обычно не имеют связанных списков и редко имеют деревья. Есть движение к тому, чтобы избегать указателей, когда это возможно *. Любой алгоритм с более чем O (N) временем или O (1) пространством не находит широкого применения.
* Если указатель не вызывает пропадание кэша, то зачем тратить 32 бита на его хранение? Если указатель действительно вызывает ошибку кэша, лучше всего избавиться от этой ошибки кэша.