Namazu-devel-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: 妙なNMZ.pができる問題



臼田です

Tadamasa Teranishi wrote:
> 
> ここから考えられることは、SEED が 0 でも互換性が保たれているか
> どうかは保証されないかもしれないということですね。
> 
http://search.cpan.org/~jhi/perl-5.8.1/pod/perlrun.pod
の PERL_HASH_SEED の項を見ると

(Since Perl 5.8.1.) Used to randomise Perl's internal hash function. To emulate the pre-5.8.1 behaviour, set to an integer (zero means exactly the same order as 5.8.0). "Pre-5.8.1" means, among other things, that hash keys will be ordered the same between different runs of Perl.

とあるので0を指定することで5.8.0と同じ振る舞いになるようです。


そもそもHashがランダムに配置されることで影響されそうなのは
sortせずに keys() values() each() を使っているところなので
mknmzでは関係するところはなさそうなのですが

http://use.perl.org/articles/03/09/26/2231256.shtml?tid=6
を読むとデストラクタの呼ばれるタイミングにも影響があるようです。
なんらかの潜在バグを発現させるきっかけになっているのかもしれません。

"0"は乱数の種ではなく、乱数を使わないことを意味しているようなので
やはりPerl5.8.1では PERL_HASH_SEED=0を指定して
ハッシュのランダム化を無効にしてもらうということで良いかと
思います。

臼田幸生