On Wednesday, 30 July 2014 at 03:32:50 UTC, Walter Bright wrote:
On 7/29/2014 7:08 PM, Timon Gehr wrote:
Of course version(assert) is a language feature. Always double-check your claims.

It's even documented: http://dlang.org/version.html

You're right. My mistake. I'd forgotten about that.


Not a bit. The distinction utterly escapes me.
This is unfortunate, but I don't know what else to say.

I don't either. I still have no idea what the difference between assume(i<6) and assert(i<6) is supposed to be.

main(){
  foobar();
  assert(false==true)
}

With assert():

main(){
  foobar();
}

With assume() the optimizer can:

a: proven_locally(main, (false==true))
no_local_dependencies(a)
all_paths_go_through(a)
b: proven_globally(false==true)
for_all_conditional_expressions_try_to_prove_false()

At this point all conditionals are false and removed.
Complete wipe out. Nothing remains.

here's another version:

foo(){
   assume(true==false);
}

version(RELEASE_MODE){
   foobar(){ foo(); }
}
...

main(){
  foobar();
}



Reply via email to