Though this only works on Unix, so on Windows it uses the current time
as a seed. It might get better results using #microsecondClockValue
instead of #millisecondClockValue. And I'd think about just taking the
microsecond value and sending it #hashMultiply instead of the weird
things it's doing now. (bitXor with the identity hash of the
UUIDGenerator instance? That depends on the randomness of identity
hashes, which may or may not be very good.)
It seems likely that Windows has a built-in random number generator,
as well, which would probably be better.
While we're at it, the class Random is a Park-Miller generator, which
has quite poor randomness by modern standards. Most other Smalltalks
have upgraded -- GemStone uses CMWC (pure Smalltalk, very simple and
quite fast; I wrote that one), VW I believe uses Lagged Fibonacci, and
Squeak has moved to Mersenne Twister last I heard. I've tested all
three against statistical tests of randomness -- generated about 650GB
of random bytes from each, ran them through the tests (which require
that much data to get good statistics).
All three are pretty good, only failing a few tests. The only
generator I tested that passed *all* tests was Linux /dev/urandom.
Which is also fast. If you're on Linux, and don't need a repeatable
random sequence, I'd use /dev/urandom. If you do need to be able to
have a repeatable sequence with good randomness properties, I'd use
one of the three generators I mentioned above. Of the three, the
simplest and fastest is CMWC.
In Polymath random there are several alternate random generators but I
do not if there is CMWC
Regards,
-Martin