Enumerable.Reverseについて

 SingleLinkedListにIListを実装するとEnumerable.Reverseで大変なことになると思ったのでソースを見てみたが、ぶっちゃけ配列にコピーしてから後ろから順に辿ってるだけなのでまるで関係ない。せめてReverseArrayIteratorとかReverseListIteratorとか作ったらいいんじゃないかと思った。

 しかしfor文での速度と比べると圧倒的に遅くはなる。WhereSelectReverseArrayIteratorとか作れば全然違うのだろうけど。しかしそこまではやらないにしても、なんでArrayを返してくれないのか。内部がArrayならその後のSelectもWhereもすごく速くなるのに。後ろから順に辿るのでなく逆から順に配列にコピーすればいいだけの話ではないか。ICollectionの場合逆から順に配列にコピーしていって返してくれればいいだけじゃないか。でもArrayを返してるってばれたらArrayに依存されてしまって仕様変更できなくなるのか。じゃあIteratorを返せばいいのだろうけどinternalクラスだ。まあ俺がICollectionのReverseでArrayを返す分には問題ないわけだな。

 結局LINQJITコンパイルで最適化する前提なんだろうな。ずらずら書いたLINQを全部for文にしてくれればReverseなんてのもずっと速くなる。具体型への置き換えもSTLみたいにソースでやるのではなくて、実行回数測定してボトルネックJITで最適化してやったらいいという話なんだろう。じゃあもういいや。