PHPでMersenne Twister法で擬似乱数を生成する関数のmt_rand()にバグがあり出力がおかしい、という話が流れてきておもしろかったので簡単にまとめておく

kusanoさんがmt_rand()の実装に9年以上前から1文字違いでバグがあったことを見つけて、数ヶ月後にマージされる (追記: 正確には、PHP版の実装が他と異なっているのは前から知られていたらしい*1 )



その後、生成される 擬似乱数 列が変わってしまうので、 後方互換 性を壊す変更は議論してからmergeすべきということでrevertされる

このrevertコミットに付いているコメントがいろいろとおもしろい

Revert "Fix #71152: mt_rand() returns the different values from origi… · php/php-src@a0724d3 · GitHub

最初のコメントからしてなかなかすごい

"Sure it's broken, but at least it's consistently broken!"

(拙訳: 確かに壊れている。しかし、少なくとも一貫して壊れている) https://github.com/php/php-src/commit/a0724d30817600540946b41e40f4cfc2a0c30f80#commitcomment-16174204

この後バグを放置するのに怒った人達(？)が途中「PHPは糞」みたいなコメントを何個も書き込んでいて熱い

適当に斜め読みしたところによると、後方互換性を損なう変更なのでよく議論してから大型のリリース中で修正することになるっぽい

愉快なことにPHPのmt_rand()の出力が一貫して間違ったままであることを保証するためのテストが追加されている