System configuration as scriptable object (or similar) has been discussed in Entities as a topic (among other solutions).
I do agree that would be better to have this data driven all these:
- World in which execute
- Group in which execute
- Relative ordering
Among other stuff.
If you need to write your self which system in which group and world need to run, the answer is yes, it is quite cumbersome to write (we had that before too, and this is why we added WorldFilter). But that would not solve the groups problem (and creation order dependencies too).
Bootstrapping is an heavy operation, I agree. But happen only when you create/dispose world. That is not that often. There are way worst fragmentation and memory waste in other area. Not to mention, may of these allocation are in chunk (so not small allocations).
Bootstrapping cannot be completely unmanaged, because of the existence of the SystemGroup (that are managed) and other little things. Apart that, it is also great that it is not, because this way you can use other machinery (like scriptable, configs, etc) that would be impossible to use otherwise in burst land.
But the process could be technically two step (one managed, one un-managed, burstable) but it is a lengthy process to the get there.
But this is really up to you… You can already do that if you really want. There is nothing preventing you to create all the worlds you want and not disposing them (when you are in game, if we are speaking about edit mode is another story).
The problem though are becoming bigger then the benefits of not disposing them:
- Scene loading become problematic (because of the way sub-scene works)
- How do you ensure the world state is actually re-usable all the time? Are you sure you don’t have anything in memory, cached, or something in your systems that is not properly reset ? It is dramatically hard and time consuming tracking these things.
Disposing world give you a very clean state you can rely and start from and ensure consistency. As soon as you are start keeping stuff alive, apart also potential memory consumption, the risks are bugs because of non-reset state or inconsistent world state.
If we could ensure that Systems has no state (or all the state is properly reset) but still keep them alive (so the memory is not de-allocated) and all the entity data is properly destroyed then we the world creation can be lighter:
- Systems are re-used
- Only the entity data storage need to be re-created (and the system associate entities as well).
That requires a lot of changes in Entities that I hardly seen happening in the short term.