AoS/SoA
Array of structures(AOS)
Structure of Arrays(SOA)
先日、Android Developer blog にデータ指向プログラミングという記事が掲載され、その翻訳記事もポストされていた。
データ構造により演算時間の計測結果の差とアーキテクチャの説明に触れてて分かりやすい記事だと思う。
思う、のだけど、ちょっと片手落ちというか、
これだけ読んで、SOAが正義と思われるとそれは困るものであり、
オブジェクト指向プログラミングとの折衷について触れてくれないと片手落ちという気がします。
効果的なケースにおいて、適切に用いるべきで、
更にはオブジェクトとして使うような場合にも混乱が無いようにしておくのも大事。
もし、この記事を受けて、全ての個別要素を配列で持つように設計してしまい、
議論の際に、盲目的に「こっちのほうが高速なので」という主張をされることがあっては辛い。
少し検索してみると、こういう記事も出てきており、
折衷案についても触れられている。
最初のブログもサンプルに書かれているのは物理のコンポーネントであるので、
内部では配列で保持しているケースだけど、
おそらく更にそれを使用しているオブジェクト側は、
そのコンポーネントの参照を保持するなど、
AoSな作りになるってことを想定しているのではないかな。