[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200818051717.GA3134537@gmail.com>
Date: Tue, 18 Aug 2020 07:17:17 +0200
From: Ingo Molnar <mingo@...nel.org>
To: Linus Torvalds <torvalds@...ux-foundation.org>
Cc: Pavel Machek <pavel@....cz>,
"Eric W. Biederman" <ebiederm@...ssion.com>,
Al Viro <viro@...iv.linux.org.uk>,
Michael Witten <mfwitten@...il.com>,
Masahiro Yamada <masahiroy@...nel.org>,
Michal Marek <michal.lkml@...kovi.net>,
Cong Wang <xiyou.wangcong@...il.com>,
Johannes Weiner <hannes@...xchg.org>,
Sam Ravnborg <sam@...nborg.org>,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
Linux Kbuild mailing list <linux-kbuild@...r.kernel.org>,
John Levon <john.levon@...ent.com>,
John Levon <levon@...ementarian.org>,
Andrew Morton <akpm@...ux-foundation.org>
Subject: Re: [PATCH] Makefile: Yes. Finally remove
'-Wdeclaration-after-statement'
* Linus Torvalds <torvalds@...ux-foundation.org> wrote:
> On Mon, Aug 17, 2020 at 3:09 PM Pavel Machek <pavel@....cz> wrote:
> >
> > Submitter believes "wild variable placement" can help with
> > #ifdefs.. and that may be actually good tradeoff.
>
> I agree that it can help in some cases.
>
> But it can also make it really hard to find the variable declarations
> in other cases. I've seen a lot of code that ends up actively
> declaring the variable close to where it's used (because people find
> that to be locally more legible) and then it just means that people
> who arent' familiar with the code have a much harder time finding it.
>
> I'd instead try to discourage people from using #ifdef's inside code.
I'm a big fan of -Wdeclaration-after-statement and I think C++ style
mixed variables/statements code has several disadvantages:
- One advantage of -Wdeclaration-after-statement is that it can detect
mismerges that can happen with the 'patch' tool when it applies a
patch with fuzz.
- Also, enforcing -Wdeclaration-after-statement means we have the nice
symmetry that local variable declarations are always at the
beginning of curly brace blocks, which includes function
definitions. This IMO is a very helpful visual clue that allows the
quick reading of kernel code.
- A third advantage is that the grouping of local variables at the
beginning of curly brace blocks encourages smaller, better
structured functions: a large function would look automatically ugly
due to the many local variables crammed at the beginning of it.
So the gentle code structure message is: you can declare new local
variables in a loop construct or branch, at the cost of losing one
level of indentation. If it gets too deep, you are encouraged to split
your logic up better with helper functions. The kind of run-on
mega-functions that C++ style mixed variables often allow looks
*automatically* uglier under -Wdeclaration-after-statement and quickly
breaks simple kernel style rules such as col80 or indentation level
depth or the too high visual complexity of variable definition lines.
Basically the removal of -Wdeclaration-after-statement removes a
helpful symmetry & allows the addition of random noise to our code
base, with very little benefits offered. I'd be sad to see it go.
Thanks,
Ingo
Powered by blists - more mailing lists