kachick / times_kachick

`#times_kachick channel in chat` as a public repository. Personal Note and TODOs
https://github.com/kachick/times_kachick/issues?q=is%3Aissue+is%3Aclosed
6 stars 0 forks source link

2022-06-27 - Ruby の `Object#hash` を上書きする時に `^`(XOR) 演算子で繋げるんじゃなくて `Array#hash` とかに委譲しようみたいな方向性? #170

Closed kachick closed 2 years ago

kachick commented 2 years ago

ref: https://bugs.ruby-lang.org/issues/18611, https://github.com/rubocop/rubocop/pull/10441

10年前に自分用のメモとして https://github.com/kachick/hash-keyable/blob/ad312f72822c655cbc7a9908808b26c4da5c862a/lib/hash/keyable.rb#L10-L35 みたいな形にまとめてた。インスタンス変数の array で hash 呼び出すのが簡単確実だよねぐらいのつもりだったと思うので、XORとくらべていいか悪いかは考えたことがなかったと思う。あとはここに self.class を突っ込むのとかがよくある感じ。

昔の本だとどっちも載ってて、どっちも良しだよぐらいの感じだった記憶があるんだけど、Arrayの生成を都度するのはコスト高いやろー、どっちかというとXORの方が良いのでは ぐらいに思っててあんま深追いした事なかったからちょっと驚いた。 実際コストの話は https://github.com/ruby/ruby/pull/5805 でもされたっぽいんだけど、最終的には通ったっぽい。rubocop とか style 界隈の話かなーと思ってたけど、一応公式見解という結論になったのかな

なるほど、自前実装でコネコネして十分に散った値作るのは難しいから、最初から十分に速くていい感じの値を返してくれる Array#hash なりを使おうぜという感じなのかな。 そんなにやたらな数が突っ込まれはしない気がしてた Security/ scope の cop が増えたのでちょっと気になった。 Security/CompoundHash という定義。