Subject: Re: CVS commit: src/sys/sys
To: Steven J. Dovich <dovich@lethe.tiac.net>
From: Dave Sainty <dave@dtsp.co.nz>
List: source-changes
Date: 01/04/2004 19:45:34
Dave Sainty writes:

> "Steven J. Dovich" writes:
> 
> > Hubert Feyrer wrote:
> > > On Sun, 4 Jan 2004, Matthias Scheler wrote:
> > > > Because it is broken by design if a header file doesn't include header
> > > > files it requires itself. And because this is a regression. The application
> > > 
> > > I'm with Matthias on this issue - IMHO every header should pull in all the
> > > things it needs.
> > 
> > And that coddles the lazy at the expense of compile time. Consider
> > the lexing costs for all the redundant including of required headers
> > which have already been included. That can amount to a measurable
> > difference in compile time, particularly when extended across the
> > entire NetBSD source tree.
> 
> From the GNU cpp(1) info node:  "Once-Only Include Files"

Or to prove the point :)

for i in `cd /usr/include; echo sys/*.h`; do echo "#include <$i>"; done >| x; /usr/bin/time sh -c "cpp x >/dev/null 2>&1"
        0.15 real         0.06 user         0.01 sys

ls -1S /usr/include/sys|head -1
syscallargs.h

echo "#include <sys/syscallargs.h>">|x; /usr/bin/time sh -c "cpp x >/dev/null 2>&1"
        0.02 real         0.00 user         0.00 sys

for i in {1..1000}; do echo "#include <sys/syscallargs.h>"; done >| x; /usr/bin/time sh -c "cpp x >/dev/null 2>&1"
        0.02 real         0.01 user         0.00 sys

.... including the same required header once or 1000 times incurs
negligible overhead (with our cpp).  Including unnecessary headers for
convenience will, as always, incur an overhead.

... but if it's required, then it's required.

Cheers,

Dave