この最適化がおもしろかったので、あとで読んでメモを取る。理解できるかがちょっと謎だけど。 おおまかな変更としては単純で、 swap の廃止。 truncate の廃止。 で性能を上げたという感じになっていそう。 ベンチマークを見る感じ、いいケースだと倍以上の性能が出るようになっていそう。 元の実装 元の実装は下記のようになっている。 #[stable(feature = "rust1", since = "1.0.0")] pub fn retain<F>(&mut self, mut f: F) where F: FnMut(&T) -> bool, { let len = self.len(); let mut del = 0; { let v = &mut **self; for i in 0..len { if !f(&v[i]) { del += 1; } else if del