Hi Henrik,

> On Jun 1, 2017, at 7:10 AM, Henrik Sperre Johansen 
> <[email protected]> wrote:
> 
> For a solution that works without change in 32/64 migration, one could use
> self class maxVal digitLength
> 
> ... but there's quite a bit of calculation in digitLength.
> 
> Speaking of excessive calculation;
> SmallInteger class >> startUp: isImageStarting
>    "The image is either being newly started (isImageStarting is true), or it's
> just been snapshotted.
>     If this has just been a snapshot, skip all the startup stuff."
>    | next val |
>    isImageStarting ifFalse: [^self].
>    val := -32768. "Assume at least 16 bits"
>    [next := val + val.
>    next class == self] whileTrue:
>        [val := next].
>    minVal := val.
>    maxVal := -1 - val
> 
> ... really? If this actually runs on 64bit image startup, that's quite
> impressive!

This is hardly excessive :-). It only takes 45 or 46 iterations to discover the 
max 64-bit integer.  The code is modeled on the Smalltalk-80 v 2 code that was 
on the original PARC Smalltalk tape which was there for 32-bit systems; the 
PARC Smalltalks were 16-bit.  Squeak, and hence Pharo, derived from 
Smalltalk-80 v 1 and so didn't have this code.



Cheers,
Eliot

Reply via email to