1. # rsinfuの意見 (MLに返信したやつ)
  2.  
  3. Sealed rangeの要素を読み出すと,必ずコピコンが走る.だから安いコピコンという前提は必須.
  4. 短くまとめるとそういう意見.以下はその説明でござんす.
  5.  
  6. ## 問題はswapだけじゃない
  7.  
  8. 過去ログだと,みんなswap操作とmoveについてばかり話してた.
  9. でもこれ,swapだけの問題じゃないのに気づいてほしい.
  10. あらゆる操作にコピーがつきまとうし,moveで解決できるケースも限られてる.
  11.  
  12. Swapするときに限らず,いかなる要素アクセスもコピコンを呼び出すのに注意!
  13. 例えば Array!BigInt をソートする場合,なんの気なしの要素比較ですらコピーを作ってしまう:
  14.  
  15. if (!less(r[i], r[p])) // ここでコピコンが2回走る.
  16.  
  17. コンテナ内とlessに渡すもので,論理的にオブジェクトが複数存在してるから,このコピコンは消去できない.
  18. まあもちろん,moveで取り出してから比較し,そのあとで代入し直せばコピコンは防げる.
  19. でもそんなのはヤダヤダ! あらゆる要素アクセスでそれをやるっての!?
  20.  
  21. たいていのシーンではただ要素を読みたいだけ.
  22. swapのようにmoveで解決できるのはごく一部で,ほとんどはコピーせざるをえない.
  23. Sealed rangeはそもそも要素を読むのにコピーをする (参照を見せない) というコンセプトなんだから,
  24. もしそいつを推してくというのなら,「要素のコピコンは軽いもの」と仮定しないと身動きとれないですよ.
  25.  
  26. そんなわけで,moveFront等を追放し,代わりにコピコンは安いという前提を要請するのに賛成.