Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # rsinfuの意見 (MLに返信したやつ)
- Sealed rangeの要素を読み出すと,必ずコピコンが走る.だから安いコピコンという前提は必須.
- 短くまとめるとそういう意見.以下はその説明でござんす.
- ## 問題はswapだけじゃない
- 過去ログだと,みんなswap操作とmoveについてばかり話してた.
- でもこれ,swapだけの問題じゃないのに気づいてほしい.
- あらゆる操作にコピーがつきまとうし,moveで解決できるケースも限られてる.
- Swapするときに限らず,いかなる要素アクセスもコピコンを呼び出すのに注意!
- 例えば Array!BigInt をソートする場合,なんの気なしの要素比較ですらコピーを作ってしまう:
- if (!less(r[i], r[p])) // ここでコピコンが2回走る.
- コンテナ内とlessに渡すもので,論理的にオブジェクトが複数存在してるから,このコピコンは消去できない.
- まあもちろん,moveで取り出してから比較し,そのあとで代入し直せばコピコンは防げる.
- でもそんなのはヤダヤダ! あらゆる要素アクセスでそれをやるっての!?
- たいていのシーンではただ要素を読みたいだけ.
- swapのようにmoveで解決できるのはごく一部で,ほとんどはコピーせざるをえない.
- Sealed rangeはそもそも要素を読むのにコピーをする (参照を見せない) というコンセプトなんだから,
- もしそいつを推してくというのなら,「要素のコピコンは軽いもの」と仮定しないと身動きとれないですよ.
- そんなわけで,moveFront等を追放し,代わりにコピコンは安いという前提を要請するのに賛成.
Add Comment
Please, Sign In to add comment