Size: a a a

2020 August 04

V

Vetro in Rust Async
меня интересует правильна ли реализация для футуры
источник

V

Vetro in Rust Async
и нет ли там ошибок с пиннингом
источник

V

Vetro in Rust Async
которые могут внезапно возникнуть
источник

Ct

Casual tears in Rust Async
Vetro
и нет ли там ошибок с пиннингом
нет unsafe => нет ошибок с Pin'ами.
источник

A

Adv0cat in Rust Async
Vetro
impl Request уже представляет из себя билдер
Просто как по мне не понятно что происходит, ну т.е. вы вызвали функцию или несколько, а потом почему-то await, чисто с логической точки зрения сложно для восприятия, опять же ИМХО
источник

V

Vetro in Rust Async
Casual tears
нет unsafe => нет ошибок с Pin'ами.
    
impl<T: Request> Wrapper<T> {
   pub(crate) fn project<'pin>(
       self: ::pin_project::__private::Pin<&'pin mut Self>,
   ) -> __WrapperProjection<'pin, T> {
   unsafe {
       let Self { req, fut } = self.get_unchecked_mut();
       __WrapperProjection {
           req,
           fut: ::pin_project::__private::Pin::new_unchecked(fut),
       }
   }
}
источник

V

Vetro in Rust Async
))
источник

V

Vetro in Rust Async
хотя pin_project вроде как дает гарантии
источник

Ct

Casual tears in Rust Async
Vetro
    
impl<T: Request> Wrapper<T> {
   pub(crate) fn project<'pin>(
       self: ::pin_project::__private::Pin<&'pin mut Self>,
   ) -> __WrapperProjection<'pin, T> {
   unsafe {
       let Self { req, fut } = self.get_unchecked_mut();
       __WrapperProjection {
           req,
           fut: ::pin_project::__private::Pin::new_unchecked(fut),
       }
   }
}
С помощью pin-project нельзя словить UB
источник

V

Vetro in Rust Async
гуд, это радует
источник
2020 August 05

A

Apachee in Rust Async
А что случится, если Future начнет поллиться, а во время полла будет вызов Waker'а, хотя Future с большой вероятностью вернет Poll::Ready?
источник

KR

Kai Ren in Rust Async
Ничего. По логике вещей таска заскедулиться на выполнение, когда будет вызов Waker, но так как в итоге таска вернёт Ready, то будет выкинута.
источник

D

Denis in Rust Async
Kai Ren
Ничего. По логике вещей таска заскедулиться на выполнение, когда будет вызов Waker, но так как в итоге таска вернёт Ready, то будет выкинута.
То, что какая-то футура вернёт Ready, в общем случае не влияет на то, что вернёт "таска"
источник

D

Denis in Rust Async
так что ничего "страшного" не произойдёт
источник

D

Denis in Rust Async
более того, экзекутор выполнит эту таску ещё разок, если она завейкается в процессе выполнения
источник

KR

Kai Ren in Rust Async
Denis
То, что какая-то футура вернёт Ready, в общем случае не влияет на то, что вернёт "таска"
Я думал имеется в виду футура самого верхнего уровня, что и выражает таску.
источник

D

Denis in Rust Async
Kai Ren
Я думал имеется в виду футура самого верхнего уровня, что и выражает таску.
даже если и так, она не будет "выкинута"
источник

KR

Kai Ren in Rust Async
Denis
даже если и так, она не будет "выкинута"
Почему? Таска ведь полностью отработала, зачем её ещё раз гнать?
источник

D

Denis in Rust Async
Kai Ren
Почему? Таска ведь полностью отработала, зачем её ещё раз гнать?
потому что она получила нотификацию о готовности данных
источник

KR

Kai Ren in Rust Async
Но в pending она же не ушла?
источник