[rust-dev] About owned pointer

Diggory Hardy lists at dhardy.name
Fri Nov 8 07:47:24 PST 2013


On Friday 08 November 2013 06:33:23 Niko Matsakis wrote:
> I am not sure why Daniel says that a `~str` or `~[]` is not an "owned
> box". I guess he's using the term in some specific way. I consider
> `~str` and `~[]` to be exactly the same as any other `~T` value in
> usage and semantics. They are allocated on the same heap, moved from
> place to place, and freed at the same time, etc.
> 
> The difference between a type like `str` or `[T]` and other types is
> that `str` and `[T]` are actually a series of values: `u8` bytes and
> `T` values respectively. This entails a change in representation and
> is also the reason that one *must* use a pointer to refer to them,
> because the number of values is not known and hence the compiler can't
> calculate the size of the value.
> 
> Note that we are to some extent evolving how we handle dynamically
> sized types like `str` and `[]`. Right now they are quite second class
> (you can't impl them etc) but that will change. Nonetheless, it will
> remain true that you can never have a *value* of type `str` or `[]`,
> but most always use a pointer (either `~[]` or `&[]`).
> 
> Also note that a type like `~[T]` is in fact going to be represented
> not as a single pointer but rather three pointers, thanks to work by
> Daniel in fact.

What's wrong with sticking with convention here? E.g. C++'s `string` and 
`vector<T>` are objects containing two or three pointers. D's arrays and 
`string` act the same way. Even C's dynamic arrays (`int x[]`) can be thought 
of the same way (if one avoids thinking of them as pointers).

So why not consider `str` and `[T]` conglomerates of a fixed size containing 
the pointers (start, length and capacity or whatever) needed? Semantically 
it's the same while syntactically it's simpler.

Slices will need new names of course, but I think the resulting decrease in 
confusion will be worth it. (D's developers tried to go the other way, with 
all arrays and slices being effectively copy-on-write slices, before realising 
that discrete array/slices types _were_ needed.)

DH
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 490 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.mozilla.org/pipermail/rust-dev/attachments/20131108/046289fa/attachment.sig>


More information about the Rust-dev mailing list