So far, that’s a case for a better library, not a better language.
if let Ok(my_number: u8) = &my_number_string.parse() {
assert_eq!(my_number, 42);
}
could, in C, look like this: if(parseInt(my_number_string, &my_number)) {
assert(my_number == 42);
}
That’s fairly similar, and the article doesn’t claim Rust is bad, or that C is bad because it doesn’t support multiple return values or restructuring (which could be used in place of it to make a function returning a struct look as if returns multiple values)(aside: u8 is not the type I would have chosen in that Rust example)
I think the example is pretty weak, because the difference isn't that meaningful in an isolated case. Consider something like parsing an HTTP request - it is difficult to even write the toy example without handling the major error cases. The result is a robust program by default.