Сообщение от Igor
Кроме того, всякие локальные оптимизации есть смысл использовать только в "бутылочном горлышке", в остальных случаях можно забить и не тратить своё время.
|
Именно о бутылочных горлышках и идёт речь. В примере выше был Entity, а это обычно узкое место в движках обрабатывающих сцену из большого количества ентити. Просто такие вещи тоже надо знать и они достойны обсуждения.
Сообщение от Igor
Мне кажется, кое-кто не учитывает такой фактор, как время разработки. Да, можно писать офигенно быстрые штуки на Си, велосипедить списки, сортировки и прочее. Но нафига? Писать, сравнивать производительность, искать ошибки. Придётся расстаться либо с надёжностью, либо со временем, которое уйдёт на тестирование.
|
Можно поспорить. DOD даёт лучшее понимание структуры кода, как следствие лучше отлаживается и быстрее разрабатывается (за счёт гибкости). Потому что мы отходим от концепции объектов как в ООП и оперируем этапами трансформации данных из одного состояния в другое, а это (имхо) для таких вещей как движки и игры подходит лучше, где почти всё состоит из пайплайнов. Возможно ООП для других задач подходит больше, я бы даже сказал что в тех же движках на более высоких уровнях, когда проектируешь интерфейсы для пользователя можно оперировать именно ООП.
И потом одна важная вещь: разработка кода это не весь процесс разработки, иногда в перспективе лучше один раз хорошо поработать над движком, на котором затем можно выпустить целую серию игр без больших проблем, что в целом сэкономит время.
Сообщение от Igor
Кроме того, не раскрыта тема высокоуровневых оптимизаций. В С++ или java я могу в несколько строчек заменить, например, реализацию списка с ArrayList на LinkedList и этим повлиять на производительность.
Значительная часть потерь скорости зависит не от константы времени выполнения, а от ассимптотики - судя по моему опыту, возможность легко и быстро писать/изменять код даёт намного больший бонус, чем мелкие локальные оптимизации.
|
Ну тема о низкоуровневых аспектах. Так то конечно чем выше -- тем больше возможностей. Начинают с архитектуры движка/приложения. Но даже наверху уже надо задуматься о том чтобы удачно легло на железо. Например при ООП концепции об этом редко думают и в итоге не остается места для более низкоуровневых оптимизации. В DOD думают над этим и получившийся код ложиться на железо как надо. Низкоуровневые оптимизации и ассемблирование это самый бек-энд всего процесса оптимизации, но он будет невозможен если с самого начала пойдешь по неверному пути. Даже автоматическая оптимизация сработает намного лучше если всё правильно подготовишь для неё.