* Thomas Gleixner <t...@linutronix.de> wrote:

> +Coding style notes
> +------------------
> +
> +Comment style
> +^^^^^^^^^^^^^
> +
> +Sentences in comments start with a uppercase letter.
> +
> +Single line comments::
> +
> +     /* This is a single line comment */
> +
> +Multi-line comments::
> +
> +     /*
> +      * This is a properly formatted
> +      * multi-line comment.
> +      *
> +      * Larger multi-line comments should be split into paragraphs.
> +      */
> +
> +No tail comments:
> +
> +  Please refrain from using tail comments. Tail comments disturb the
> +  reading flow in almost all contexts, but especially in code::
> +
> +     if (somecondition_is_true) /* Don't put a comment here */
> +             dostuff(); /* Neither here */
> +
> +     seed = MAGIC_CONSTANT; /* Nor here */
> +
> +  Use freestanding comments instead::
> +
> +     /* This condition is not obvious without a comment */
> +     if (somecondition_is_true) {
> +             /* This really needs to be documented */
> +             dostuff();
> +     }
> +
> +     /* This magic initialization needs a comment. Maybe not? */
> +     seed = MAGIC_CONSTANT;

Yeah, so I think a better way to visualize and explain the 'no tail 
comments' guideline in -tip is not these more complex code flows, but the 
totally simple linear flows of statements.

With tail comments the code looks like this:

        res = dostuff(); /* We explain something here. */

        seed = 1; /* Another explanation. */

        mod_timer(&our_object->our_timer, jiffies + OUR_INTERVAL); /* We like 
to talk */

        res = check_stuff(our_object); /* We explain something here. */
        if (res)
                return -EINVAL;

        interval = nontrivial_calculation(); /* Another explanation. */

        mod_timer(&our_object->our_timer, jiffies + interval); /* This doesn't 
race, because. */

... while with freestanding comments it's:

        /* We explain something here: */
        res = check_stuff(our_object);
        if (res)
                return -EINVAL;

        /* Another explanation: */
        interval = nontrivial_calculation();

        /* This doesn't race with init_our_stuff(), because: */
        mod_timer(&our_object->our_timer, jiffies + interval);

This comment placement style has several advantages:

  - Comments precede actual code - while in tail comments it's exactly
    the wrong way around.

  - We don't create over-long lines nor artificially short tail comments 
    just because we were trying to stay within the col80 limit with the 
    "this doesn't race" comment. The full-line comment was able to 
    explain that the race is with init_our_stuff().

  - Freestanding oneliner comments are much better aligned as well: note 
    how ever comment starts at the exact same column, making it very easy 
    to read (or not to read) these comments.

  - In short: predictable visual parsing rules and proper semantic 
    ordering of information is good, random joining of typographical 
    elements just to create marginally more compact source code is bad.

  - Just *look* at the tail comments example: it's a visually diffuse, 
    jumble of statements and misaligned comments with good structure.

Do you want me to send a delta patch, or an edited document?

Thanks,

        Ingo

Reply via email to