Sutter's ISO C++ Trip Report - The best compliment is when someone else steals your ideas....
John Carter
john.carter at taitradio.com
Thu Jul 5 22:05:44 UTC 2018
On Tuesday, 3 July 2018 at 04:54:46 UTC, Walter Bright wrote:
> On 7/2/2018 7:53 PM, John Carter wrote:
>>> In general all pre/post/assert-condition violations) cause a
>>> corrupted state that cannot be recovered from
>>> programmatically, and so they should never be reported to the
>>> calling code as exceptions or error codes that code could
>>> somehow handle.
>>
>> Ah, that's a really nice statement.
>
> So, I have finally convinced the C++ world about that! Now if I
> can only convince the D world :-)
Oh, I'm convinced.
At work here I have emerged from a long, dark, debate on the
subject within the team.
The ultimately solution was to realize there are actually TWO
facilities with TWO entirely different purposes that have been
overloaded with the same name.
Alas, the word "assert" now is inextricably mired in this
confusion.
Half our team used asserts to mean "This mustn't _ever_ happen in
unit tests (unless we set up a specific test case for that), and
it will never happen if the incoming signal is standards
compliant, but it may happen (due to RF noise, and/or competitor
violating the standard and/or adding in proprietary stuff into
the data and/or we're being attacked) so we _must_ fall through
the assert at run time, and handle that case somehow, but
preferably make a note that something unexpected happened."
The other half of the team meant, "If the expression is false, it
means the code on this line or on the execution path prior to it
is definitely defective and must be fixed immediately.
And there is absolutely no hope the code after it will work, and
continuing on will make the system flaky and unreliable, and the
only path back to reliable function is a reset.
All code after this line may explicitly assume, and depend on, the
expression being true.
Any attempt to handle the possibility of the expression is false
is buggy, useless and probably will be removed by the optimizer.
Any urge to handle the possibility of the expression being false
after the assert, should be replaced by the inclination to review
the code on the execution path prior to the assert, to ensure
that the expression will always be true."
Alas, both sides were using the same word "assert" to mean these
different things, resulting in conversations that went around and
around in meaningless circles.
We have resolved the debate by identifying these two different
meanings, and given the facilities implementing them two
different names and documenting the difference in meaning and
intent.
More information about the Digitalmars-d
mailing list