As suggested by ethernaut in https://twitter.com/the_ethernaut/status/1361489841519796225 the compiler should allow contracts to be split up more easily to avoid having to implement a proxy pattern manually. In my opinion, this is a good idea in principle, but requires a lot of details to be worked out.
Calls between two “fragments” of a contract will be expensive and create an external call, which is also problematic with regards to call protection. Maybe it would be better to explicitly group parts of a contract into fragments / modules that then have to use external calls (maybe delegatecalls) between each other.
We also have to be careful that this still works for how people currently upgrade their contracts.