It was pretty widely known in industry as a way to have cache locality and made it out to the broader dev community a good while after.
It was pretty widely known in industry as a way to have cache locality and made it out to the broader dev community a good while after.
"Component Software: Beyond Object-Oriented Programming", 1998
I've seen metatables used often to implement inheritance, but not the ECS yet.
The coroutines there was incredibly useful, our designers could write AI that was almost literate programming(yield value was number of frames to wait to re-eval coroutine). Something like: Walk to point A, yield until at A, turn, walk to point B, yield, check for nearby entity of type, yield, etc.
Oh and it also ran the whole game state in a 400kb preallocated block in a system than only had 8mb of accessible ram(rest went to vram).
If you look really carefully you'll find structured column databases have similar properties since when you optimize for speed cache misses are your number one enemy.
About structured column databases, the same thing could be said about Lisps like Clojure which match the RMDB data model. But people still find it hard to grok it, hence the low adoption rate.
https://docs.unrealengine.com/en-US/ProgrammingAndScripting/...
The "S" in unreal is a tick. It's been about a decade since I last worked with Unreal but there was very much the concept of systems that processed batches of things in areas where performance was a concern.
Keep in mind that ECS is a design pattern and just like any design pattern applied blindly you can end up in a worse place than you started. A FactoryDispatcherQueuePatternImpl helps no one despite using many design patterns. When it comes to ECS it's much more about the spirit than the letter of the law.
But that's hardly "all the game engines"