On 11/19/2013 12:51 PM, Daniel Micay wrote:
So in your opinion, what's wrong with the `Boxes` section?
http://static.rust-lang.org/doc/master/tutorial.html#boxes
I happen to think it does a pretty good job of explaining why `~` is
required for recursive types, which is almost the only use case for it
from a purely semantic perspective (not worrying about performance).
If this is all true, that recursive structures are the main, "almost the only
use case" of ~ pointers, then the tutorial is in my view rather ok on this
point. But then, why does it seem there are ~ pointers in every corner of Rust
code? Including numerous cases in the tutorial itself.
Also, how would we explain and term this meaning? "Indirection" is not good
enough (for we introduce indirections for other reasons, if only to have
variable-size content). I'd say "self-similarity" is the right term here, and
self-explaining (see wikipedia if you are not familiar with the idea). This is,
in fact, the actual idea commonly termed "recursivity" in programming (wrongly,
in my view, but this is yet another terminological issue). A rule about ~
pointers thus may be:
Whenever one needs self-similarity, use a ~ pointer.
This lets the language store the element through the kind
of indirection that permits a self-similar structure.
(I'm not happy of this formulation, neither, still obscure.)
however, other comments on ~ pointers (eg comparisons with C++ unique_ptr, notes
that it means owned or "my") introduce ideas rather different from the one you
suggest here, don't they? Say I manually create a kind of string or "fix-size"
array:
struct String {
n_bytes : uint,
bytes : ~[u8],
}
struct Array <Item> {
n_items : uint,
items : ~[Item],
}
Is it wrong here to ~ point to bytes or items? that's what I'd do, anyway... If
it is right, maybe the actual meaning of ~ is something like "proper content".
Whenever a structure actually contains content which is actually proper to it,
or more generally has (pointed) data participating to its description, then
these contents or descriptive data should pointed with ~: because they belong /
are proper to it.
struct ComplexVisualForm {
shape : ~ Shape,
style : ~ Style,
}
This matches my distinction between things and data (properly speaking). Data,
even when pointed (for technological rather than semantic reasons), still belong
to whatever they are part of. Data are never referenced (properly speaking), it
makes no sense. Things instead exist by themselves, are always ref'ed, never
copied (or moved), it makes no sense. If the reasoning above about ~ pointers is
more or less correct (i doubt it is), then we have in Rust the proper kind of
pointer to point to data, properly speaking, meaning information about things.
Now, to reference things from multiple points of view, we need something else,
proper refs or links, and they cannot be ordinary pointers (especially not
GC'ed): we need true refs, independant from the data (while pointers hold their
addresses).
Denis
_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev