[tz] [PROPOSED] Simplify zdump average-taking
Paul Eggert
eggert at cs.ucla.edu
Thu Dec 1 19:58:49 UTC 2022
On 2022-12-01 01:27, John Hawkinson wrote:
> I don't think our test coverage is strong enough to ensure that these kinds of changes do not introduce problems.
Yes, that goes without saying, for almost any project, as testing
doesn't 100% guarantee correctness.
The idea isn't to go out and use every C99 feature just because we can.
It's to improve code quality by not insisting on portability to C89. And
these improvements need not be limited to new code; they can also apply
to existing code.
This is not a new thing. We did something similar in 2012 when we
started assuming C89 or later. For example, this patch:
https://github.com/eggert/tz/commit/400ecf36bb0b73f6390f9641e6cb8bbfb91a5cfd
changed tzcode to use function prototypes instead of K&R style function
declarations. If the policy had been to not refactor unless we could
guarantee it wouldn't introduce problems, then that patch would not have
been applied in 2012, since the old code ran just fine on C99 and C11
platforms. However, the patch was a win because C89 function prototypes
have important technical advantages over K&R style. Although there was
some immediate pain due to this conversion, in the not-so-long run it
was a win. (It'll be an even bigger win once C23 becomes popular, as C23
outlaws K&R function declarations.)
We'll have similar opportunities once we start assuming C99. We can
decide which C99 features to use on a case-by-case basis. We shouldn't
use every possible C99 feature we can, only the ones where the long-term
benefit is arguably worth the short-term cost.
For example, tzcode should not use C99's variable-length arrays because
they're not that portable in practice. (They were so controversial that
they even became optional in later C standards, so we couldn't use them
anyway.)
In contrast, the C99 feature of declarations after statements can help
code readability significantly, and if someone (probably me) wants to
take the time to convert existing code to use this feature, that sounds
like a win.
And there's quite a bit of backward compatibility code (e.g., our own
implementation of snprintf) that could be removed, as in practice nobody
uses or tests it any more and it's simply a maintenance burden. I
wouldn't object to removing that code, quite the contrary.
I understand that doing all this will place a burden on reviewers, and
will make spelunking harder. But that's OK if it lessens the overall
maintenance burden in the long run.
More information about the tz
mailing list