All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Benno Lossin" <lossin@kernel.org>
To: "Danilo Krummrich" <dakr@kernel.org>
Cc: "Boqun Feng" <boqun.feng@gmail.com>,
	"Miguel Ojeda" <ojeda@kernel.org>,
	"Alex Gaynor" <alex.gaynor@gmail.com>,
	"Gary Guo" <gary@garyguo.net>,
	"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
	"Andreas Hindborg" <a.hindborg@kernel.org>,
	"Alice Ryhl" <aliceryhl@google.com>,
	"Trevor Gross" <tmgross@umich.edu>,
	"Fiona Behrens" <me@kloenk.dev>, "Alban Kurti" <kurti@invicto.ai>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	"Bjorn Helgaas" <bhelgaas@google.com>,
	"Krzysztof Wilczy´nski" <kwilczynski@kernel.org>,
	rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] rust: pin-init: add references to previously initialized fields
Date: Mon, 08 Sep 2025 00:51:02 +0200	[thread overview]
Message-ID: <DCMXPGXDXHYT.D9VJ5QBMAVPN@kernel.org> (raw)
In-Reply-To: <DCMW6H0VJ9AP.1XWI1RI9YWO9H@kernel.org>

On Sun Sep 7, 2025 at 11:39 PM CEST, Danilo Krummrich wrote:
> On Sun Sep 7, 2025 at 11:06 PM CEST, Benno Lossin wrote:
>> On Sun Sep 7, 2025 at 7:29 PM CEST, Danilo Krummrich wrote:
>> I have some ideas of changing the syntax to be more closure-esque:
>>
>>     init!(|this| -> Result<MyStruct, Error> {
>>         let x = 42;
>>         MyStruct {
>>             x,
>>         }
>>     })
>>
>> There we could add another parameter, that would then serve this
>> purpose. We should also probably rename `this` to `slot` & then use
>> `this` for the initialized version.
>
> I think that's a pretty good idea, but the part that I think is a little bit
> confusing remains: `this` will need to have different fields depending on where
> it's accessed.

Yeah (that's also the main issue with the macro implementation).

>> But as I said before, implementing the `this` thing from a macro
>> perspective is rather difficult (I have two ideas on how to do it and
>> both are bad...).
>>
>>> But as you say, that sounds tricky to implement and is probably not very
>>> intuitive either. I'd rather say keep it as it is, if we don't want something
>>> like the `let b <- b` syntax I proposed for formatting reasons.
>>
>> I don't feel like that's conveying the correct thing, it looks as if you
>> are only declaring a local variable.
>
> Yeah, it's not great, but given that it's a custom syntax it also does not
> create wrong expectations I'd say.

I'd say it looks like combining the `<-` operation already used by the
`init!` macro & a `let` binding. Thus introducing a local variable
that's (pin) initialized in-place. Not a field of the current struct.

> Anyways, I'm fine with either. For now we probably want to land the version as
> it is and revisit once you settle on the syntax rework you mentioned above.

I actually came up with a third option that looks best IMO:

    init!(MyStruct {
        x: 42,
        #[with_binding]
        y: 24,
        z: *y,
    })

The `#[with_binding]` attribute makes the macro generate a variable `y`.
`x` & `z` don't give access to their value. (we of course should come up
with a better name).

Any thoughts?

---
Cheers,
Benno

  reply	other threads:[~2025-09-07 22:51 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-05 14:00 [PATCH] rust: pin-init: add references to previously initialized fields Benno Lossin
2025-09-05 17:18 ` Benno Lossin
2025-09-05 17:44   ` Boqun Feng
2025-09-06 10:52     ` Danilo Krummrich
2025-09-07  1:57       ` Boqun Feng
2025-09-07  2:07         ` Boqun Feng
2025-09-07  8:41           ` Benno Lossin
2025-09-07 17:29             ` Danilo Krummrich
2025-09-07 21:06               ` Benno Lossin
2025-09-07 21:39                 ` Danilo Krummrich
2025-09-07 22:51                   ` Benno Lossin [this message]
2025-09-07 23:33                     ` Danilo Krummrich
2025-09-08  2:08                       ` Boqun Feng
2025-09-08  8:27                         ` Benno Lossin
2025-09-08  8:57                           ` Danilo Krummrich
2025-09-08 19:38                             ` Boqun Feng
2025-09-08 20:31                               ` Danilo Krummrich
2025-09-10 10:12                               ` Benno Lossin
2025-09-05 17:21 ` Boqun Feng
2025-09-05 18:38   ` Danilo Krummrich
2025-09-06 14:23 ` kernel test robot
2025-09-11 21:35 ` Benno Lossin
2025-12-03 22:05 ` Janne Grunau
2025-12-06  8:23   ` Benno Lossin
2025-12-06 17:02     ` Janne Grunau
2026-01-11 17:06       ` Benno Lossin
2026-02-27 15:02         ` Benno Lossin

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=DCMXPGXDXHYT.D9VJ5QBMAVPN@kernel.org \
    --to=lossin@kernel.org \
    --cc=a.hindborg@kernel.org \
    --cc=alex.gaynor@gmail.com \
    --cc=aliceryhl@google.com \
    --cc=bhelgaas@google.com \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=dakr@kernel.org \
    --cc=gary@garyguo.net \
    --cc=gregkh@linuxfoundation.org \
    --cc=kurti@invicto.ai \
    --cc=kwilczynski@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=me@kloenk.dev \
    --cc=ojeda@kernel.org \
    --cc=rafael@kernel.org \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=tmgross@umich.edu \
    /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.