$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Darren Cook (darren_at_[hidden])
Date: 2004-10-29 23:21:45
>>I'm hoping Thorsten Ottosen's contract programming will make it into
>>the standard so the compiler will understand asserts and be able to
>>optimize away the redundant ones.
>
> Compilers are already allowed to do that, and I predict no proposal
> that requires it to be done will ever be accepted into the standard.
"be able" falls somewhere between "allowed to" and "required to". An
optimizer will have a hard job analyzing all the code in a function so see
if any can be skipped. But if it can see a precondition is always satisfied
then it can jump directly to the body of the function and skip the precondition.
E.g.
void f(int x){
precondition{ x>=0 && x<=99; } //1
... //2
}
f(atoi(argv[2])); //Jumps to f, at 1
f(34); //Jumps to f, at 2
void g(int z){
precondition{ z>=10 && z<50; }
f(z*2); //Can also jump to f at 2, as range is 20..98
}
I don't think Thorsten's proposal requires optimizations like this. But I
don't know enough about compiler writing to know if the above is ever likely
to be implemented.
Darren