DIP 1006 - Preliminary Review Round 1
Timon Gehr
timon.gehr at gmx.ch
Mon Mar 5 22:20:55 UTC 2018
On 05.03.2018 22:11, Walter Bright wrote:
> On 3/5/2018 11:34 AM, Timon Gehr wrote:
>> On 05.03.2018 11:30, Walter Bright wrote:
>>> The hints will usually not make a significant difference in
>>> performance anyway.
>
> Reasonable people will disagree on what is significant or not.
> ...
My point exactly! Hence, compiler flag.
> ...
>>
>> I did not make the code any more wrong by adding the assertion.
>> Why should I get more UB?
>
> Because you put in an assert that did not hold, and disabled the check.
> ...
(Maybe let's assume it was not me who did it, to stop the whole silly
"you deserve what you got because you made a mistake" notion.)
Again, my question is not about the _mechanics_ of the status quo. I
know it very well. It's the rationale that matters.
>
>> Now we have the following options:
>>
>> - Leave contracts in -- fail performance requirements.
>>
>> - Remove contracts -- fail safety requirements.
>>
>> - Track down all 'assert's, even those in external libraries, and
>> replace them by a custom home-cooked solution that is incompatible
>> with everyone else's -- fail maintainability requirements.
>>
>> To me this situation is ridiculous.
>
> It's completely under the control of the programmer. I know you disagree
> with that notion.
I don't. I can use a manual patch of the compiler that has the
additionally required flags and replicate the official packaging effort
and make everyone who wants to compile my programs use that version. I
just don't want to, as it seems silly.
It would be a lot better if the standard DMD compiler had the flags. Do
you disagree that there should be an additional option to ignore
contracts completely?
> You can even create your own `myassert` to produced
> your desired semantics.
> ...
That's the third option above. It's not a practical solution. Putting
the flag into a compiler fork is trivial by comparison.
>
>> FWIW, this is what all contract systems that I'm aware of do, except
>> D, and maybe C asserts in certain implementations (if you want to call
>> that contracts).
>
> D is better (!).
>
> (C's asserts are not part of the language, so impart no semantics to the
> compiler.)
>
(That's why I said "in certain implementations".)
More information about the Digitalmars-d
mailing list