Luckily, there's a lot more to Rust than that. Killer feature generics aren't.
Given my CS background, the only language I think does a poor job with generics is Java.
As for language's success, it is usually related to which company is pushing it, or which killer feature/framework makes the people want to learn it.
I am not aware of any language that went mainstream just because it was simpler than existing ones, without having one of the reasons listed above tied to it.
for 5.times {
// code
}
desugars to: // |args*| { stmt* } is the Rust block syntax
times(5, || {
// code
true // explicit order to continue
}) 5.times{|x| x}.select{|x| x < 3}.collect{|x| x + 2}
Edit: Ok ignore that it seems they do have that (https://mail.mozilla.org/pipermail/rust-dev/2012-July/002000...) not sure of the difference, maybe just a result of the fast development.