[rust-dev] Managed & owned boxes in Rust

Niko Matsakis niko at alum.mit.edu
Wed Dec 5 19:01:00 PST 2012


The question of interconverting between @ and ~ etc seems to come up 
more often than I had expected.  I'm not sure if this is simply due to 
immature library design or whether it will continue to be true going 
forward.  But adding `@*`, `&*`, and `~*` as operators in their own 
right might be a good way to address the problem, though there will 
always be other ways that `@T` and `@[T]` are not interchangeable.


Niko

Patrick Walton wrote:
> On 12/5/12 6:07 PM, Niko Matsakis wrote:
>> Great article.  Regarding why ~[T] and ~T behave somewhat differently,
>> the reason is that the size of [T] is not known to the compiler!  It's
>> kind of like how in C, if you have T[3], that's a perfectly fine type,
>> but T[] is sort of a degenerate type that gets converted to T*
>> willy-nilly.  The reason is that the compiler can't really manipulate an
>> "unknown number of T's in a row", which is what [T] (Rust) and T[] (C)
>> represent.  As an example, it can't put such a value on the stack, since
>> it doesn't know how much stack space to allocate (well, it can't put
>> that on the stack without using alloca() or something similar).
>
> We have talked about special-casing "&*" in the grammar to mean 
> "borrow" regardless of the type of pointer, and we could also 
> conceivably special-case "@*" and "~*", which would make what you 
> wrote work. Basically you would be permitted to dereference 
> &[T]/@[T]/~[T]/&str/@str/~str for the sole purpose of borrowing it or 
> copying its contents into another heap.
>
> Patrick
>
> _______________________________________________
> Rust-dev mailing list
> Rust-dev at mozilla.org
> https://mail.mozilla.org/listinfo/rust-dev


More information about the Rust-dev mailing list