We have some functions and methods such as [std::str::from_utf8](http://static.rust-lang.org/doc/master/std/str/fn.from_utf8.html) that may succeed and give a result, or fail when the input is invalid.

1. Sometimes we assume the input is valid and don’t want to deal with the error case. Task failure works nicely.

2. Sometimes we do want to do something different on invalid input, so returning an `Option<T>` works best.

And so we end up with both `from_utf8` and `from_utf8`. This particular case is worse because we also have `from_utf8_owned` and `from_utf8_owned_opt`, to cover everything.

Multiplying names like this is just not good design. I’d like to reduce this pattern.

Getting behavior 1. when you have 2. is easy: just call `.unwrap()` on the Option. I think we should rename every `foo_opt()` function or method to just `foo`, remove the old `foo()` behavior, and tell people (through documentation) to use `foo().unwrap()` if they want it back?

The downsides are that unwrap is more verbose and gives less helpful error messages on task failure. But I think it’s worth it.

What do you think?

(PS: I’m guilty of making this worse in #10828, but I’d like to discuss this before sending pull requests with invasive API changes.)

--
Simon Sapin
_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to