simendsjo:

> void f(Class c) {
>    assert(c != null);
>    // use c
> }
> 
> In this example, we tell the compiler that c is never able to be null. 
> The compiler can use assertions like this for optimizations (not sure if 
> dmd does this though).

I think currently DMD is not using this information, and probably it will keep 
not using it for some more time.
Note: generally asserts go into Contracts. Here it goes in the precondition of 
f:

void f(Class c)
in {
    assert(c != null);
}
body {
    // use c
}


> void f(Class c) {
>    assert(c != null);
>    enforce(c != null);
>    // use c
> }

This is not meaningful. assert and enforce have different purposes, you don't 
use both of them at the same time. If f is a inner function/method of your 
system, then you add asserts inside Contracts to assert your code contains no 
bugs. If your f is a function/method that's on an "interface" border, so it's 
used by other users, then you may want to use enforce instead.

Bye,
bearophile

Reply via email to