Actually, that’s not true. owning_ref was updated to support mutable references, which implicitly added the requirement that implementers of StableAddress + DerefMut are stable under deref_mut().
I tried to document the requirements here as best I could.
Anyway, I am extremely opposed to changing the implementations of core types like String and Vec. Tons of code has been written under the assumption that they work the way they do. Not only will changing things break code and make the language more confusing, it will also (rightfully) promote the impression that Rust is unstable and immature.
As for the original suggestion, I think special casing String is the wrong way to go about it. In cases where performance isn’t an issue, I want everything to default to easy_strings::EZString, not String. I think user defined string literals are the best solution.
P.S: IMO, defaulting ints to i32 was a bad idea - I’ve already encountered bugs due to values unexpectedly becoming i32s.