diff --git a/content/Entity Component System.md b/content/Entity Component System.md new file mode 100644 index 00000000..c01d6afb --- /dev/null +++ b/content/Entity Component System.md @@ -0,0 +1,23 @@ +#programming + + +主にゲームエンジンなどで採用されるプログラミングのパラダイム。 + +最近のUnityでも内部的に採用されている。 + +[[Rust]]だと[[Bevy]]が有名。 + +[[オブジェクト指向]]と比べると、データのメモリ分布が、オブジェクトごとに並ぶのではなく個別のメンバー変数ごとに並ぶことになり、CPUのメモリキャッシュに乗りやすいなどの利点がある。 + +[\[Rust\] ECSアーキテクチャ \[bevy\_ecs\] | DevelopersIO](https://dev.classmethod.jp/articles/ecs-rust-bevy/) + +[Intro to ECS - Unofficial Bevy Cheat Book](https://bevy-cheatbook.github.io/programming/ecs-intro.html) + +## データのモデリング方法としてなにがうれしいのか + +オブジェクト指向と比べた時の利点が基本的にさっきのような、パフォーマンス面での利点が強調されることが多い。ただ、何かパフォーマンスのためにせっかくプログラミング言語が用意してくれたデータのモデリング技法を犠牲にしているような気がしてならず、あんまり旨味がよくわからなかった。 + +ただ、Bevyの設計をいろいろ読んでいると、モデリングとしての核心は、「集合の中から特定の要素を持つもの部分集合を指定して挙動を個別に操作する(依存性がない操作同士はどういう順番で実行してもいい)」ということかなと思った。 + + +