As a sysadmin I object to the notion that old to new conversions are a "fringe" use-case. Pretty much all my coding (I'm a "devops" sysadmin-type) is exclusively "I need to wrangle all versions of thing 1 into a type of thing 2 or between several versions of thing 1".
If backwards compatibility is important, then letting me use multiple versions side-by-side in the same modules easily is damn important.
Re:A Proposal for Package Versioning in Go
by steveklabnik on Tuesday March 27, 2018 @03:17AM
(#16686068)
To be clear, Cargo fits the latter definition; you can't depend directly on two different versions of a package, but you can transitively.
Edit: I just realized that we may have a different definition of "compilation unit". If you mean "single program" then my point stands. However, if you just meant some sectioned-off part of the program, then I think the drawbacks of that are far less. Basically, I think that it is useful to be able to have access to multiple versions of a datatype (e.g. if you want to write a converter from old -> new) but that use case is far more fringe.