Just to mention in passing - there's a related principle that converting a block to a closure shouldn't change its semantics. This obviously doesn't fully work because of return/break/continue; that said, if a block without such flow control constructs is wrapped into a closure, you'd expect it to just work. It doesn't, because to work it would have to be a once-called-stack-allocated lambda, which Rust doesn't have (I don't get the reason for that either :-)
On Sat, Nov 30, 2013 at 9:40 PM, Kevin Ballard <[email protected]> wrote: > On Nov 30, 2013, at 10:20 AM, Patrick Walton <[email protected]> wrote: > > > On 11/30/13 10:05 AM, Kevin Cantu wrote: > >> While we're changing this stuff, I'd like to see lambdas allow return, > >> now that the need for forbidding that is gone, IIRC. That's more likely > >> to continually trip me up than unusual allocation mechanisms. > > > > No objections here. > > Quite a while ago the restriction on `return` was explained to me as > conforming to some principle (I forget the name, sadly) that basically says > that wrapping a block of code in a closure and immediately calling the > closure should not change the semantics of the code. Basically, `return` > shouldn't return from the lambda because that's not what it would do if the > closure was inlined manually. > > I didn't really understand the point of this, of course. > > -Kevin
_______________________________________________ Rust-dev mailing list [email protected] https://mail.mozilla.org/listinfo/rust-dev
