> On 8 Apr 2021, at 12:40, Julien Grall <jul...@xen.org> wrote:
> 
> Hi Luca,
> 
> On 08/04/2021 12:02, Luca Fancellu wrote:
>>> On 7 Apr 2021, at 22:26, Stefano Stabellini <sstabell...@kernel.org> wrote:
>>> 
>>> On Wed, 7 Apr 2021, Jan Beulich wrote:
>>>> On 07.04.2021 10:42, Luca Fancellu wrote:
>>>>> Just to be sure that we are in the same page, are you suggesting to 
>>>>> modify the name
>>>>> In this way?
>>>>> 
>>>>> struct gnttab_cache_flush {
>>>>> -    union {
>>>>> +    union xen_gnttab_cache_flush_a {
>>>>>        uint64_t dev_bus_addr;
>>>>>        grant_ref_t ref;
>>>>>    } a;
>>>>> 
>>>>> Following this kind of pattern: xen_<upper struct name>_<member name> ?
>>>> 
>>>> While in general I would be fine with this scheme, for field names like
>>>> "a" or "u" it doesn't fit well imo.
>>> 
>>> "a" is a bad name anyway, even for the member. We can take the
>>> opportunity to find a better name. Almost anything would be better than
>>> "a". Maybe "refaddr"?
>>> 
>>> 
>>>> I'm also unconvinced this would be
>>>> scalable to the case where there's further struct/union nesting.
>>> 
>>> How many of these instances of multilevel nesting do we have? Luca might
>>> know. Probably not many? They could be special-cased.
>> There are not many multilevel nesting instances of anonymous struct/union 
>> and the maximum level of nesting I found in the public headers is 2:
>> union {
>>      union/struct {
>>              …
>>      } <name>
>> } <name>
>> I also see that in the majority of cases the unions have not meaningful 
>> names like “a” or “u” as member name, instead struct names are fine,
>> It could be fine to keep the meaningful name the same for the struct type 
>> name and use the pattern for the non-meaningful ones as long
>> as the names doesn’t create compilation errors?
>> Example:
>> struct upper_level {
>>      union {
>>              struct {
>>              
>>              } meaningful_name1;
>>              struct {
>>              
>>              } meaningful_name2;
>>      } u;
>> };
>> becomes:
>> struct upper_level {
>>      union upper_level_u {
>>              struct meaningful_name1 {
>>              
>>              } meaningful_name1;
>>              struct meaningful_name2 {
>>              
>>              } meaningful_name2;
>>      } u;
>> };
> 
> If I understand correctly your proposal, the name of the structure would be 
> the name of the field. The name of the fields are usually pretty generic so 
> you will likely end up to redefine the structure name.
> 
> Unless we want to provide random name, the only safe naming would be to 
> define the structure as upper_level_u_meaningful_name{1, 2}. But, this is 
> going to be pretty awful to read.
> 
> But I am still a bit puzzled by the fact doxygen is not capable to deal with 
> anynomous/unamed union. How do other projects deal with them?
> 
>> Doing this will help a lot the documentation side because the html page will 
>> show the "struct upper_level" with inside the “union upper_level_u" and 
>> inside again
>> the two struct “meaningful_name1" and “meaningful_name2", and from the point 
>> of view of the developer it can tell her/him exactly the name of the member 
>> to
>> access when writing code (apart from the upper_level_u that can be accessed 
>> by u, but we can’t clearly change it).
> 
> I don't quite understand the last point. Wouldn't the developper see the 
> field name? So how is it going to be different from seeing the structure name?

The developer, that is using the documentation generated with sphinx+doxygen, 
will see the structure name and not the field name because this is the way
sphinx+doxygen is rendering the code structures. You can see it in the 
generated documentation using this serie.

> 
>> If this sounds difficult to understand when reading, please generate the 
>> documentation and have a look on the page in one side and the source code in 
>> another.
> 
> Just to be clear, do you mean understanding what you wrote or a developper 
> trying to understand the code?

I meant understanding what I wrote, because I know it’s difficult to describe 
the concept without visualising the html page, it would have been much easier 
to attach
an image to clarify.

> 
> Cheers,
> 
> -- 
> Julien Grall


Reply via email to