On 6/12/07, NAKAMURA, Hiroshi <nakahiro / sarion.co.jp> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Hi all,
>
> # Especially to Technorama Ltd.
>
> We're discussing about introducing Random class for PRNG on ruby-dev ML.
>
>  * current rand and srand changes global state.  it should be the
>   source of a security problem sooner or later in this "framework" era.
>   (I claimed)
>  * Mats agreed to introduce a class for PRNG based on current Mersenne
>   Twister implementation.  class name is "Random".
>  * no plan to introduce another PRNG based on other PRNG algorithm.
>   MT is the only PRNG engine for "Random".
>  * we're now discussing what methods "Random" should have.
>
> Here's my proposal (no agreement for now);
>
> Random#integer(max)
> Ramdom#bytes(size)
> Random#float         # same as Random#rand(0).  not needed?
> Random#rand(max = 0)
> Random#srand(seed = nil)
> Random#seed=(seed = nil) # same as Random#srand(seed)
>
> Random.rand(max = 0) # calls Random#rand(max) of the singleton Random
>                     # object which is initialized with the current
>                     # srand().
>
> rand(max = nil)      # calls Random.rand(max)
> srand()              # srand() now takes no argument for 1.9.
>
> Comments needed.

Ideas from Python can be found at: http://docs.python.org/lib/module-random.html

Ideas from Java can be found at:
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Random.html

My own ideas:

Random.new instead of Random.rand (or, make the latter an alias of the former).

Allow Random#rand instance method to accept a range for low and high
values. Or, create separate methods analogous to the Python
implementation.

Regards,

Dan