I should elaborate: I think you've successfully formulated placement new in 
terms of unboxed closures as monomorphized traits whose "call" method takes 
self by value. That is, something like (in Rust of the future):

    fn GC<T,F:OnceFunc<T>>(f: F) -> GC<T>

The difference, though, is that the construction of the closure is implicit at 
the call site in this proposal. This is what I'm uncomfortable with. Rust is a 
strict language, not a lazy one, and the order of evaluation of function 
arguments is one of the things that one has heretofore been unable to change. I 
would prefer that a different argument evaluation order would necessitate some 
sort of annotation at the call site (e.g. ocaml's "lazy"). But once you've done 
that you've essentially recreated something equivalent to placement new, but 
more verbose since you have to name a method when you allocate into an object 
(e.g. instead of "box(my_arena) foo" you'd have to write "my_arena.alloc(lazy 
foo)". I think we would end up wanting the sugar.

Patrick

"Gábor Lehel" <[email protected]> wrote:
>Yes, that was one of the things that passed through my mind as well.
>One
>difference is that those are passed at runtime, whereas here everything
>happens at compile time. I remember LLVM had difficulty reliably
>optimizing
>runtime closure passing code, like with the old iterators.
>
>
>On Wed, Dec 4, 2013 at 5:05 AM, Daniel Micay <[email protected]>
>wrote:
>
>> This looks a lot like what stack once functions would provide.
>>
>
>
>
>-- 
>Your ship was destroyed in a monadic eruption.
>
>
>------------------------------------------------------------------------
>
>_______________________________________________
>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