John Williams wrote: >On Tue, 1 Apr 2003, Michael Lazzaro wrote: >> So I *really* don't think comparing the equality of references will be >> a good idea, in P6. <snip> > The main point is that the > reference is a unique identifier for an object. At least, I haven't been > able to think why it wouldn't be yet (barring persistence).
Yes, I believe that to be true as well. For all practical purposes, the memory address of an object is a unique identifier for the object, since only one object can exist at the same point in memory. Well, probably. :-) > So if you cede that point, achieving your identity comparison is a trivial > matter of spelling the comparison correctly. > Maybe its "$x.ref == $y.ref", since 'ref' is less common than 'id'. > Maybe its something else. 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. In addition to discouraging the above behavior, the main reason I like an operator-based solution is that it can be used to test identity-equality in a very explicit way. You're not testing whether two objects "exist at the same location" -- you're testing whether two objects "share the same identity". In practice, those two concepts are linked, but conceptually I'd rather teach people to think of it as the latter. I like the suggestion of =:= in particular because it so clearly relates to "bound to", so it feels quite elegant. MikeL