That said, one of the places Rust loses people pretty early on is an example they have early in this intro:
```rust
let parts: Vec<&str> = "a,b,c".split(',').collect(); // Vec<&str>
```
I never understood why Rust didn't / couldn't make functions able to return different outputs depending on context. If you chain `.split()` to something else that can take an iterator, you want to pass an iterator. If you don't, ~99% of people would probably rather have a collected array. And if you want an `it`, you could just do `.it()` or this is when type inference could be overloaded and you could do:
```rust
let it: Split<'_, char> = "a,b,c".split(',');
```
I think Rust should've put more effort into making the thing newbs want to do the default, and easy ways to get the most efficient thing for experts.
```rust
let parts = "a,b,c".split(); // Gives an Array/Vec
let count = "a,b,c".split().count(); // Optimized stream, no array allocation
```
It could work like that, and I think almost everyone would be happy. But it doesn't.
Instead, they've created a language that I think could have been nearly as easy as a scripting language, but isn't.
It obviously isn't only collection iterators this applies to. There's dozens of very small places that add up and make what - I believe - is an otherwise relatively easy and sensible language feel too far out of reach for too many people.
Which is why I'm a psychopath and attempting to create a language where it defaults to the things most people want, and it's very easy for experts to override.
Tiberium•19m ago
Random chapter so you can judge the quality for yourself: https://microsoft.github.io/RustTraining/python-book/ch09-er...
And the non-stop bullet list slop just looks horrible: https://microsoft.github.io/RustTraining/python-book/ch01-in...
Seems like this isn't limited to the Python book though, and others have the same issues: https://github.com/microsoft/RustTraining/issues/14