Hi,
Actually the confusion is in Object class.
All objects can be tested for identity (message #==) but it doesn't make sense to offer messages for equality (message #=) all over the hierarchy. Not all object has a good meaning of equality and, imho, to give default equality (based on identity) make the confusion bigger.
I think to put equality in Object is one the the biggest misconceptions we suffer daily. Only a small set of objects can answer for equality in a senseful way.
If you combine this fact with the awful-object-capabilities of the main-stream languages (where the objects never survive a run), you will get an abuse of uses of equality. Most of the times, in those languages, equality is just used to workaround the problems with the (nonexistent) identity.
Cheers,
-- Diego
El lun, 13-02-2006 a las 16:25 -0800, tim Rowledge escribió:
On 13-Feb-06, at 4:09 PM, Wolfgang Helbig wrote:
Now, my question. Are SmallIntegers, Characters and Symbols in Squeak immutable objects in the sense of the above definition, i, e. not destroyable? If not, why and when was it changed in Squeak. If they are still immutable, why is this planned to be changed?
SmallIntegers, Characters and Symbols are indeed immutable in Squeak. However, numbers in general are not quite the same; it is entirely possible to have several LargeIntegers with the same numeric value and that is one quite obvious case where using #== instead of #= could provide a surprise. All one has to do is remember tat #== means 'is the same object' and #= means 'is an equal object' to see that confusion is not smart.
tim