Remove P: Unpin bound on impl Future for Pin by jonhoo · Pull Request #81363 · r...
source link: https://github.com/rust-lang/rust/pull/81363
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
We can safely produce a Pin<&mut P::Target>
without moving out of the Pin
by using Pin::as_mut
directly.
The Unpin
bound was originally added in #56939 following the recommendation of @withoutboats in #55766 (comment)
That comment does not give explicit justification for why the bound should be added. The relevant context was:
[ ] Remove
impl<P> Unpin for Pin<P>
This impl is not justified by our standard justification for unpin impls: there is no pointer direction between
Pin<P>
andP
. Its usefulness is covered by the impls for pointers themselves.This futures impl (link to the impl changed in this PR) will need to change to add a
P: Unpin
bound.
The decision to remove the unconditional impl of Unpin for Pin
is sound (these days there is just an auto-impl for when P: Unpin
). But, I think the decision to also add the Unpin
bound for impl Future
may have been unnecessary. Or if that's not the case, I'd be very interested to have the argument for why written down somewhere. The bound appears to not be needed, as demonstrated by the change requiring no unsafe code and by the existence of Pin::as_mut
.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK