Higgs, a JavaScript JIT done in D

bearophile bearophileHUGS at lycos.com
Sun Feb 3 14:23:38 PST 2013


Peter Alexander:

> I don't use D contracts, even though I use asserts.
>
> I find that adding contracts bloats my code quite a lot, making 
> it less readable.
>
> real log(real x)
> in
> {
>     assert(x > 0);
> }
> body
> {
>     return ...;
> }
>
> v.s.
>
> real log(real x)
> {
>     assert(x > 0);
>     return ...;
> }
>
> As far as I'm aware there is no difference except when 
> inheritance is involved, so it's an easy choice for me.

If you have to create some temporary values (or to perform some 
computation) for your asserts you probably want to put this code 
inside a {} to avoid such names to spill inside the body of the 
function.

There are also post-conditions, that catch all the returns you 
have in your function, unlike free asserts.

There are also loop invariants, missing in D contract programming:
http://d.puremagic.com/issues/show_bug.cgi?id=9300

Also, a well designed language enforces pre and post conditions 
to not mutate values (this is an ongoing discussion in D: 
http://d.puremagic.com/issues/show_bug.cgi?id=9408 ), and offers 
you the "old" (prestate) feature only inside contracts (missing 
still in D contract programming). Contracts also make life a 
little simpler for static analysis tools (that aren't yet 
available in D).

So the better contract programming is implemented in a language 
(and its tools), the more useful it is compared to using free 
asserts.

Bye,
bearophile


More information about the Digitalmars-d-announce mailing list