> 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.