Теперь проверим, как это всё работает:
Весь код в этих постах я выложил гистом на GitHub
use std::mem::size_of_val;
use std::iter;
// FromFn не реализует FusedIterator по понятным причинам
let it1 = iter::from_fn(|| None::<i32>).fuse();
let it2 = iter::from_fn(|| None::<i32>).fuse_slim();
// В этом случае SlimFuse не лучше (но и не хуже!), чем Fuse
assert_eq!(size_of_val(&it1), size_of_val(&it2));
// Итераторы возвращают одно и то же
assert!(it1.eq(it2));
// Теперь возьмём fused итератор. Все итераторы коллекций являются fused —
// в частности, std::slice::Iter.
let it1 = [1, 2, 3].iter().fuse();
let mut it2 = [1, 2, 3].iter().fuse_slim();
// Наш адаптер эксплуатирует свойства итератора и оказывается менее жирным!
assert!(size_of_val(&it1) > size_of_val(&it2));
// Проверим, что наш итератор выдаёт то же самое, что и стандартный
assert!(it1.eq(it2.by_ref()));
// Проверим, что с наш адаптер действительно fused
assert!(it2.by_ref().eq(iter::empty::<&i32>()));
assert!(it2.by_ref().eq(iter::empty::<&i32>()));
Замечательно. Торжество zero-cost абстракций!Весь код в этих постах я выложил гистом на GitHub
Gist
Proof of concept implementation of slim variant of Rust's `std::iter::Fuse`
Proof of concept implementation of slim variant of Rust's `std::iter::Fuse` - main.rs
Блог*
О, число подписчиков перевалило за сотню! Спасибо
Уже 150 подписчиков! 🎉 Хорошая скорость, однако
Forwarded from You Had No Job
Me: can we have some Java?
Mom: we have Java at 3 bn devices
Java on 3 bn devices:
Mom: we have Java at 3 bn devices
Java on 3 bn devices:
Тут, кстати, один технический блог в телеграме ожил: https://t.iss.one/brain_dump_etc/366
Telegram
brain_dump_etc
Давненько не писал. Будем считать, что был в творческом отпуске. Буду навёрстывать!
Forwarded from The After Times
Тяжёлые времена настали. Последний хэш без соли вычисляем