News for hackers. Stuff that matters.
Re:Announcing Rust 1.22 by steveklabnik on Thursday November 23, 2017 @07:40AM (#15764626)
? is explicitly a replacement for try!, yes.

> functions that have to return a single type

Well, all functions have to return a single type, though that type may be a composite type, like a tuple.

Less pedantically, `?` lets you (well, will let you) unwrap values and convert their error cases between each other. So once the next round of stabilization happens, if you have a function that returns Results, you can mix ? on Options and Results in the body, and vice versa. And it can be extended for other types too. Basically, it's an early return "protocol" if you will.

Re:Announcing Rust 1.22 by zZorgz on Thursday November 23, 2017 @07:51AM (#15764676)
By single type, I meant to hint not being able to mix ? on Options and Results in the body, but good to know that's soon possible! Though you still can't, eg, use `?` in main()
Re:Announcing Rust 1.22 by kibwen on Thursday November 23, 2017 @10:00AM (#15765425)
Tracking issue for using it in main: https://github.com/rust-lang/rust/issues/43301
Re:Announcing Rust 1.22 by mmstick on Tuesday November 28, 2017 @02:26PM (#15800532)
You can mix them if you take your Options and convert them into Results with the Option::ok_or(E) method.

    do_this(x).ok_or(CustomError::ThisError)?;
Re:Announcing Rust 1.22 by zZorgz on Thursday November 23, 2017 @08:09AM (#15764774)
Also regarding an "early return protocol", I'd also be curious for continue, break, any ! type expression. For one of the Rust projects I worked on, I wrote an unwrap macro on Option that takes a secondary ! argument.
Re:Announcing Rust 1.22 by steveklabnik on Thursday November 23, 2017 @08:05AM (#15764747)
That's coming as well!
Re:Announcing Rust 1.22 by zZorgz on Thursday November 23, 2017 @01:29PM (#15766925)
Interesting. Looking at the proposal it seems specific to main() and not any void returning function, by automatically picking an exit status. I suppose I worry the construct has a lack of control (log diagnostics, exit status, cleaning, etc) when bailing and can’t handle eg continue, break too.
Re:Announcing Rust 1.22 by steveklabnik on Thursday November 23, 2017 @02:27PM (#15767274)
exit status and cleaning should be just fine, logging or something else would need to not do it, yeah. continue and break would be weird outside of loops.