From: Boqun Feng <boqun.feng@gmail.com>
To: Benno Lossin <benno.lossin@proton.me>
Cc: "Alice Ryhl" <aliceryhl@google.com>,
"Miguel Ojeda" <ojeda@kernel.org>, "Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org,
"Andreas Hindborg" <a.hindborg@kernel.org>
Subject: Re: [PATCH v4] rust: add global lock support
Date: Thu, 10 Oct 2024 16:06:32 -0700 [thread overview]
Message-ID: <Zwhd-Eu_1oB9CIYd@boqun-archlinux> (raw)
In-Reply-To: <3e7832f7-8806-41e0-8e36-6f178df2eaef@proton.me>
On Thu, Oct 10, 2024 at 10:21:41PM +0000, Benno Lossin wrote:
> On 10.10.24 18:33, Boqun Feng wrote:
> > On Thu, Oct 10, 2024 at 07:29:32AM -0700, Boqun Feng wrote:
> >> On Thu, Oct 10, 2024 at 03:58:07PM +0200, Alice Ryhl wrote:
> >>> On Thu, Oct 10, 2024 at 3:55 PM Boqun Feng <boqun.feng@gmail.com> wrote:
> >>>>
> >>>> On Thu, Oct 10, 2024 at 12:53:00PM +0200, Alice Ryhl wrote:
> >>>> [...]
> >>>>>>> +#[macro_export]
> >>>>>>> +macro_rules! global_lock {
> >>>>>>> + {
> >>>>>>> + $(#[$meta:meta])* $pub:vis static $name:ident: $kind:ident<$valuety:ty> = unsafe { uninit };
> >>>>>>> + value: $value:expr;
> >>>>>>
> >>>>>> I would find it more natural to use `=` instead of `:` here, since then
> >>>>>> it would read as a normal statement with the semicolon at the end.
> >>>>>> Another alternative would be to use `,` instead of `;`, but that doesn't
> >>>>>> work nicely with the static keyword above (although you could make the
> >>>>>> user write it in another {}, but that also isn't ideal...).
> >>>>>>
> >>>>>> Using `=` instead of `:` makes my editor put the correct amount of
> >>>>>> indentation there, `:` adds a lot of extra spaces.
> >>>>>
> >>>>> That seems sensible.
> >>>>>
> >>>>
> >>>> While we are at it, how about we make the syntax:
> >>>>
> >>>> global_lock!{
> >>>> static MY_LOCK: Mutex<u32> = unsafe { 0 };
> >>>> }
> >>>>
> >>>> or
> >>>>
> >>>> global_lock!{
> >>>> static MY_LOCK: Mutex<u32> = unsafe { uninit { 0 } };
> >>>> }
> >>>>
> >>>> ?
> >>>>
> >>>> i.e. instead of a "value" field, we put it in the "initialization
> >>>> expression". To me, this make it more clear that "value" is the
> >>>> initialized value protected by the lock. Thoughts?
> >>>
> >>> `uninit { 0 }` looks pretty terrible IMO. Can we come up with something better?
> >>>
> >>
> >
> > how about:
> >
> > global_lock!{
> > static MY_LOCK: Mutex<u32> = unsafe { data: 0 };
>
> I dislike this, since there is no `uninit` anywhere, but the mutex needs
> to be initialized.
>
> > }
> >
> > ?
> >
> > "data: " will make it clear that the value is not for the lock state.
> > "uninit" is dropped because the "unsafe" already requires the global
> > variable to be initialised first. Or "unsafe { uninit, data: 0 }" if you
> > want to keep the "uninit" part?
>
> That also looks weird to me...
>
> But I haven't come up with a good alternative
>
How about a "fake" MaybyUninit:
global_lock!{
static MY_LOCK: Mutex<u32> = unsafe { MaybeUninit::new(0).assume_init() };
}
?
I feel like we need to put the data in the initialization expression
because if we resolve the initialization issues and can skip the extra
init step, we pretty much want to use the macro like:
global_lock!{
static MY_LOCK: Mutex<u32> = { data: 0 };
// maybe even
// static MY_LOCK: Mutex<u32> = { 0 };
}
instead of
global_lock!{
static MY_LOCK: Mutex<u32> = init;
value = 0;
}
, right?
So we need to think about providing a smooth way for users to transfer.
Not just adjust the changes (which I believe is a good practice for
coccinelle), but also the conceptual model "oh now I don't need to
provide a 'value=' field?". Hence even though the above proposals may
look weird, but I think that's still better?
Regards,
Boqun
> ---
> Cheers,
> Benno
>
next prev parent reply other threads:[~2024-10-10 23:06 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-30 13:11 [PATCH v4] rust: add global lock support Alice Ryhl
2024-10-10 10:39 ` Benno Lossin
2024-10-10 10:53 ` Alice Ryhl
2024-10-10 13:55 ` Boqun Feng
2024-10-10 13:58 ` Alice Ryhl
2024-10-10 14:29 ` Boqun Feng
2024-10-10 16:33 ` Boqun Feng
2024-10-10 22:21 ` Benno Lossin
2024-10-10 23:06 ` Boqun Feng [this message]
2024-10-11 7:01 ` Benno Lossin
2024-10-11 22:43 ` Boqun Feng
2024-10-10 22:13 ` Benno Lossin
2024-10-10 14:01 ` Andreas Hindborg
2024-10-10 22:14 ` Benno Lossin
2024-10-11 14:57 ` Andreas Hindborg
2024-10-10 13:57 ` Andreas Hindborg
2024-10-10 14:01 ` Alice Ryhl
2024-10-10 14:08 ` 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=Zwhd-Eu_1oB9CIYd@boqun-archlinux \
--to=boqun.feng@gmail.com \
--cc=a.hindborg@kernel.org \
--cc=aliceryhl@google.com \
--cc=benno.lossin@proton.me \
--cc=bjorn3_gh@protonmail.com \
--cc=gary@garyguo.net \
--cc=linux-kernel@vger.kernel.org \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox