Комментарии 3
Пользователи не получают ничего полезного от «собственного wgpu-рендерера»,
Конечно несколько странное утверждение. Wgpu нужен фактически для кроссплатформенного API для графики - opengl/directx/metal/web gpu
Вроде автор опытен в Rust, но какие-то странно проблемы находит. Если для эксперимента нужно удалить все lifetime-ы, то можно добавить в структуру PhantomData<&'a ()>
. Обычно мест конструирования гораздо меньше, чем мест, где потенциально придется удалить 'a
.
Хочется контекст со всеми данными, но не позволяют его разделить? Ну, если нам и так borrow checker мешает, то почему бы с помощью преобразования в *mut
и обратно в &mut
не поменять время жизни (или совсем его удалить)? Можно любое выбрать, для экспериментов сойдет.
Я думаю, что в играх, в случае с Rust, хочется вообще почти что всё держать в Rc и Arc. Потому что почти у каждого объекта, за один кадр, компоненты могут быть неоднократно заимствованы десятком систем, для чтения данных, и минимум одной для их изменения, одно дело, когда эти объекты крутит Runtime, там можно спроектировать, чтобы коллизий было поменьше, но другое дело, когда начинается скриптинг игровой логики. Часто хочется в объекте иметь ссылки, которые живы на протяжении всего цикла работы приложения, чтобы не приходилось каждый кадр просить и отправлять новую ссылку на объект.
Почему я отказался от разработки игр на Rust, часть 4