checkedint call removal
Walter Bright via Digitalmars-d
digitalmars-d at puremagic.com
Thu Jul 31 20:58:17 PDT 2014
On 7/31/2014 3:23 AM, Tobias Müller wrote:
> Walter Bright <newshound2 at digitalmars.com> wrote:
>> On 7/30/2014 10:16 PM, bearophile wrote:
>>> But you have redefined "assert" to mean a mix of assume and assert.
>>
>> I haven't redefined anything. It's always been that way. It's used that
>> way in C/C++ (see your Microsoft C++ link).
>
> Actually I cannot find anything in (the latest draft of) the C standard
> that would allow that. There's no mention of undefined behavior if an
> assertion is not met with NDEBUG defined. It's clearly defined what the
> macro should expnd to in that case.
Yes, you are correct about that. But I suspect that is an artifact of the C
standard, and its long history of compilers that did essentially no optimization
at all (my C compiler was the first DOS C compiler to do data flow analysis).
The C standard was written long after C was ubiquitous, and tended to simply
document what compilers did.
If you look at the Wikipedia article,
http://en.wikipedia.org/wiki/Assertion_(software_development)
you'll see a more high level view of what assert is all about, rather than a
worm's eye view the C standard takes. (It even uses C for its examples.) Up
until this thread, I've never encountered someone who thought differently about it.
You might also want to consider Hoare's seminal paper on the topic published in
the 1970's, which my view adheres to. Then there's the extensive literature on
asserts for contract programming, again with the same view of asserts.
Consider also Meyers' comprehensive tome on the topic "Object-Oriented Software
Construction" (1997) where he writes:
"A run-time assertion violation is the manifestation of a bug in the software."
-- pg. 346
There isn't any weasel-wording there, there is no hint of an assert not actually
having to be valid if the program is optimized, etc.
More information about the Digitalmars-d
mailing list