As for "foobar".to_string() or String::from("Hello, world!"), well, that may look a bit odd to a C/C++ guy. Programming languages often look odd to those not familiar with them and especially if they are steeped in some other language. C and C++ have their absurdities too, one tends to not see them after much experience.
I'm curious about you "counter intuitive" statement. Whilst the syntax may be somewhat different Rust is for the most part a very normal structured programming language in the spirit of Algol, Pascal, Ada, C. Intuitively the same.
Where things diverge is in the fanatical checking Rust does of types, object lifetimes and legal aliases. The "borrow checker". The semantics of that are clear enough but working with it is sometimes difficult. On the other hand the borrow checker is only enforcing rules that you should enforce on yourself to create memory and thread safe code in C or C++.
As Rust creator Graydon Hoare says: "The semantics is the interesting part. The syntax is, really, about the last concern."
I'm curious as to what you mean by "...doesn't quite deliver the safety, clarity, and performance...". In what ways exactly?
My experience so far, admittedly limited, is that Rust's memory safety guarantees work very well, the code I have written is at least as readable as C++ and its performance has matched and exceeded that of C and C++. What Am I missing here?