Why is there no static contract verification?

Mario Schmidt jack_sabbath at gmx.de
Sun Feb 2 10:37:32 PST 2014


I'm new to D. Currently I'm programming in C# and I am looking 
for a secondary, or even new main language that D might become.

One of the features that I found most promising in D is DbC. 
However, I was very disappointed when I realized that the current 
implementation is not much more than an assert that is evaluated 
during runtime.

What i mean is.. look at this code:

void goCrazy(Person p)
in { assert(p); }
body {
// whatever
}

void main()
{
Person goku = null;
goCrazy(goku);
}


This a rather simple example where the compiler would be 
perfectly able to realize that the procedure goCrazy won't be 
called according it's specified contracts.

I know that these contracts would help me to find bugs faster or 
better during testing. But if the compiler would do a static 
verification you could even be sure that a procedure will always 
be called correctly.

I'm sure in some cases it would indeed be possible to check 
certain conditions at compile time. This includes ins, outs and 
invariants.
Maybe a subset of checks could be implemented in D.. like range 
checking of numerical values or something..


More information about the Digitalmars-d mailing list