Вы скажете: "Struct of Arrays - это круто для процессора, но поддерживать такой код руками - ад! Я хочу просто написать
entity.update()".Вам не нужно писать SoA руками. В экосистеме Rust для этого есть ECS (Entity Component System). Самые известные примеры -
Bevy ECS, Hecs, Legion.ECS абстрагирует работу с памятью. Вы пишете компоненты как маленькие структуры:
struct Position { x: f32, y: f32 }
struct Velocity { dx: f32, dy: f32 }
А затем пишете Системы (функции), которые запрашивают только то, что им нужно:
// Пример из Bevy ECS
fn physics_system(mut query: Query<(&mut Position, &Velocity)>) {
for (mut pos, vel) in query.iter_mut() {
pos.x += vel.dx;
pos.y += vel.dy;
}
}
Что происходит под капотом?
Магия. ECS-фреймворк сам раскладывает компоненты в памяти в виде плотных массивов (почти как SoA, чаще всего используя паттерн Archetypes).
Когда
physics_system запрашивает данные, она бежит по памяти линейно, идеально утилизируя кэш.Итог: Вы получаете красивый, модульный код (почти как в ООП), но с производительностью хардкорного низкоуровневого C. Если вы пишете что-то, где много сущностей (игры, симуляции, HFT, парсеры) - посмотрите в сторону ECS.
#rust #ecs #bevy #architecture #dop
👉 @rust_lib