All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andreas Hindborg <nmi@metaspace.dk>
To: Alice Ryhl <alice@ryhl.io>
Cc: y86-dev@protonmail.com, rust-for-linux@vger.kernel.org,
	linux-kernel@vger.kernel.org, patches@lists.linux.dev,
	"Miguel Ojeda" <ojeda@kernel.org>,
	"Alex Gaynor" <alex.gaynor@gmail.com>,
	"Wedson Almeida Filho" <wedsonaf@gmail.com>,
	"Boqun Feng" <boqun.feng@gmail.com>,
	"Gary Guo" <gary@garyguo.net>,
	"Björn Roy Baron" <bjorn3_gh@protonmail.com>
Subject: Re: [PATCH v3 04/13] rust: add pin-init API core
Date: Thu, 30 Mar 2023 16:16:31 +0200	[thread overview]
Message-ID: <878rfe493r.fsf@metaspace.dk> (raw)
In-Reply-To: <ce17f68e-521f-f55e-8ae2-35bcd6ebd709@ryhl.io>


Alice Ryhl <alice@ryhl.io> writes:

> On 3/30/23 00:33, y86-dev@protonmail.com wrote:
>> From: Benno Lossin <y86-dev@protonmail.com>
>> This API is used to facilitate safe pinned initialization of structs. It
>> replaces cumbersome `unsafe` manual initialization with elegant safe macro
>> invocations.
>> Due to the size of this change it has been split into six commits:
>> 1. This commit introducing the basic public interface: traits and
>>     functions to represent and create initializers.
>> 2. Adds the `#[pin_data]`, `pin_init!`, `try_pin_init!`, `init!` and
>>     `try_init!` macros along with their internal types.
>> 3. Adds the `InPlaceInit` trait that allows using an initializer to create
>>     an object inside of a `Box<T>` and other smart pointers.
>> 4. Adds the `PinnedDrop` trait and adds macro support for it in
>>     the `#[pin_data]` macro.
>> 5. Adds the `stack_pin_init!` macro allowing to pin-initialize a struct on
>>     the stack.
>> 6. Adds the `Zeroable` trait and `init::zeroed` function to initialize
>>     types that have `0x00` in all bytes as a valid bit pattern.
>> Co-developed-by: Gary Guo <gary@garyguo.net>
>> Signed-off-by: Gary Guo <gary@garyguo.net>
>> Signed-off-by: Benno Lossin <y86-dev@protonmail.com>
>
> Reviewed-by: Alice Ryhl <aliceryhl@google.com>
>
>> +//! Aside from pinned initialization, this API also supports in-place construction without pinning,
>> +//! the marcos/types/functions are generally named like the pinned variants without the `pin`
>> +//! prefix.
>
> Typo: Should be "macros".
>
>> +type Invariant<T> = PhantomData<fn(*mut T) -> *mut T>;
>
> I think it would make sense to include a link to the nomicon on the
> documentation for the Invariant type.
>
> E.g. this link: https://doc.rust-lang.org/nomicon/subtyping.html

That would be nice. I think this also applies: https://doc.rust-lang.org/nomicon/phantom-data.html#table-of-phantomdata-patterns

>
>> +// This is the module-internal type implementing `PinInit` and `Init`. It is unsafe to create this
>> +// type, since the closure needs to fulfill the same safety requirement as the
>> +// `__pinned_init`/`__init` functions.
>> +struct InitClosure<F, T: ?Sized, E>(F, Invariant<(E, T)>);
>
> Documentation for a type should use /// rather than //.
>
> I think it would help to call out explicitly in the documentation on this type
> that it is an implementation detail of the pin_init_from_closure and
> init_from_closure methods.


  reply	other threads:[~2023-03-30 14:17 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-29 22:32 [PATCH v3 00/13] Rust pin-init API for pinned initialization of structs y86-dev
2023-03-29 22:32 ` [PATCH v3 01/13] rust: macros: add `quote!` macro y86-dev
2023-03-30 11:42   ` Andreas Hindborg
2023-03-30 12:01     ` Andreas Hindborg
2023-03-30 13:11     ` Gary Guo
2023-03-30 13:33   ` Alice Ryhl
2023-03-31 10:43   ` Andreas Hindborg
2023-03-29 22:32 ` [PATCH v3 02/13] rust: sync: add `assume_init` to `UniqueArc` y86-dev
2023-03-30  4:13   ` Wedson Almeida Filho
2023-03-30 12:18   ` Andreas Hindborg
2023-03-30 13:33   ` Alice Ryhl
2023-03-29 22:33 ` [PATCH v3 03/13] rust: types: add `Opaque::raw_get` y86-dev
2023-03-30 10:49   ` Gary Guo
2023-03-30 12:32   ` Andreas Hindborg
2023-03-30 13:33   ` Alice Ryhl
2023-03-29 22:33 ` [PATCH v3 04/13] rust: add pin-init API core y86-dev
2023-03-30 13:05   ` Andreas Hindborg
2023-03-30 15:46     ` Benno Lossin
2023-03-31  8:16       ` Andreas Hindborg
2023-03-30 13:17   ` Alice Ryhl
2023-03-30 13:33   ` Alice Ryhl
2023-03-30 14:16     ` Andreas Hindborg [this message]
2023-03-30 15:37       ` Benno Lossin
2023-03-30 15:36     ` Benno Lossin
2023-03-31 12:00   ` Andreas Hindborg
2023-03-29 22:33 ` [PATCH v3 05/13] rust: init: add initialization macros y86-dev
2023-03-30 14:21   ` Alice Ryhl
2023-03-30 15:38     ` Benno Lossin
2023-03-31 12:02   ` Andreas Hindborg
2023-03-29 22:33 ` [PATCH v3 06/13] rust: init/sync: add `InPlaceInit` trait to pin-initialize smart pointers y86-dev
2023-03-30 10:58   ` Gary Guo
2023-03-30 13:39   ` Andreas Hindborg
2023-03-30 14:37   ` Alice Ryhl
2023-03-30 15:28     ` Benno Lossin
2023-03-30 20:24       ` Alice Ryhl
2023-03-29 22:33 ` [PATCH v3 07/13] rust: init: add `PinnedDrop` trait and macros y86-dev
2023-03-30 11:01   ` Gary Guo
2023-03-30 15:41     ` Benno Lossin
2023-03-30 14:45   ` Alice Ryhl
2023-03-31 12:31   ` Andreas Hindborg
2023-03-29 22:33 ` [PATCH v3 08/13] rust: init: add `stack_pin_init!` macro y86-dev
2023-03-30 11:06   ` Gary Guo
2023-03-30 15:07     ` Alice Ryhl
2023-03-30 15:00   ` Alice Ryhl
2023-03-30 15:19     ` Benno Lossin
2023-03-30 20:28       ` Alice Ryhl
2023-03-31 12:43   ` Andreas Hindborg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=878rfe493r.fsf@metaspace.dk \
    --to=nmi@metaspace.dk \
    --cc=alex.gaynor@gmail.com \
    --cc=alice@ryhl.io \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=gary@garyguo.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ojeda@kernel.org \
    --cc=patches@lists.linux.dev \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=wedsonaf@gmail.com \
    --cc=y86-dev@protonmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.