It's also not clear to me how "&once fn" can decompose into a trait in the 
future. The goal in the future is to make "fn()" a type of trait, to allow for 
C++-like zero-indirection closures. The different types of functions that we 
have today correspond to different "self" parameters: "|A|->B" corresponds to 
"&mut self" and "proc()" corresponds to "~self". But I don't see where "&once 
fn" fits in.

Perhaps the right thing is to gate "&once fn" on by-value anonymous closures. I 
think once functions may be able to be made to work as function trait bounds. 
But implementing "&once fn" right now seems to close off our ability to have 
closures with the same efficiency as C++11 in the future, unless there's 
something I'm missing.

Patrick 

Patrick Walton <[email protected]> wrote:
>On 11/30/13 12:04 PM, Oren Ben-Kiki wrote:
>> 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 :-)
>
>If you decompose into a lambda plus the tupled set of upvars which it's
>
>moving out of, then this respects TCP.
>
>Patrick
>
>_______________________________________________
>Rust-dev mailing list
>[email protected]
>https://mail.mozilla.org/listinfo/rust-dev

-- 
Sent from my Android phone with K-9 Mail. Please excuse my brevity.
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to