Please forgive me this provocative title and allow me to share some of my frustration with Rust game development.
A while back I saw a talk on how Object-Oriented Programming makes our lives harder by making us thing of everything as objects. As example it was described how OOP made us think of Conway's Game of Life as of a program made out of Cell-objects that had methods and properties. In this talk a point was made that all that is actually required to implement Conway's Game of Life is a hash-set.
The exact same thing is true for game engines, except for some objects are a requirement, rather than an option, and it is horrible.
For instance to implement Conway's Game of Life in Unity you would have to make a grid of phony GameObjects that contain phony MonoBehaviors, all of which are acted upon by another phony GameObject with another phony MonoBehavior, with actual logic divorced completely from the scene and the rest of the framework regardless of whether you want to use hash-set or not.
Why is that?
Game of Life is a brilliant example of how our ways of making games make development hard, complicated and unreliable. The Game of Life actually requires you to make state persistent (sort of). If all cells would be updated in-place then already updated cells would affect update results for the rest of the cells. In other words already updated data conflicts with not yet updated data. And that is true not just for The Game of Life -- just as "updated" cells conflict with "stale" cells, "updated" entities conflict with "stale" entities. As a result, the state is only "correct" before and after entire update, and everything in between is a minefield of bugs, because state is inconsistent, it's a conflict of "past" and "present". And when update order is not guaranteed it gets even worse. And we have to deal with that.
I would chose Löve over Unity any day of the week. Despite Unity's rich feature set, scene editor, asset management, etc etc. Because Löve allows you to just sidestep that problem, it doesn't impose any rules on your state management (and thus game logic) at all. You are free to implement whatever you want in whichever way you want. And engine does for you exactly what you need -- call API when you want sprite drawn or sound played or something. It's "more with less".
And I would love to see more (with less) of that in Rust and in three dimensions as well, but it seems first thing people get in engines is ECS, and that makes me very sad.
TL;DR I just want a 3D game engine but I can't build my own and everyone else who knows how it's done builds them with ECS which makes terrified to use them for reasons stated above.
I am writing it here to see if anyone cat relate to what I'm saying and, hopefully, suggest something.