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