On Sun, Sep 15, 2024 at 3:29 PM Gary Guo <gary@xxxxxxxxxxx> wrote: > > The term "receiver" means that a type can be used as the type of `self`, > and thus enables method call syntax `foo.bar()` instead of > `Foo::bar(foo)`. Stable Rust as of today (1.81) enables a limited > selection of types (primitives and types in std, e.g. `Box` and `Arc`) > to be used as receivers, while custom types cannot. > > We want the kernel `Arc` type to have the same functionality as the Rust > std `Arc`, so we use the `Receiver` trait (gated behind `receiver_trait` > unstable feature) to gain the functionality. > > The `arbitrary_self_types` RFC [1] (tracking issue [2]) is accepted and > it will allow all types that implement a new `Receiver` trait (different > from today's unstable trait) to be used as receivers. This trait will be > automatically implemented for all `Deref` types, which include our `Arc` > type, so we no longer have to opt-in to be used as receiver. To prepare > us for the change, remove the `Receiver` implementation and the > associated feature. To still allow `Arc` and others to be used as method > receivers, turn on `arbitrary_self_types` feature instead. > > This feature gate is introduced in 1.23.0. It used to enable both > `Deref` types and raw pointer types to be used as receivers, but the > latter is now split into a different feature gate in Rust 1.83 nightly. > We do not need receivers on raw pointers so this change would not affect > us and usage of `arbitrary_self_types` feature would work for all Rust > versions that we support (>=1.78). > > Cc: Adrian Taylor <ade@xxxxxxxxxxx> > Link: https://github.com/rust-lang/rfcs/pull/3519 [1] > Link: https://github.com/rust-lang/rust/issues/44874 [2] > Signed-off-by: Gary Guo <gary@xxxxxxxxxxx> Reviewed-by: Alice Ryhl <aliceryhl@xxxxxxxxxx>