On Thu, 3 Apr 2003, mlazzaro wrote:
> Yes. I expect that internally, that's how it will work. (And agreed,
> C<.ref> is probably a good name.)
>
> My concern with explicitly comparing refs in order to compare identity
> is a philosophical one. It may be perfectly acceptable to do it via
>
> $x.ref == $y.ref; # do they exist at the same location?
>
> but I worry that that is a bit obtuse. I'd rather people didn't have to
> worry about comparing reference locations, even indirectly, because it
> leads to thinking you can do things like this:
>
> my $loc = $x.ref;
> ...stuff...
> $loc == $y.ref; # OOPS: but has $x moved since then?
>
> Depending on the implementation, code like that might be dangerous.
I don't thing there is any danger. Consider this:
my $xref = \$x;
...stuff...
print $$xref; # OOPS: but has $x moved since then?
Obviously that "oops" is not a concern. The reference is not necessarily
a memory address. The GC can move objects around if it wants, but it must
make sure the references to an object still refer to the object.
The danger I see with reference comparison involves the perl6
auto-dereferencing, and how to be sure we have a reference-to-an-object
and not a reference-to-a-reference-to-an-object. For example:
$b = @a;
$b.ref; # is this [EMAIL PROTECTED] or [EMAIL PROTECTED]
$b.ref == @a.ref; # will this work? should this work?
> I like the suggestion of =:= in particular because it so clearly relates
> to "bound to", so it feels quite elegant.
Personally, I doubt the necessity of yet-another-operator, because I'm not
convinced the operation is a frequent one. We may both be biased by
our personal coding experience on that count. But, no one can stop you
from defining infix:=:= in your own code.
~ John Williams