[cfe-dev] RFC: clang-tidy readability check to reduce clutter: unnecessary use of auto and ->

Fabio Fracassi via cfe-dev cfe-dev at lists.llvm.org
Sun Nov 8 02:58:20 PST 2015


On 07/11/2015 18:18, Richard via cfe-dev wrote:
> [Please reply *only* to the list and do not include my email directly
> in the To: or Cc: of your reply; otherwise I will not see your reply.
> Thanks.]
I thought I did, I explicitly deleted your address from the to field, ...
> In article <563DC703.4000507 at gmx.net>,
>      Fabio Fracassi via cfe-dev <cfe-dev at lists.llvm.org> writes:
>
>> Hi,
>>
>> On 06/11/2015 19:08, Richard via cfe-dev wrote:
>> [...]
>>> N2541 <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm>
>>> introduced auto and the trailing return type syntax.
>>>
>>> Now people are using auto and -> on function signatures where the
>>> return type is stated explicitly anyway.  This results in code like:
>>>
>>> auto main() -> int
>>> {
>>>     return 0;
>>> }
>> so?
>>
>>> Srsly?  Is this really improving anything over
>>>
>>> int main()
>>> {
>>>     return 0;
>>> }
>> no, but it is not worse either.
>>
>>> To me this is introducing unnecessary clutter
>> it is more uniform,
> It *is* more clutter in the sense that it introduces unnecessary tokens.
 From this perspective you are right in calling it clutter.

> [...]
> design principle) return void.  Writing 'auto f() -> void;' obscures
> that this is a command until I get to the end of the declaration.  In
> fact writing 'auto' puts me immediately in the mindset of "this
> function is going to return a value" only to make me change my mind
> when I reach the end and learn "oh, the value is void."
Actually for exactly this reason I make an "exception" when using void, 
because void is special.
And since void, like auto has exactly four characters it still fits 
nicely into the uniformity:

auto f(int) -> bool;      // reads: I have a retun value ... and it is bool
auto f() { return ...; }   // reads: I have a return value ... and it is 
whatever I return
void g();                        // reads: I have no return value

>> and for mathematically inclined people it is also
>> more natural.
> I didn't know you were appointed spokesman for all mathematically
> inclined people?
Sorry, this was not my intention. IMO the "naturalness" is there because 
the mathematical notation of a function is
f: param1_t, param2_t -> return_t
which is closer to
auto f(param1_t, param2_t) -> return_t
>> just because it is a new syntax it doesn't  make it more cluttered or
>> anything.
> To me, clutter is adding extra stuff in that's not necessary like
> (void) argument lists or gratuitous use of auto.
To me clutter is something that hinders readability without adding 
information.
I think this extra tokens help rather than hinder readability (even if 
it does not add information), so I objected to the negative connotation 
of "clutter"
>> Herb Sutter recommends this style in his Almost Always Auto article:
> I assume you are talking about this:
> <http://herbsutter.com/2013/08/12/gotw-94-solution-aaa-style-almost-always-auto/>
>
> That article is from 2013 and in subsequent talks on YouTube I've
> seen people comment that "whacking everything with an auto hammer"
> doesn't yield the benefits that were claimed at the time.  Furthermore,
> just because Herb Sutter likes a certain style doesn't mean that I do.
Sure, I just wanted to show that there are well reasoned people out 
there that think differently about this topic.

This is ultimately a stylistic issue, and thus a matter of taste, which 
is hard to discuss. There are (more or less good) reasons to use both 
styles, and you can find (more or less good) reasons against each.

> With clang-tidy we're not talking about the compiler creating a warning
> or error because you use a certain code construct.  clang-tidy is
> like clang-format.  You don't like LLVM code formatting conventions?
> Nothing's forcing you to use them.

I  wasn't aware that clang-tidy and clang-format were there to 
(exclusively) force llvms style, I was under the impression that they 
were general tools to clean up code bases to their individual styles.
I didn't want to make any comment to what style llvm should use, just 
that I would hope that clang-tidy would support (or at least be open to 
support if someone bothers to write a patch) both, so that it is more 
generally useful.

Sorry for the noise,
I do appreciate the great work you guys are doing on clang and the nice 
clang tools.

Best
Fabio




---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus




More information about the cfe-dev mailing list