For what it’s worth, my RFC PR #1147, while currently leaving out language evolution, could well be extended to also contain it if there is interest.
The gist of it is that we would need to keep both the old and new code paths and have the user decide which version they want by specifying a per-crate target version.
Alas, making incompatible language changes depend on this is currently not feasible because we don’t have pervasive target version declarations, but once they are the norm, it could be possible to have breaking language changes without breaking builds, thus leaving us much more leeway in implementing changes like this.