Thread overview
Equality for Objects (documentation)
Jan 14, 2005
Simon Buchan
Jan 14, 2005
Simon Buchan
January 12, 2005
http://www.digitalmars.com/d/expression.html#EqualExpression says:

> Equality Expressions
> 
> 	EqualExpression == RelExpression
> 	EqualExpression != RelExpression
> 	EqualExpression is RelExpression
> 
> Equality expressions compare the two operands for
> equality (==) or inequality (!=). The type of the result is bool.

There is no "bool" type, the type of the result is int.
(bool is just defined as an alias for bit, in object.d)

> For class objects, equality is defined as the result of calling Object.eq().

The name of the method called is now opEquals, not "eq"
As in: "The names of the overloaded operators may change."

> If one or the other or both objects are null, an exception is raised.

And it does not throw an exception, but just dereference null.
Which usually leads to a Segmentation Fault / Access Violation.

--anders

PS. Identity Expressions is missing from the page index...
    And '===' should probably be listed in that section ?
January 14, 2005
On Wed, 12 Jan 2005 12:38:51 +0100, Anders F Björklund <afb@algonet.se> wrote:

> http://www.digitalmars.com/d/expression.html#EqualExpression says:
>
>> Equality Expressions
>>  	EqualExpression == RelExpression
>> 	EqualExpression != RelExpression
>> 	EqualExpression is RelExpression
>>  Equality expressions compare the two operands for
>> equality (==) or inequality (!=). The type of the result is bool.
>
> There is no "bool" type, the type of the result is int.
> (bool is just defined as an alias for bit, in object.d)
>
>> For class objects, equality is defined as the result of calling Object.eq().
>
> The name of the method called is now opEquals, not "eq"
> As in: "The names of the overloaded operators may change."
>
>> If one or the other or both objects are null, an exception is raised.
>
> And it does not throw an exception, but just dereference null.
> Which usually leads to a Segmentation Fault / Access Violation.
>

Both are just exceptions (0xC0000005 familiar?). Tricky, eh?

> --anders
>
> PS. Identity Expressions is missing from the page index...
>      And '===' should probably be listed in that section ?

anyone know whether === is actually depreciated if favour of 'is',
or are both A-OK?

-- 
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
January 14, 2005
Simon Buchan wrote:

>> And it does not throw an exception, but just dereference null.
>> Which usually leads to a Segmentation Fault / Access Violation.
> 
> Both are just exceptions (0xC0000005 familiar?). Tricky, eh?

No, it's not familiar (then again, I don't run Windows either...)

Here it is more like:
> Program received signal EXC_BAD_ACCESS, Could not access memory.
> 0x0000260c in _Dmain ()
> (gdb) 

You are saying a hardware exception is the same thing as Exception?
Just because they have similar names on a certain operating system?


So maybe that is what Walter is talking about on the doc page...
I assumed regular exceptions, since "raise" is a synonym for "throw"

Maybe something like "If one or the other or both objects are null,
your program will horribly crash." would be more easy understandable?


> anyone know whether === is actually depreciated if favour of 'is',
> or are both A-OK?

According to the DMD 0.110 source code, both map to TOKidentity.
But there is just one mapping to TOKnotidentity, and that is !==

Could be nice if the documentationed mentioned both, and used one?

--anders
January 14, 2005
On Fri, 14 Jan 2005 10:35:05 +0100, Anders F Björklund <afb@algonet.se> wrote:

> Simon Buchan wrote:
>
>>> And it does not throw an exception, but just dereference null.
>>> Which usually leads to a Segmentation Fault / Access Violation.
>>  Both are just exceptions (0xC0000005 familiar?). Tricky, eh?
>
> No, it's not familiar (then again, I don't run Windows either...)
>
> Here it is more like:
>> Program received signal EXC_BAD_ACCESS, Could not access memory.
>> 0x0000260c in _Dmain ()
>> (gdb)
>
> You are saying a hardware exception is the same thing as Exception?
> Just because they have similar names on a certain operating system?
>

Pretty much.

in thread "'===' Revisited" in digitalmars.D, Walter Bright says:
> The null check is being done. It's just being done "for free" by the
> hardware. You can also catch access violation exceptions just like any other
> exception. There really isn't anything added by doing a redundant check in
> software, other than bloat.

>
> So maybe that is what Walter is talking about on the doc page...
> I assumed regular exceptions, since "raise" is a synonym for "throw"
>
> Maybe something like "If one or the other or both objects are null,
> your program will horribly crash." would be more easy understandable?
>

as will the billion other things that cause SIGSEGV (the name in the Linux
kernel, and what is shown on the less forgiving distros) if you don't catch
them, as with other exceptions that arn't caught. Just be aware that a message
being printed on stdout and your program exiting isn't what I call a horrible
crash. That would be when your machine locks up and your hard-drive starts to
shred itself- aparantly a possiblity before exceptions/hardware error flags.

>
>> anyone know whether === is actually depreciated if favour of 'is',
>> or are both A-OK?
>
> According to the DMD 0.110 source code, both map to TOKidentity.
> But there is just one mapping to TOKnotidentity, and that is !==
>
> Could be nice if the documentationed mentioned both, and used one?
>
> --anders

Hmm... not really saying if one or the other is prefered. The doc's are
rather scitzofrenic (sp?) on this count, too, some pages only mention in,
and say to use !(a in b), others only mention ===, !==

-- 
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/