On Fri, Dec 6, 2013 at 3:41 PM, Simon Sapin <simon.sa...@exyr.org> wrote:
> 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

A stack trace already tells you where the error came from so I don't
think it's an important consideration. Rust can provide stack traces
on failure by default if that's desired.
_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to