Size: a a a

Rust — русскоговорящее сообществo

2020 April 18

В

Вафель in Rust — русскоговорящее сообществo
Ilyas Gasanov
Вопрос в том, что TryFrom<&'a [Foo; N]> придётся тогда реализовывать для каждого N. ))
Проще просто слайсами пользоваться, имхо. Ссылки на массивы без const generics не имеют особого смысла.
источник

Э

Эрик in Rust — русскоговорящее сообществo
В общем, кроме &[] есть ещё куча вариантов, чтобы превратить массив в слайс.
источник

f

folex in Rust — русскоговорящее сообществo
impl<T: Clone> Stream for BroadcastFutReceiver<T> {
   #[inline(always)]
   fn poll(&mut self) -> Poll<Option<T>, ()> {
       (&*self).poll()
   }
}


А какой эффект у (&*self)?
источник

В

Вафель in Rust — русскоговорящее сообществo
folex
impl<T: Clone> Stream for BroadcastFutReceiver<T> {
   #[inline(always)]
   fn poll(&mut self) -> Poll<Option<T>, ()> {
       (&*self).poll()
   }
}


А какой эффект у (&*self)?
В данном случае &Self -> &mut Self
источник

В

Вафель in Rust — русскоговорящее сообществo
Но вообще это ещё с Deref'ом может перекликаться
источник

f

folex in Rust — русскоговорящее сообществo
Вафель
В данном случае &Self -> &mut Self
Но оно же и так &mut self?
источник

В

Вафель in Rust — русскоговорящее сообществo
folex
Но оно же и так &mut self?
Ой, блин, наоборот. &mut Self -> &Self 🤦‍♀️
источник

f

folex in Rust — русскоговорящее сообществo
Вафель
Но вообще это ещё с Deref'ом может перекликаться
Да, я тоже так подумал, но там вроде нету кастомной имплементации Deref https://github.com/abbychau/multiqueue2/blob/master/src/broadcast.rs#L691-L709
источник

f

folex in Rust — русскоговорящее сообществo
Вафель
Ой, блин, наоборот. &mut Self -> &Self 🤦‍♀️
И так тоже подумал, но оно в итоге зовет fn poll(&mut self) ._.
источник

В

Вафель in Rust — русскоговорящее сообществo
folex
И так тоже подумал, но оно в итоге зовет fn poll(&mut self) ._.
Вряд-ли. В таком случае это была бы бесконечная рекурсия
источник

f

folex in Rust — русскоговорящее сообществo
То есть обычно это &mut Self -> & Self, а тут вероятно просто забыли убрать. makes sense
источник

АГ

Алексей Герасимов in Rust — русскоговорящее сообществo
folex
impl<T: Clone> Stream for BroadcastFutReceiver<T> {
   #[inline(always)]
   fn poll(&mut self) -> Poll<Option<T>, ()> {
       (&*self).poll()
   }
}


А какой эффект у (&*self)?
по идее зафорвардить вызов poll у &BroadcastFutureReceiver
источник

f

folex in Rust — русскоговорящее сообществo
Алексей Герасимов
по идее зафорвардить вызов poll у &BroadcastFutureReceiver
да, вы правы
источник

f

folex in Rust — русскоговорящее сообществo
спасибо!
источник

f

folex in Rust — русскоговорящее сообществo
https://github.com/async-rs/async-std/blob/master/src/task/mod.rs#L158-L159

#[cfg(any(feature = "unstable", test))]
pub use spawn_blocking::spawn_blocking;


Я правильно понимаю, что в тестах я могу даже на stable использовать такую функцию?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Похоже что так.
источник

В

Вафель in Rust — русскоговорящее сообществo
folex
https://github.com/async-rs/async-std/blob/master/src/task/mod.rs#L158-L159

#[cfg(any(feature = "unstable", test))]
pub use spawn_blocking::spawn_blocking;


Я правильно понимаю, что в тестах я могу даже на stable использовать такую функцию?
feature = "unstable" это просто фича крейта. С версией тулчейна никак не связанно :)
источник

f

folex in Rust — русскоговорящее сообществo
Вафель
feature = "unstable" это просто фича крейта. С версией тулчейна никак не связанно :)
Понятненько
источник

f

folex in Rust — русскоговорящее сообществo
Но там же any(unstable, test), т.е. в тестах по дефолту должно быть включено?
источник

В

Вафель in Rust — русскоговорящее сообществo
да
источник