: On Thu, 2005-03-31 at 23:46 -0800, Darren Duncan wrote:
On Fri, Apr 01, 2005 at 08:04:22AM -0500, Aaron Sherman wrote:
: 
: > What I want to be able to do is compare two references to see if they 
: > point to the same thing, in this case an object, but in other cases 
: > perhaps some other type of thing.
: 
: Let's be clear about the difference between P5 and P6 here. In P5, an
: object was actually a reference with special magic that indicated that
: it was also tied to a package.
: 
: In P6, an object is a data-type. It's not a reference, and any member
: payload is attached directly to the variable.

Well, it's still a reference, but we try to smudge the distinction in P6.

: So, comparing references to objects isn't all that common in P6, though
: it could certainly happen.
: 
: Now, back to the concept of identity comparison... I would expect that
: you could do this:
: 
:       $ref1 ~~ $ref2

No, ~~ will deref any explicit references and smart match against
what is referenced.  That's part of the intentional smudging.

: The table in S4 doesn't have an entry for "Any ~~ Reference", but my
: guess is that that's just an oversight, as it seems to fit into the flow
: nicely.

That would be going back to the P5 way of thinking.  The ~~ operator
doesn't try to guess whether the user meant references to refer to
themselves or their referent.  It always assumes the referent.  Note
that when you say

    @foo ~~ @bar

it's actually passing two array references to ~~, for instance, since
they're in scalar context.

: More generally, I see no direct way to tell if two values have the same
: storage (the same PMC in Parrot), so you might have to do something
: P5ish:
: 
:       \$a ~~ \$b

Wouldn't work.  Ends up doing the same as $a ~~ $b.

Anyway, that's what =:= is there for.

Larry

Reply via email to