alt.hn

7/26/2026 at 6:11:16 PM

Introduction to Data-Oriented Design [pdf]

https://www.gamedevs.org/uploads/introduction-to-data-oriented-design.pdf

by tosh

7/26/2026 at 7:55:14 PM

The real key pillar to this world view is putting the data first in your design of the algorithm.

So if your working on a physics engine and your optimizing collision detection, you think about the data in -> data out of the problem you are solving as the primary driver of how the code should be written.

You start with defining the data, and build from there.

Different types of applications all have different shapes of data so would have differently shaped optimal code. Eg) a physics engine would use some kind of spatial hash thing which can be optimized differently based on if stuff can be added/removed while it's running. A 3d renderer operates on big buffers of matrices and vertex data. A game is usually composed of some long lived things and a lot of short lived things.

The key message in Mike Acton's talk was:

"If you have different data, you have a different problem."

While ECS systems are not a panacea that solves all problems in a perfect data oriented way, they are generally more malleable than Object Oriented hierarchies. This means it's generally more feasible to write "near optimal" code in an ECS framework than in a mature Object Oriented code base.

But the key message isn't "use X framework", it's "start by defining the data".

by dustbunny

7/26/2026 at 9:20:17 PM

I find this information very useful; thank you.

by Ernestafaton

7/26/2026 at 7:17:59 PM

Serious question. Does DOD mean anything more than array programming, in practice?

by inigyou

7/26/2026 at 7:32:18 PM

Have a look at the talk Practical Data-Oriented Design by Andrew Kelly [1]. He covers the following techniques:

1. Indexes instead of pointers. This allows you to avoid alignment of 8 bytes in your structure for x86_64.

2. Storing booleans out-of-band. Booleans cause padding all the time.

3. Struct of Arrays. Based on your question I assume you're familiar with it.

4. Store sparse data in hash maps. I remember one time when it allowed to eliminate inheritance.

5. Encoding the data instead of OOP/polymorphism. I haven't got an occasion to use it. The idea is to add extra tags to avoid boolean properties.

[1] - https://vimeo.com/649009599

by laladrik

7/26/2026 at 8:10:19 PM

Yes. Array programming happens to overlap heavily with DOD in modern hardware because of caching and SIMD, but if you were programming an Atari ST it wouldn't.

There are also cases where the optimal data format isn't array oriented because the memory access patterns for the problem in question just require something else.

You also have to think of hot vs cold data, which has nothing to do with arrays.

by sirwhinesalot

7/26/2026 at 8:55:33 PM

Can I propose renaming it to Hardware Oriented Programming?

by inigyou

7/26/2026 at 8:29:59 PM

- Data-Oriented Design Revisited: Type Safety in the Zig Compiler - Matthew Lugg - https://youtu.be/KOZcJwGdQok?si=YDal2Gwb0IJPFgrI

- Andrew Kelley Practical Data Oriented Design (DoD) - https://youtu.be/IroPQ150F6c?si=F1Z0pLO2W5hbQgpM

- CppCon 2014: Mike Acton "Data-Oriented Design and C++" - https://youtu.be/rX0ItVEVjHc?si=jv4hhTSBh3XH--xQ

- Why You Shouldn’t Forget to Optimize the Data Layout - https://cedardb.com/blog/optimizing_data_layouts/

- Handles are the better pointers - https://floooh.github.io/2018/06/17/handles-vs-pointers.html

- Enum of Arrays - https://tigerbeetle.com/blog/2024-12-19-enum-of-arrays/

- Data oriented design book - https://www.dataorienteddesign.com/dodbook/

- Data-oriented design in practice - Stoyan Nikolov - https://youtu.be/_N5-JjogNXU?si=vhaxYcfE6tl11Sux

- Programming without Pointers - Andrew Kelley - https://www.hytradboi.com/2025/05c72e39-c07e-41bc-ac40-85e83...

- More Speed & Simplicity: Practical Data-Oriented Design in C++ - Vittorio Romeo - CppCon 2025 - https://youtu.be/SzjJfKHygaQ?si=jafavSl2YJWk4vIx

- Rust Handle - https://taintedcoders.com/rust/handles

by lioeters

7/26/2026 at 7:40:12 PM

A lot of it just comes down to KISS and avoiding unnecessary overhead and indirection (like vtables, C++ STL containers etc.) so you're getting the most out of the hardware.

by jordand

7/26/2026 at 8:12:27 PM

It's fair to mention that DOD is not only getting the most out of the hardware. It also allows the busy work to be avoided. I caught myself a couple of times, when I wanted to make a set of types united by some interface. However, in reality what I could do (and I did eventually) is having several instances of single SOA (one per type) which were processed differently. The addition of a new "type" turned from a good hundred line patch to 20-30 lines

by laladrik

7/26/2026 at 8:22:45 PM

It means instead of building a street object, with car objects that have tire objects as its children and then running through the tree to rotate the wheels you just have an array pointing to exactly the appropriate data type to accomodate the type of wheel rotation you need.

Very often the answer is indeed arrays, but it can easily be something else, depending on the problem. Data driven design is not very complicated, it just means instead of thinking about abstraction you think about the shape the data needs to be in to accommodate the most common transformations you need to do with it.

by atoav

7/26/2026 at 7:22:56 PM

Yes

by RobRivera