String slices are different from string mostly due to where they are stored
That’s not really an important difference. The important difference is ownership. String slices are non-owned and Strings are owned. That would be true no matter where they are stored. There isn’t any fundamental reason why Strings couldn’t allocate themselves on the stack or in static memory, aside from the fact that it would be inefficient to do it in a coherent and safe way.
From my developer perspective a string slice and a String reference are the same.
You shouldn’t use &String, because it is basically useless. String and &str are very different and that difference is important to many of us.
Lets ignore backward compatibility
I wouldn’t really advise anyone to participate in a discussion premised on ignoring very real and practical concerns. It’s like asking people to come to a meeting to specifically discuss inactionable decisions…
I mean, if the question is “Is it possible to make a new language with strings that act like Java’s or Haskell’s”, then obviously the answer is yes. If it’s “could we do it in Rust”, then also, yes. I don’t see how either of these questions are interesting for Rust unless we’re discussing them in the context of maintaining Rust’s backward-compatibility guarantees.