Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Introduction – Rust for Python Programmers (microsoft.github.io)
18 points by linhns 1 hour ago | hide | past | favorite | 4 comments
 help



This tutorial is very bad, and the time estimates are pretty absurd.

The explanations are extremely short and I imagine a new Rust dev would not understand what is going on.

The Brown tutorial is far better, compare its section on mutables and ownership to this.

And yes, this entirely thing is AI generated. Why was this created?


The whole "book" seems to be AI-generated, or at least very heavily AI-edited. Would at this point it not be easier to just tell developers to use their LLM of choice to achieve the same (or, likely, better) result?

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


I can't recommend Rust enough. It has such a bad reputation, but it isn't that hard. I truly think it's easier than many languages with much less-intimidating reputations.

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.

`Option<T>`, `Result<T, E>`, `Future<T>` all impact linguistically how you can interact with a Type. I think the impacts of this don't make sense to people who've never encountered this before. `Arc<T>`, `Rc<T>`, `Mutex<T>`, and `RwLock<T>`, etc also have similar consequences.

Not only do people just not get it. But also, the type system quickly becomes "scary". To do pretty basic concurrency, you need to build a pretty "scary" looking type if you come from Python.

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.


Having the result type of a function change based on context sounds like a horrible idea because it would introduce tons of unnecessary ambiguity. If it's an issue that you have to chain one extra collect call, just write a helper function for splitting that returns a vec.



Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: