3

Remove P: Unpin bound on impl Future for Pin by jonhoo · Pull Request #81363 · r...

 3 years ago
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.
neoserver,ios ssh client

Copy link

Contributor

jonhoo commented on Jan 25

edited

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> and P. 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.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK