Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 5 Mar 2013 07:25:54 -0800
From:      mdf@FreeBSD.org
To:        Bruce Evans <brde@optusnet.com.au>
Cc:        attilio@freebsd.org, Davide Italiano <davide@freebsd.org>, src-committers@freebsd.org, svn-src-projects@freebsd.org, John Baldwin <jhb@freebsd.org>
Subject:   Re: svn commit: r247710 - projects/calloutng/sys/kern
Message-ID:  <CAMBSHm_AUjjMgzoVoMxM=awudKekbEHmzmHda%2BBCX14Dgqtjag@mail.gmail.com>
In-Reply-To: <20130305201211.M902@besplex.bde.org>
References:  <201303031339.r23DdsBU047737@svn.freebsd.org> <201303041521.06557.jhb@freebsd.org> <CAJ-FndBvLD_fU1ZZ3cGNtChfdtXyuBRt4Z_ci8daS08ZYdOKzg@mail.gmail.com> <201303041620.52100.jhb@freebsd.org> <20130305201211.M902@besplex.bde.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Mar 5, 2013 at 1:43 AM, Bruce Evans <brde@optusnet.com.au> wrote:
> Why?  There is no existing practice for [bool] in the kernel.  There is some
> in the Linux kernel :-).

IMO this is the problem with style always conforming to existing code.
 There is no way to introduce new concepts.

bool may be slightly pessimistic from the standpoint of compiler
forcing 0/1.  However, since C is weakly typed, we "should" all have
been writing our control statements that take a boolean to evaluate to
a boolean argument, as implied by the style guideline that '!' is only
applied to boolean statements.  That style recommendation is often not
followed; e.g. there's plenty of code like if (!error) (I found 762
instances in sys/).

To unpack what I said, without a bool type if (error) was style-weird
since it wasn't a boolean used in a boolean expression, but C was
"clever" and decided how to do that, instead of requiring the boolean
expression if (error != 0).  style(9) had an example of a proper
boolean but that form is used less frequently than the shorter C idiom
of if (error).  (17942 instances of if (error) versus 3168 instances
of the more style(9)-correct if (error != 0)).

Types are there to document things for humans, with a side effect of
documenting things for the hardware.  Efficiency is important but
rarely king; for example no one went around changing loop counters
form int to long for 64-bit hardware even though some operations on
long are faster since they don't need to sign-extend (and possibly
some operations on long are slower since on x86 the instruction may be
more bits, and icache is so important.  But I doubt the experiment was
even done).

bool serves the purpose of documenting exactly that something is
true/false and no other value.  bool++ was a lazy way of writing bool
= true, and suffered from a theoretical problem of overflow when bools
were ints and not a language-defined type with explicit semantics.

Anyways, my long-winded point was that the C language has evolved.  If
our highest style guide is that we preserve existing style, we will
never use new language features since they never used to exist.  So I
don't think that the absence of any code examples is a reason to
forbid code.

Cheers,
matthew



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAMBSHm_AUjjMgzoVoMxM=awudKekbEHmzmHda%2BBCX14Dgqtjag>