rust-for-linux.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
To: Andreas Hindborg <nmi@metaspace.dk>
Cc: Alexey Dobriyan <adobriyan@gmail.com>,
	Benno Lossin <benno.lossin@proton.me>,
	Jens Axboe <axboe@kernel.dk>,
	Andreas Hindborg <a.hindborg@samsung.com>,
	Boqun Feng <boqun.feng@gmail.com>,
	linux-block@vger.kernel.org, rust-for-linux@vger.kernel.org
Subject: Re: [PATCH RESEND] block, rust: simplify validate_block_size() function
Date: Tue, 3 Sep 2024 12:00:05 -0700	[thread overview]
Message-ID: <Ztdctd0mbsJOBtJV@google.com> (raw)
In-Reply-To: <878qwaxtsd.fsf@metaspace.dk>

Hi Andreas,

On Mon, Sep 02, 2024 at 09:57:17AM +0000, Andreas Hindborg wrote:
> 
> Hi Alexy,
> 
> Thanks for your patch. I think I understand why you would suggest the
> change, with you strong C background. I would prefer that we do not
> apply this change, see below.
> 
> Alexey Dobriyan <adobriyan@gmail.com> writes:
> 
> > On Sat, Aug 31, 2024 at 08:39:45PM +0000, Benno Lossin wrote:
> >> On 31.08.24 22:15, Alexey Dobriyan wrote:
> >> > Using range and contains() method is just fancy shmancy way of writing
> >> 
> >> This language doesn't fit into a commit message. Please give a technical
> >> reason to change this.
> >
> > Oh come on!
> 
> Could you elaborate?
> 
> >
> >> > two comparisons. Using range doesn't prevent any bugs here because
> >> > typing "=" in range can be forgotten just as easily as in "<=" operator.
> >> 
> >> I don't think that using traditional comparisons is an improvement.
> >
> > They are an improvement, or rather contains() on integers is of dubious
> > value.
> 
> I would disagree. To me, and probably to many people who are experienced
> in Rust code, the range.contains() formulation is much more clear.

If you want to keep dividing into Rust-land and C-land I'm afraid you
will have 2 islands that do not talk to each other. I really want to be
able to parse the things quickly and not constantly think if my Rust is
idiomatic enough or I could write the code in a more idiomatic way with
something brand new that just got off the nightly list and moved into
stable.

> 
> > First, coding style mandates that there are no whitespace on both sides
> > of "..". This merges all characters into one Perl-like line noise.
> 
> I don't think it looks like noise or Perl. But I am not that experienced
> in Perl 🤷
> 
> What code style are you referring to? We use `rustfmt` default settings
> as code style, although I am not sure if that is written down anywhere.
> 
> > Second, when writing C I've a habit of writing comparisons like numeric
> > line in school which goes from left to right:
> 
> But this is not C. In Rust we have other options.
> 
> >
> > 	512 ... size .. PAGE_SIZE   ------> infinity
> >
> > See?
> > Now it is easy to insert comparisons:
> >
> > 	512 <= size <= PAGE_SIZE
> >
> > Of course in C the middle variable must be duplicated but so what?
> >
> > How hard is to parse this?
> >
> > 	512 <= size && size <= PAGE_SIZE
> >
> >
> > And thirdly, to a C/C++ dev, passing u32 by reference instead of by
> > value to a function which obviously doesn't mutate it screams WHAT???
> 
> It might look a little funny, but in general lookups take references to
> the key you are searching for. It makes sense for a larger set of types.
> In this particular case, I don't think codegen is any different due to
> the reference.
> 
> >
> >> When
> >> using `contains`, both of the bounds are visible with one look.
> >
> > Yes, they are within 4 characters of each other 2 of which are
> > whitespace.
> 
> I like whitespace. I think it helps make the code more readable.
> 
> 
> > This is what this patch is all about: contains() for integers?
> > I can understand contains() instead of strstr() but for integers?
> 
> To me it makes sense to check if a number is in a range with `contains`.
> I appreciate that it might not make sense to you, since it is not an
> option in C.

I am sure we could come up with something like:

	if (!contains(MAKE_RANGE_INCL(512, 4096), size))
		...

but even if something possible it does not mean it needs to be done.

> 
> >
> >> When
> >> using two comparisons, you have to first parse that they compare the
> >> same variable and then look at the bounds.
> >
> > Yes but now you have to parse () and .. and &.
> 
> Reading Rust takes a bit of practice. Just like reading C takes some
> practice to people who have not done it before.
> 
> >
> >> > Also delete few comments of "increment i by 1" variety.
> >> 
> >> As Miguel already said, these are part of the documentation. Do not
> >> remove them.
> >
> > Kernel has its fair share of 1:1 kernel-doc comments which contain
> > exactly zero useful information because everything is in function
> > signature already.
> 
> The comment is useful to a person browsing the documentation in the HTML
> format. It is available here [1] if you want to have a look.

This is a private function and an implementation detail. Why does it
need to be exposed in documentation at all?

Thanks.

-- 
Dmitry

  reply	other threads:[~2024-09-03 19:00 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-02  9:57 [PATCH RESEND] block, rust: simplify validate_block_size() function Andreas Hindborg
2024-09-03 19:00 ` Dmitry Torokhov [this message]
2024-09-03 19:30   ` Miguel Ojeda
2024-09-03 19:47     ` Dmitry Torokhov
2024-09-03 20:24       ` Benno Lossin
2024-09-03 20:31       ` Miguel Ojeda
  -- strict thread matches above, loose matches on Subject: below --
2024-08-31 20:15 Alexey Dobriyan
2024-08-31 20:39 ` Benno Lossin
2024-09-01 19:56   ` Alexey Dobriyan
2024-09-02  8:18     ` 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=Ztdctd0mbsJOBtJV@google.com \
    --to=dmitry.torokhov@gmail.com \
    --cc=a.hindborg@samsung.com \
    --cc=adobriyan@gmail.com \
    --cc=axboe@kernel.dk \
    --cc=benno.lossin@proton.me \
    --cc=boqun.feng@gmail.com \
    --cc=linux-block@vger.kernel.org \
    --cc=nmi@metaspace.dk \
    --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;
as well as URLs for NNTP newsgroup(s).