Artemonim
@Artemonim

Почему игровые движки пишут на C++?

  • Dagor Engine 5.0 (C/C++)
  • CryEngine V (С++/C#/Lua)
  • id Tech 6
  • RenderWare
  • Source 2
  • Unity 2017 (C/C++/C#)
  • Unreal Engine 4


Почему ни один из этих движков не написан на Java или Python?
  • Вопрос задан
  • 2599 просмотров
Решения вопроса 1
1) Java а уж тем более python (даже pypy) сосут по производительности, т.к. у них большие накладные расходы. И речь тут даже не о виртуальной машине или интерпретаторе, а об явной возможности располагать объекты на стеке. Выделить память на стеке это одна машинная команда в один такт, а в куче это большая цепочка вызовов, в худшем случае доходящая до пространства ядра.

К сожалению java и python не имеют средств для ручного управления памятью. Хотя для scala есть проект offheap, правда он немного заглох.
Одна из самых популярных библиотек для Python - NumPy. И она написана на Си.

Но есть золотая середина: движок написан на C++, но имеет API для другого языка. Пример тому Unity, который сам написан на C++, но логика реализовывается на C#.

А почти все перечисленные вами движки живут на передовой графических технологий. Зачастую даже мощнейших процессоров и видеокарт им не хватает. Вспомните шутки про Крайзис.

2) Сборка мусора может блокировать все потоки приложения. Из-за этого у вас будут постоянные фризы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
Почему ни один из этих движков не написан на Java или Python?

Java и тем более Python дают ооочень большой оверхед, да безусловно можно написать на них движок, но он будет не такой производительный. Также в отличии от большинства языков(включая Java и Python) C++ позволяет выжимать максимум производительности, в джаве сборщик мусора, там нельзя размещать объекты на стеке, там размер переменной привязан к виртуальной среде, а не к машине, на которой исполняется программа, куча проверок вроде выхода за границы массива, которые дают оверхед и в конце концов, джава использует виртуальную машину. AFAIR, в джаве даже нет аналога вектора, где элементы(а не ссылки на них) будут храниться последовательно в памяти и также нельзя включить один объект в другой не по ссылке, а в C++ можно.
Ответ написан
Комментировать
В основном по причине потенциальной производительности, посмотрите в сторону dlang для сравнения.
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега C++
software engineer
Движок от minecraft написан на java, можете видеть в чем разница с точки зрения возможностей.
Основная проблема - работа с памятью, которая в более низкоуровневых языках типа с/c++ под контролем программиста, следовательно производительность предсказуема.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы