-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Tanaka Akira wrote:
>> 実装はあとでどうとでもなるので、akrさんにインターフェースを決めていただ
>> きたいところ。思わずrandから移行したくなるような奴をお願いします。
> 
> rand の 4文字という短さには勝てないって...

と言いつつありがとうございます。

クラス構成について:

> まず気がつくのは Random じゃなくて Random::MT ということです。
> これと別のデザインとしては、Random 自体を Mersenne Twister
> のクラスにするというものがあるでしょう。
> 
> おそらくまつもとさんは後者を考えているんじゃないですかね。

同感です。以下の説明にも同意。内部実装はともかく、Random::MTは外に出さな
い方向でしょうね。

メソッド名について:

> Random::MT の中については upto という名前が気になります。
> upto(10) ならやっぱり 10 までだと思うのですが、ここでは 9 ま
> でなので名前がよろしくないと思います。すぐに思い付くメソッド
> 名としては integer があげられるでしょうか。

同感。JavaではnextBoolean、nextBytes、nextFloat、nextGaussian、nextInt、
nextLongがあります。「next」というのがpseudoな感じを表してますが、
SecureRandomにも同じインターフェースを持たせたいと思っているので、不要で
しょう。また、boolean、gaussianは利用者いない。Longは適合せず、というこ
とで、

Random#integer(max)
Ramdom#bytes(size)
Random#float

くらい? 他に現行APIからの移行先に;

Random#rand(max = 0)
Random#srand(seed = nil)
Random#seed=(seed = nil) # srandと同じ
Random.rand(max = 0) # 現行srand()と同等の種を元にしたRandomオブジェクト
                     # のRandom#rand(max)を呼ぶ。
rand(max = nil)      # => Random.rand

floatは不要かなぁ。rand(0)と同じ仕様のつもりですが、rand()でいいじゃん、
という気がする。

srand()は廃止とかまずいですかね? せめて、srand()は引数を取らないようにし
たい。

> あとは追加メソッドを検討すると OpenSSL::Random や
> SecureRandom から random_bytes, hex, base64 が考えられますが、
> そういうのがあると cookie に使いやすくなるのでむしろないほう
> がいいという気がします。

こちらの返信は保留。

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (Cygwin)

iQEVAwUBRm4zcB9L2jg5EEGlAQJGTQgAnuTY/+GQYvwZrMOwr81CrOd/1ypufV3H
5Bdmrmot1H5yBr6XeK+uPl0/mwWLdNMbOCZ0cI6eXcNKX2Caa4ElTSArYhuB2JPs
TysEK8xuVNC9EnpP951ehu9OqXK/aXyO4g6GwxwPp0ZRyVsHWmC71KV/2SIYBpJw
mZEg0wjb8OmLk3Q/QnGTV07FQ8Npt19xQlzpPfWPoF7F2h8JiV1TnPfJu1+3Su5i
NkHscZqn1/8AbtXcHcfnRn/5NkLUcMIKGouX+Dzk2QvdMunneLK3W1jQn5dWf0OF
7ZMMovptsxftNn+baoyvo8eC6wJG33PNt8V8nbCYscI9CdM5vPMVog==
=hLYk
-----END PGP SIGNATURE-----