[rust-dev] About owned pointer
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.)
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 490 bytes
Desc: This is a digitally signed message part.
More information about the Rust-dev