> GCC ChangeLogs don't record the purpose of the change. They say what changed,
> but not why.

That depends on how you define "purpose".  Let's take a random entry,
from a 1999 change of mine:

        * expr.c (expand_expr): If ignoring reference operations,
        just expand the operands.
        (expand_expr, case COMPONENT_REF): Refine test for when need
        to use bitfield operations or pointer punning.

This indeed doesn't say why the change was made (though later policy
did tend to at least suggest adding PR numbers), but does say, in some
detail, what was changed.  You can't get that informtion from the current
state of the code.  You could indeed derive it from the diff itself, but
that's work and having a short summary is very helpful.

In other words, there are three levels here:

(1) What the code currently does
(2) How we changed the code from what it did to what it does
(3) Why we made the change

#1 is always in the code and #2 is always in the ChangeLog.  #3
*should* be in the ChangeLog, but isn't always.  However #2 is very
useful information.

This is especially valuable because it gives the intent of the change in
the case where an error was made (say, some part of the change was missed).
It's much harder to figure out intent from even the diff and certainly
impossible from the code itself.

Reply via email to