Date:        Tue, 05 Sep 2023 22:32:39 +0200
    From:        Dragan Simic <dsi...@manjaro.org>
    Message-ID:  <7cfed11b50d35cbfaaa647c1fcd39...@manjaro.org>

  | Are there any official explanations why is the invalidation actually 
  | happening now?

It was proposed because of a desire to keep the formats for printf(1)
and printf(3) the same (they're not really anyway, but they generally
don't actually conflict currently).

No invalidation would be happening now, merely a note in the coming standard
that the %b in printf(1) would (might) be removed in a later version of
the standard - so implementations have time to implement something to
replace it, and applications to stop using %b in printf(1).   The next
version of the standard isn't likely for at least another decade (the
coming one isn't finished yet, and that's not the next that counts here,
and later issues that are merely corrections (TCs) don't count either).
[As a reference for timelines, the current POSIX standard is from 2008,
though a couple of TCs have followed it - that's 15 years already
between versions.]

However, my "read of the room" at the minute is that this simply won't
happen, and printf(1) %b will remain as it is, and not be removed any
time soon (or probably, ever).   If printf(1) ever really needs a method
to output in binary, some other mechanism is likely to be found - most
likely one which gives a choice of output bases, not just base 2.

There's no current harm implementing %#s as an alias for %b - but I see
no point in anyone using it, it will certainly be far less portable than
%b for a LONG time.   There's also no guarantee that the C people might not
find a use in printf(3) for %#s (currently the # there has no meaning) and
entirely possible that whatever that use is, if it happens, might be more
useful for printf(1) to follow, than having it mean what %b currently
means - so going that route really is not a safe long term choice (it
would be a gamble).

kre


Reply via email to