# 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等を追放し,代わりにコピコンは安いという前提を要請するのに賛成.