how to test, if the class has "shared identity" of instances in the whole image (SmallIntegers, Symbols...)

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

how to test, if the class has "shared identity" of instances in the whole image (SmallIntegers, Symbols...)

Pharo Smalltalk Users mailing list
Hello, some classes, like Symbols or SmallIntegers, shares identity of value instances in the whole image (I may say it wrong), so:

1 == 1 copy. [true]
#aaa == #aaa copy. [true]

all other classes not, like Strings, Objects etc., so:

'aaa' == 'aaa' copy. [false]

Is there any test method (maybe on the class side) I could ask for this (isXXX)?

Thanks! pf

Reply | Threaded
Open this post in threaded view
|

Re: how to test, if the class has "shared identity" of instances in the whole image (SmallIntegers, Symbols...)

Richard O'Keefe
It is not clear to me what the semantics of such a selector would be.
Consider this example:
 t := [:x | x copy == x].
 a := t value: 1.0e38.
 b := t value: 1.0e308.
What do you expect a and b to be?
GNU Smalltalk: a=true, b=true.
My Smalltalk, 32-bit or 64-bit: a=true, b=true.
Squeak/Pharo, 32-bit: a=false, b=false.
Squeak/Pharo, 64-bit: a=true, b=false.
Squeak/Pharo, after a patch: a=true, b=true.

There are two quite different reasons why x copy == x
might be true:
* x is immutable (including its parts), and can be
  thought of as a mathematical value, so that there
  is no need to copy it
  Examples: every kind of number, characters,
  booleans, immutable collections, block closures
* x is a way of accessing a unique resource, and
  should not be copied, so making copy the identity
  is a safety measure.
  Examples: Semaphores, Mutexes, SharedQueues, data base
  connections, some kinds of streams, singletons.
* Laziness or error (inherited method not revised).

What is your use case?



 



On Thu, 21 Feb 2019 at 07:32, Petr Fischer via Pharo-users <[hidden email]> wrote:
Hello, some classes, like Symbols or SmallIntegers, shares identity of value instances in the whole image (I may say it wrong), so:

1 == 1 copy. [true]
#aaa == #aaa copy. [true]

all other classes not, like Strings, Objects etc., so:

'aaa' == 'aaa' copy. [false]

Is there any test method (maybe on the class side) I could ask for this (isXXX)?

Thanks! pf

Reply | Threaded
Open this post in threaded view
|

Re: how to test, if the class has "shared identity" of instances in the whole image (SmallIntegers, Symbols...)

Pharo Smalltalk Users mailing list
> It is not clear to me what the semantics of such a selector would be.
> Consider this example:
>  t := [:x | x copy == x].
>  a := t value: 1.0e38.
>  b := t value: 1.0e308.
> What do you expect a and b to be?
> GNU Smalltalk: a=true, b=true.
> My Smalltalk, 32-bit or 64-bit: a=true, b=true.
> Squeak/Pharo, 32-bit: a=false, b=false.
> Squeak/Pharo, 64-bit: a=true, b=false.
> Squeak/Pharo, after a patch: a=true, b=true.
>
> There are two quite different reasons why x copy == x
> might be true:
> * x is immutable (including its parts), and can be
>   thought of as a mathematical value, so that there
>   is no need to copy it
>   Examples: every kind of number, characters,
>   booleans, immutable collections, block closures
> * x is a way of accessing a unique resource, and
>   should not be copied, so making copy the identity
>   is a safety measure.
>   Examples: Semaphores, Mutexes, SharedQueues, data base
>   connections, some kinds of streams, singletons.
> * Laziness or error (inherited method not revised).
>
> What is your use case?

I see... My use case was too superficial - thanks for answer!

pf

>
> On Thu, 21 Feb 2019 at 07:32, Petr Fischer via Pharo-users <
> [hidden email]> wrote:
>
> > Hello, some classes, like Symbols or SmallIntegers, shares identity of
> > value instances in the whole image (I may say it wrong), so:
> >
> > 1 == 1 copy. [true]
> > #aaa == #aaa copy. [true]
> >
> > all other classes not, like Strings, Objects etc., so:
> >
> > 'aaa' == 'aaa' copy. [false]
> >
> > Is there any test method (maybe on the class side) I could ask for this
> > (isXXX)?
> >
> > Thanks! pf
> >
> >