Rust
2.25K subscribers
173 photos
109 videos
2 files
260 links
Полезный контент по программированию на Rust
Download Telegram
👾 ECS: Data-Oriented Design без боли

Вы скажете: "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
👍15❤4🥰1🤗1