DIP 1006 - Preliminary Review Round 1
Mathias Lang via Digitalmars-d
digitalmars-d at puremagic.com
Wed Apr 12 08:16:01 PDT 2017
On Wednesday, 12 April 2017 at 12:52:42 UTC, Timon Gehr wrote:
> On 12.04.2017 13:25, Mike Parker wrote:
>> DIP 1006 is titled "Providing more selective control over
>> contracts".
>>
>> https://github.com/dlang/DIPs/blob/master/DIPs/DIP1006.md
>>
>> All review-related feedback on and discussion of the DIP
>> should occur in
>> this thread. The review period will end at 11:59 PM ET on
>> April 26 (3:59
>> AM GMT), or when I make a post declaring it complete.
>>
>> At the end of Round 1, if further review is deemed necessary,
>> the DIP
>> will be scheduled for another round. Otherwise, it will be
>> queued for
>> the formal review and evaluation by the language authors.
>>
>> Thanks in advance to all who participate.
>>
>> Destroy!
>
> The DIP should probably specify in detail how this interacts
> with -release.
>
> I guess the difference between "-contracts=none
> -boundscheck=safeonly" and" -release" is that failing
> assertions are UB only with the latter?
>
> What happens if I pass both -contracts=none and -release?
Addressing Daniel Kozak's question as well here:
Providing `-release` on the command line has the following effect:
- Disable invariants,
- Disable in and out,
- Disable assert,
- Disable switch error [1]
Which `-contract` just allows more control on.
TL;DR: It affects all build. It's a subset of `-release`, so
passing `-contracts=whatever` and `-release` has the same effect
as passing `-release`.
[1] Switch error: Compiler code here:
https://github.com/dlang/dmd/blob/0158d32fcbbdda16b3f79e73f2f1f8c13afb9f6d/src/ddmd/statementsem.d#L2120-L2145
When a `switch has no `default,` in debug it'll insert a
`default` which throws a `core.exception : SwitchError`, and in
release the generated `default` will just be an `HLT` (same as
`assert(0)`).
More information about the Digitalmars-d
mailing list