checkedint call removal
via Digitalmars-d
digitalmars-d at puremagic.com
Thu Jul 31 03:22:46 PDT 2014
On Thursday, 31 July 2014 at 05:56:31 UTC, Walter Bright wrote:
> On 7/30/2014 10:16 PM, bearophile wrote:
>> Walter Bright:
>>> Show me a piece of code with different behavior. Start with
>>> the array bounds
>>> thing.
>> People have already shown you code that behaves differently
>> with assert and
>> assume.
>
> I'd like to see what you are saying is different in a real
> example.
>
>
>> But you have redefined "assert" to mean a mix of assume and
>> assert.
>
> I haven't redefined anything. It's always been that way. It's
> used that way in C/C++ (see your Microsoft C++ link).
No.
This is safe:
assert(x) {
if(!x) halt();
assume(x);
}
This is not safe:
assert(x){
assume(x);
}
You need to underestand what can be proven with Hoare logic. The
optimizer is free to do anything you can do with it.
A program + libaries contain millions of statements. Each and
every of those statements is taken as something close to an axiom
or multiple axioms. Basically your program contains millions of
implicit assumes() that are internally consistent.
Then you add thousands handwritten axioms of assume().
true == false IFF a single of those axioms contradicts another
axiom either provided implicitly by the program/optimizer or
explicitly by the user.
That means any boolean expression in your program+libraries can
be proven true or false randomly with a probability close to 100%.
That means you cannot do heavy duty optimization at all! Because
the probability of no axioms contradicting each other is very
close to 0%!
Please note that you can infer true==false if there is even the
tiniest teeny weeny sign of contradiction in any pair of axioms
picked from the millions upon millions of axioms provided. Even
if that axiom is derived from a statement deep down in some
library that most likely will never execute.
assume(X) provides axiom X
assert(X) provides theorem(X) to be proven
You cannot mix those two. That is disaster.
More information about the Digitalmars-d
mailing list