-
Notifications
You must be signed in to change notification settings - Fork 13.3k
Put Pin::as_deref_mut in impl Pin<Ptr> / rearrange Pin methods #129449
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Put Pin::as_deref_mut in impl Pin<Ptr> / rearrange Pin methods #129449
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you!
249e2da
to
b968b26
Compare
I guess the other option is to put |
@bors r+ |
…ature, r=dtolnay Put Pin::as_deref_mut in impl Pin<Ptr> / rearrange Pin methods Tracking issue: rust-lang#86918 Based on the suggestion in rust-lang#86918 (comment) > Some advantages: > > * Synergy with the existing `as_ref` and `as_mut` signatures (stable since Rust 1.33) > > * Lifetime elision reduces noise in the signature > > * Turbofish less verbose: `Pin::<&mut T>::as_deref_mut` vs `Pin::<&mut Pin<&mut T>>::as_deref_mut` The comment seemed to imply that `Pin::as_ref` and `Pin::as_mut` already share an impl block, which they don't. So, I rearranged it so that they do, and we can see which looks better in the docs. <details><summary><b>Docs screenshots</b></summary> Current nightly:  `Pin::as_deref_mut` moved into the same block as `as_mut`:  `Pin::as_ref`, `as_mut`, and `as_deref_mut` all in the same block:  </details> I think I like the last one the most; obviously I'm biased since I'm the one who rearranged it, but it doesn't make sense to me to have `as_ref` methods split up by an `into_inner` method. r? dtolnay
…ature, r=dtolnay Put Pin::as_deref_mut in impl Pin<Ptr> / rearrange Pin methods Tracking issue: rust-lang#86918 Based on the suggestion in rust-lang#86918 (comment) > Some advantages: > > * Synergy with the existing `as_ref` and `as_mut` signatures (stable since Rust 1.33) > > * Lifetime elision reduces noise in the signature > > * Turbofish less verbose: `Pin::<&mut T>::as_deref_mut` vs `Pin::<&mut Pin<&mut T>>::as_deref_mut` The comment seemed to imply that `Pin::as_ref` and `Pin::as_mut` already share an impl block, which they don't. So, I rearranged it so that they do, and we can see which looks better in the docs. <details><summary><b>Docs screenshots</b></summary> Current nightly:  `Pin::as_deref_mut` moved into the same block as `as_mut`:  `Pin::as_ref`, `as_mut`, and `as_deref_mut` all in the same block:  </details> I think I like the last one the most; obviously I'm biased since I'm the one who rearranged it, but it doesn't make sense to me to have `as_ref` methods split up by an `into_inner` method. r? dtolnay
…ature, r=dtolnay Put Pin::as_deref_mut in impl Pin<Ptr> / rearrange Pin methods Tracking issue: rust-lang#86918 Based on the suggestion in rust-lang#86918 (comment) > Some advantages: > > * Synergy with the existing `as_ref` and `as_mut` signatures (stable since Rust 1.33) > > * Lifetime elision reduces noise in the signature > > * Turbofish less verbose: `Pin::<&mut T>::as_deref_mut` vs `Pin::<&mut Pin<&mut T>>::as_deref_mut` The comment seemed to imply that `Pin::as_ref` and `Pin::as_mut` already share an impl block, which they don't. So, I rearranged it so that they do, and we can see which looks better in the docs. <details><summary><b>Docs screenshots</b></summary> Current nightly:  `Pin::as_deref_mut` moved into the same block as `as_mut`:  `Pin::as_ref`, `as_mut`, and `as_deref_mut` all in the same block:  </details> I think I like the last one the most; obviously I'm biased since I'm the one who rearranged it, but it doesn't make sense to me to have `as_ref` methods split up by an `into_inner` method. r? dtolnay
…kingjubilee Rollup of 10 pull requests Successful merges: - rust-lang#127021 (Add target support for RTEMS Arm) - rust-lang#128467 (Detect `*` operator on `!Sized` expression) - rust-lang#128735 (Add a special case for `CStr`/`CString` in the `improper_ctypes` lint) - rust-lang#129416 (library: Move unstable API of new_uninit to new features) - rust-lang#129418 (rustc: Simplify getting sysroot library directory) - rust-lang#129429 (Print the generic parameter along with the variance in dumps.) - rust-lang#129430 (rustdoc: show exact case-sensitive matches first) - rust-lang#129449 (Put Pin::as_deref_mut in impl Pin<Ptr> / rearrange Pin methods) - rust-lang#129481 (Update `compiler_builtins` to `0.1.121`) - rust-lang#129482 (Add myself to the review rotation for libs) r? `@ghost` `@rustbot` modify labels: rollup
…ature, r=dtolnay Put Pin::as_deref_mut in impl Pin<Ptr> / rearrange Pin methods Tracking issue: rust-lang#86918 Based on the suggestion in rust-lang#86918 (comment) > Some advantages: > > * Synergy with the existing `as_ref` and `as_mut` signatures (stable since Rust 1.33) > > * Lifetime elision reduces noise in the signature > > * Turbofish less verbose: `Pin::<&mut T>::as_deref_mut` vs `Pin::<&mut Pin<&mut T>>::as_deref_mut` The comment seemed to imply that `Pin::as_ref` and `Pin::as_mut` already share an impl block, which they don't. So, I rearranged it so that they do, and we can see which looks better in the docs. <details><summary><b>Docs screenshots</b></summary> Current nightly:  `Pin::as_deref_mut` moved into the same block as `as_mut`:  `Pin::as_ref`, `as_mut`, and `as_deref_mut` all in the same block:  </details> I think I like the last one the most; obviously I'm biased since I'm the one who rearranged it, but it doesn't make sense to me to have `as_ref` methods split up by an `into_inner` method. r? dtolnay
…iaskrgr Rollup of 11 pull requests Successful merges: - rust-lang#127021 (Add target support for RTEMS Arm) - rust-lang#128467 (Detect `*` operator on `!Sized` expression) - rust-lang#128524 (Don't suggest turning crate-level attributes into outer style) - rust-lang#128735 (Add a special case for `CStr`/`CString` in the `improper_ctypes` lint) - rust-lang#129418 (rustc: Simplify getting sysroot library directory) - rust-lang#129429 (Print the generic parameter along with the variance in dumps.) - rust-lang#129430 (rustdoc: show exact case-sensitive matches first) - rust-lang#129449 (Put Pin::as_deref_mut in impl Pin<Ptr> / rearrange Pin methods) - rust-lang#129481 (Update `compiler_builtins` to `0.1.121`) - rust-lang#129482 (Add myself to the review rotation for libs) - rust-lang#129492 (make text more easy to read) r? `@ghost` `@rustbot` modify labels: rollup
…ature, r=dtolnay Put Pin::as_deref_mut in impl Pin<Ptr> / rearrange Pin methods Tracking issue: rust-lang#86918 Based on the suggestion in rust-lang#86918 (comment) > Some advantages: > > * Synergy with the existing `as_ref` and `as_mut` signatures (stable since Rust 1.33) > > * Lifetime elision reduces noise in the signature > > * Turbofish less verbose: `Pin::<&mut T>::as_deref_mut` vs `Pin::<&mut Pin<&mut T>>::as_deref_mut` The comment seemed to imply that `Pin::as_ref` and `Pin::as_mut` already share an impl block, which they don't. So, I rearranged it so that they do, and we can see which looks better in the docs. <details><summary><b>Docs screenshots</b></summary> Current nightly:  `Pin::as_deref_mut` moved into the same block as `as_mut`:  `Pin::as_ref`, `as_mut`, and `as_deref_mut` all in the same block:  </details> I think I like the last one the most; obviously I'm biased since I'm the one who rearranged it, but it doesn't make sense to me to have `as_ref` methods split up by an `into_inner` method. r? dtolnay
…iaskrgr Rollup of 10 pull requests Successful merges: - rust-lang#127021 (Add target support for RTEMS Arm) - rust-lang#128467 (Detect `*` operator on `!Sized` expression) - rust-lang#128524 (Don't suggest turning crate-level attributes into outer style) - rust-lang#128735 (Add a special case for `CStr`/`CString` in the `improper_ctypes` lint) - rust-lang#129429 (Print the generic parameter along with the variance in dumps.) - rust-lang#129430 (rustdoc: show exact case-sensitive matches first) - rust-lang#129449 (Put Pin::as_deref_mut in impl Pin<Ptr> / rearrange Pin methods) - rust-lang#129481 (Update `compiler_builtins` to `0.1.121`) - rust-lang#129482 (Add myself to the review rotation for libs) - rust-lang#129492 (make text more easy to read) r? `@ghost` `@rustbot` modify labels: rollup
…iaskrgr Rollup of 10 pull requests Successful merges: - rust-lang#127021 (Add target support for RTEMS Arm) - rust-lang#128467 (Detect `*` operator on `!Sized` expression) - rust-lang#128524 (Don't suggest turning crate-level attributes into outer style) - rust-lang#128735 (Add a special case for `CStr`/`CString` in the `improper_ctypes` lint) - rust-lang#129429 (Print the generic parameter along with the variance in dumps.) - rust-lang#129430 (rustdoc: show exact case-sensitive matches first) - rust-lang#129449 (Put Pin::as_deref_mut in impl Pin<Ptr> / rearrange Pin methods) - rust-lang#129481 (Update `compiler_builtins` to `0.1.121`) - rust-lang#129482 (Add myself to the review rotation for libs) - rust-lang#129492 (make text more easy to read) r? `@ghost` `@rustbot` modify labels: rollup
…iaskrgr Rollup of 10 pull requests Successful merges: - rust-lang#127021 (Add target support for RTEMS Arm) - rust-lang#128467 (Detect `*` operator on `!Sized` expression) - rust-lang#128524 (Don't suggest turning crate-level attributes into outer style) - rust-lang#128735 (Add a special case for `CStr`/`CString` in the `improper_ctypes` lint) - rust-lang#129429 (Print the generic parameter along with the variance in dumps.) - rust-lang#129430 (rustdoc: show exact case-sensitive matches first) - rust-lang#129449 (Put Pin::as_deref_mut in impl Pin<Ptr> / rearrange Pin methods) - rust-lang#129481 (Update `compiler_builtins` to `0.1.121`) - rust-lang#129482 (Add myself to the review rotation for libs) - rust-lang#129492 (make text more easy to read) r? `@ghost` `@rustbot` modify labels: rollup
Rollup of 10 pull requests Successful merges: - rust-lang#128467 (Detect `*` operator on `!Sized` expression) - rust-lang#128524 (Don't suggest turning crate-level attributes into outer style) - rust-lang#128735 (Add a special case for `CStr`/`CString` in the `improper_ctypes` lint) - rust-lang#129429 (Print the generic parameter along with the variance in dumps.) - rust-lang#129430 (rustdoc: show exact case-sensitive matches first) - rust-lang#129449 (Put Pin::as_deref_mut in impl Pin<Ptr> / rearrange Pin methods) - rust-lang#129481 (Update `compiler_builtins` to `0.1.121`) - rust-lang#129482 (Add myself to the review rotation for libs) - rust-lang#129492 (Make wasm32 platform support docs easier to read) - rust-lang#129512 (update the doc comment on lintchecker b/c it parses html now) r? `@ghost` `@rustbot` modify labels: rollup
Rollup of 10 pull requests Successful merges: - rust-lang#128467 (Detect `*` operator on `!Sized` expression) - rust-lang#128524 (Don't suggest turning crate-level attributes into outer style) - rust-lang#128735 (Add a special case for `CStr`/`CString` in the `improper_ctypes` lint) - rust-lang#129429 (Print the generic parameter along with the variance in dumps.) - rust-lang#129430 (rustdoc: show exact case-sensitive matches first) - rust-lang#129449 (Put Pin::as_deref_mut in impl Pin<Ptr> / rearrange Pin methods) - rust-lang#129481 (Update `compiler_builtins` to `0.1.121`) - rust-lang#129482 (Add myself to the review rotation for libs) - rust-lang#129492 (Make wasm32 platform support docs easier to read) - rust-lang#129512 (update the doc comment on lintchecker b/c it parses html now) r? `@ghost` `@rustbot` modify labels: rollup
Rollup merge of rust-lang#129449 - coolreader18:pin-as_deref_mut-signature, r=dtolnay Put Pin::as_deref_mut in impl Pin<Ptr> / rearrange Pin methods Tracking issue: rust-lang#86918 Based on the suggestion in rust-lang#86918 (comment) > Some advantages: > > * Synergy with the existing `as_ref` and `as_mut` signatures (stable since Rust 1.33) > > * Lifetime elision reduces noise in the signature > > * Turbofish less verbose: `Pin::<&mut T>::as_deref_mut` vs `Pin::<&mut Pin<&mut T>>::as_deref_mut` The comment seemed to imply that `Pin::as_ref` and `Pin::as_mut` already share an impl block, which they don't. So, I rearranged it so that they do, and we can see which looks better in the docs. <details><summary><b>Docs screenshots</b></summary> Current nightly:  `Pin::as_deref_mut` moved into the same block as `as_mut`:  `Pin::as_ref`, `as_mut`, and `as_deref_mut` all in the same block:  </details> I think I like the last one the most; obviously I'm biased since I'm the one who rearranged it, but it doesn't make sense to me to have `as_ref` methods split up by an `into_inner` method. r? dtolnay
Btw, the changes of bounds in Pin::set from this PR most likely causes regression described in #129601 |
Ah, shoot, that makes sense. |
…tolnay Fix Pin::set bounds regression Fixes rust-lang#129601 Fixes the regression from rust-lang#129449, where changing the bounds of the impl block containing `Pin::set` changed the method resolution behavior. ```rust struct A; impl A { fn set(&self) {} } let a: Pin<&A>; a.set(); // before: // - checks <impl<Ptr: DerefMut> Pin<Ptr>>::set(): `&A` doesn't impl `DerefMut` // - autorefs -> &A: resolves to A::set() // now: // - checks <impl<Ptr: Deref> Pin<Ptr>>::set(): `&A` impls `Deref`! resolves to Pin::set() // - check method bounds: `&A` doesn't impl DerefMut: error ``` r? `@dtolnay`
Rollup merge of rust-lang#129668 - coolreader18:fix-pin-set-regr, r=dtolnay Fix Pin::set bounds regression Fixes rust-lang#129601 Fixes the regression from rust-lang#129449, where changing the bounds of the impl block containing `Pin::set` changed the method resolution behavior. ```rust struct A; impl A { fn set(&self) {} } let a: Pin<&A>; a.set(); // before: // - checks <impl<Ptr: DerefMut> Pin<Ptr>>::set(): `&A` doesn't impl `DerefMut` // - autorefs -> &A: resolves to A::set() // now: // - checks <impl<Ptr: Deref> Pin<Ptr>>::set(): `&A` impls `Deref`! resolves to Pin::set() // - check method bounds: `&A` doesn't impl DerefMut: error ``` r? `@dtolnay`
Tracking issue: #86918
Based on the suggestion in #86918 (comment)
The comment seemed to imply that
Pin::as_ref
andPin::as_mut
already share an impl block, which they don't. So, I rearranged it so that they do, and we can see which looks better in the docs.Docs screenshots
Current nightly:

Pin::as_deref_mut
moved into the same block asas_mut
:Pin::as_ref
,as_mut
, andas_deref_mut
all in the same block:I think I like the last one the most; obviously I'm biased since I'm the one who rearranged it, but it doesn't make sense to me to have
as_ref
methods split up by aninto_inner
method.r? dtolnay