Against enforce()

Steven Schveighoffer schveiguy at yahoo.com
Thu Mar 17 08:55:19 PDT 2011


On Thu, 17 Mar 2011 11:49:25 -0400, bearophile <bearophileHUGS at lycos.com>  
wrote:

> Steven Schveighoffer:
>
>> All the other points, I disagree with bearophile, enforce is not assert
>> and should not be nothrow.
>
> I have never said this. I am aware that enforce can't be nothrow, and I  
> agree that in some situations you want to raise an exception instead of  
> using asserts. One of the things I have said (maybe wrongly) are:
>
>> You have to add that such "if (!condition) throw new Exception(args)"  
>> idiom is common in Phobos because Phobos is present only in release  
>> mode. If the zip distribution of DMD contains two Phobos and dmd  
>> becomes able to use the right one according to the compilation  
>> switches, then I think that "if (!condition) throw new Exception(args)"  
>> will become more rare, and the enforce() too will be less commonly  
>> needed.<

I was going off of this statement:

"It doesn't allow functions to be nothrow. This is a fault, because D has  
Contract Programming, that is meant to be usable for nothrow functions  
too. D Contracts with asserts are the right tool."

Sorry if I misunderstood.

But enforce is a simple factoring of the if(!condition) throw  
Exception(msg) into an expression.  It is meant to throw an exception and  
meant to be used in release mode.

The only problem I see with it is the inline-killing.

-Steve


More information about the Digitalmars-d mailing list