[rust-dev] Managed & owned boxes in Rust

Niko Matsakis niko at alum.mit.edu
Wed Dec 5 18:07:55 PST 2012


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).


Niko

Tom Lee wrote:
> Hey folks,
>
> Don't mean to spam, but I wrote a blog post last night about memory 
> management in Rust as I understand it, both based on my own experience 
> with the language so far and a few conversations on the #rust channel:
>
> http://tomlee.co/2012/12/managed-and-owned-boxes-in-the-rust-programming-language/
>
> If anybody's up for giving it a read over, I'm really keen to know if 
> I'm "getting it" or if I'm still confused :) I think I'm essentially 
> rewording what's in the tutorial, but for some reason I struggled to 
> digest the details for a while.
>
> I'm still not sure I understand why the exchange stack is exposed 
> syntactically if you can't directly use it to transfer ownership 
> between tasks (i.e. you still have to resort to pipes etc. which use 
> the exchange stack under the hood).
>
> Appreciate any clarification or thoughts!
>
> Cheers,
> Tom
> _______________________________________________
> Rust-dev mailing list
> Rust-dev at mozilla.org
> https://mail.mozilla.org/listinfo/rust-dev


More information about the Rust-dev mailing list