[llvm-dev] RFC: changing variable naming rules in LLVM codebase

Rui Ueyama via llvm-dev llvm-dev at lists.llvm.org
Mon Jul 15 23:01:42 PDT 2019


On Sat, Jul 13, 2019 at 4:13 AM David Blaikie via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

>
>
> On Fri, Jul 12, 2019 at 10:31 AM David Greene <dag at cray.com> wrote:
>
>> David Blaikie <dblaikie at gmail.com> writes:
>>
>> > Why would enums be less elegant than named boolean constants as you've
>> shown here?
>>
>> Casting, mainly.  If the parameters were also changed to an enum type
>> that would be fine too, probably better than inline variables even.
>>
>
> Oh, yeah, I meant changing the parameter type to a custom enum - forcing
> users to have to use the more legible enum names rather than the
> inscrutible boolean constants.
>

FWIW, I found that clang-tidy can fix up /*foo=*/-style comments. I ran the
tool and submitted it as https://reviews.llvm.org/rL366177.


>
>>
>> >
>> http://jlebar.com/2011/12/16/Boolean_parameters_to_API_functions_considered_harmful..html
>> > (at a random googling for "bool parameters considered harmful")
>> > reasonably suggests splitting functions, but that's not always
>> > practical - often lots of common code, etc (but writing wrappers isn't
>> > too bad in that case either - two different functions with different
>> > names that both call the common one with the boolean parameter - so
>> > it's not hard to trace from the call to the implementation to know
>> > what that bool does, and is obvious by these two side-by-side
>> > differently named functions) and the comments on that article discuss
>> > enums as well.
>>
>> I like the two functions idea.  Of course scaling becomes a problem with
>> multiple Boolean parameters, as pointed out in the comments.
>>
>>                            -David
>>
>> > On Fri, Jul 12, 2019 at 9:04 AM David Greene via llvm-dev <
>> llvm-dev at lists.llvm.org> wrote:
>> >
>> >  Rui Ueyama via llvm-dev <llvm-dev at lists.llvm.org> writes:
>> >
>> >  >  - LLVM's `/*foo=*/`-style comment to annotate function arguments
>> need
>> >  >  to be handled automatically to make the tool scalable. So is the
>> >  >  doxygen @parameter.
>> >
>> >  This is a bit of a side note, but in my own work I've more recently
>> >  tried to move from this style:
>> >
>> >  foo.h
>> >
>> >  int foo(int a, bool doSomething);
>> >
>> >  foo.cpp
>> >
>> >  x = foo(a, /*doSomething=*/true);
>> >  y = foo(a, /*doSomething=*/false);
>> >
>> >  to something like:
>> >
>> >  foo.h
>> >
>> >  inline constexpr DoDoSomething   = true;
>> >  inline constexpr DontDoSomething = false;
>> >
>> >  int foo(int a, bool doSomething);
>> >
>> >  foo.cpp
>> >
>> >  x = foo(a, DoDoSomething);
>> >  y = foo(a, DontDoSomething);
>> >
>> >  One doesn't need the inline variable (and thus not C++17) if one uses
>> >  macros or enums or something else less elegant.
>> >
>> >  This kind of thing is slightly more cumbersome to do if the parameter
>> >  takes a wide range of values, but the most common place I see the
>> former
>> >  style is for Boolean arguments.  Nevertheless, the wide-ranging case
>> can
>> >  be handled:
>> >
>> >  bar.h
>> >
>> >  inline int Threshold(int x) { return x; }
>> >
>> >  int bar(int a, int threshold);
>> >
>> >  bar.cpp
>> >
>> >  x = bar(a, Threshold(1000));
>> >  y = bar(a, Threshold(100));
>> >
>> >  With either technique the "named values" could be wrapped in their own
>> >  namespaces to avoid collisions.
>> >
>> >  I wonder if there is any appetite for doing something similar in LLVM.
>> >
>> >                         -David
>> >  _______________________________________________
>> >  LLVM Developers mailing list
>> >  llvm-dev at lists.llvm.org
>> >  https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190716/a378c6e4/attachment.html>


More information about the llvm-dev mailing list