checkedint call removal

Daniel Gibson via Digitalmars-d digitalmars-d at puremagic.com
Thu Jul 31 14:11:38 PDT 2014


Am 31.07.2014 22:57, schrieb Andrei Alexandrescu:
> On 7/31/14, 12:37 PM, Daniel Gibson wrote:
>>
>> This thread however shows that many D users (who probably have more D
>> experience than myself) are not aware that assert() may influence
>> optimization and would prefer to have separate syntax to tell the
>> optimizer what values he can expect.
>
> Yah, I think that's a good outcome. We must document assert better. --
> Andrei

You should have done so 10 years ago.. experienced D coders (that don't 
follow this discussion) probably won't look up what exactly assert() 
does again and and code will silently break in subtle ways once the 
optimizer uses assert()


But if you (as in "the D language implementors") *really* decide to 
stick to this unexpected meaning of assert(), you should indeed document 
this as soon as a proper definition of what assert() does and might do 
in the future, when enforce() vs assert() should be used.

Maybe, besides enforce() and assert() there could be a check() that:
* returns true if the condition is true
* throws an exception in debug mode if the condition is false
* returns false in release mode if the condition is false
could be introduced.
It could be used like

if(check(x !is null, "x must not be null")) {
	// .. do something with x ..
}

to cater the usecase of "in debugmode I want to know about this 
problem/behavior immediately to debug it, but in releasemode I want to 
handle it gracefully".

Cheers,
Daniel


More information about the Digitalmars-d mailing list