
Introduction to Data-Oriented Design (2014) [pdf] - Tomte
http://www.dice.se/wp-content/uploads/2014/12/Introduction_to_Data-Oriented_Design.pdf
======
agentultra
Another good introduction was given by Mike Acton at CppCon [0]. The QA at the
end is particularly delicious. If your first instinct is, "maintainability!"
or "developer productivity!" then you should watch it.

[0]
[https://www.youtube.com/watch?v=rX0ItVEVjHc](https://www.youtube.com/watch?v=rX0ItVEVjHc)

 _update_ : And keep an eye out for when his interview at the recent
Handmadecon hits youtube. (You can presently find it on twitch). He is full of
pearls of programming wisdom.

------
vvanders
Anyone interested in performance needs to get this pounded into their head.

Even in languages like Java where you don't get explicit control over memory
using things like explicit ByteBuffer and libraries like FlatBuffers can get
you a 10-50x improvement depending on your dataset.

------
unfamiliar
Interestingly I think many people in the HPC community come across this
discovery from the other direction. Traditional HPC code is often array based
with very little abstraction. This is very performant and easy to parallelise,
but you miss out on all the good stuff from more "modern" programming
languages and techniques. My own personal experience with trying to write code
in a more modular, structured way has usually left me realising that there is
a big performance drop (that can't be explained using the simplified CPU vs
RAM mental model) and a vague feeling that I have been cheated. Didn't someone
promise me "zero-cost abstractions?"

I would be interested to see a language or package that embodied these
concepts. For example, something that let you feel syntactically like you were
constructing an array of structs, but each set of struct members is laid out
contiguously in memory, so in reality you are constructing something more like
a struct of arrays.

~~~
agentultra
See Jonathan Blow's JAI language. It's exactly this.

