[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: pic anomalies

From: Ingo Schwarze
Subject: Re: pic anomalies
Date: Wed, 1 Jan 2020 18:44:16 +0100
User-agent: Mutt/1.12.2 (2019-09-21)

Hi Ralph,

Ralph Corderoy wrote on Mon, Dec 30, 2019 at 06:31:34PM +0000:
> Ingo Schwarze wrote:

>>  * line 1896, while (*form):
>>    Testing char as if it were boolean seems dubious style to me;
>>    "while (*form != '\0')" would seem clearer because it makes the
>>    data type obvious on first sight.

> It's idiomatic in C to write just `foo' to test it against its `zero
> value' whether it's an int, pointer, etc.

You are right, coding styles differ on that.  I noticed the style
to be inconsistent in this very function and gave a short explanation
why i suggested to stick to one of the styles already in use.
I don't feel strongly about it even though OpenBSD does consistently
encourage pointer == NULL and character == '\0' and integer == 0
everywhere and reserves !integer to int variables that are supposed
to represent only boolean values.

Let's see what Colin will do.  :-)

> If I've a `bool b', I don't write `b != false' to hint that b is a bool.

Of course not.  I think all coding styles will agree that "if (b)"
is fine if b is boolean.

> Getting back on topic, are we sure we want to deviate from GNU pic's
> current behaviour without checking historical norms of other pics?
>     $ printf '%s\n' \
>       .PS 'print sprintf("%.17g %.0f% % %%", 3.14, 42, 99)' .PE |
>     > pic >/dev/null
>     3.1400000000000001 42% % %%
> Though that may seem odd to our modern C-standardised eyes, it's
> understandable in that if it isn't a valid %f, etc., format specifier
> then it's a literal percent sign.

   $ printf '%s\n' \                                             
    .PS 'print sprintf("%.17g %.0f% % %%", 3.14, 42, 99)' .PE | 
    /usr/local/heirloom-doctools/bin/pic | grep -F 3.14         
  3.1400000000000001 42% %

   $ printf '%s\n' \                                             
     .PS 'print sprintf("%.17g %.0f% % %%", 3.14, 42, 99)' .PE | 
     /usr/local/plan9/bin/pic | grep -F 3.14                     
  3.1400000000000001 42% %

which both agree with what we currently have in git HEAD:

   $ printf '%s\n' \                                             
     .PS 'print sprintf("%.17g %.0f% % %%", 3.14, 42, 99)' .PE | 
     /usr/local/bin/pic | grep -F 3.14                           
  3.1400000000000001 42% %

Usually, both Heirloom doctools and Plan9 respect historical behaviour
quite well, so i don't feel like digging for historical implementations
right now.

So i don't think the change i committed goes against historical practice
but that it rather fixed a genuine groff bug.

> That example also happens to show GNU pic gives no warning of unused
> arguments.

That's a separate matter...  As i said in another posting, i'm quite
sure doing a code review across the groff tree would reveal large
amounts of aspects that can be improved.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]