5 ms·
So for non-trivial validations, how does it do? I mean, "requires y != 0:" is really simple. I'm guessing that for more complex things ('name' field of record
by wccrawford 15y ago
So for non-trivial validations, how does it do? I mean, "requires y != 0:" is really simple.
I'm guessing that for more complex things ('name' field of record does not already exist in the database) that you'll have to program them the old-fashioned way anyhow. Which leaves you code a mix of the 2 ways.
And really, wouldn't this be just as good and concise?
throw "Y can't be zero" if y == 0
- andrewflnr 15y agoThe point of a requires clause (as I understand it) is to have it be verified at runtime (edit: I mean compile time). You lose that if you do it as an exception. "just as good" is debatable, but it's definitely not equivalent.
- wccrawford 15y agoYes, I'd forgotten that bit already... But I don't know how you can check that without running it for anything but the most trivial programs.
- andrewflnr 15y agoOops. Fixed. There is a fair bit of theory about static verification/analysis of programs, a lot of which is applied in optimizing compilers as well. I'm not familiar with it, but I imagine that in this case it just fails on anything less than positive proof, and is comfortable with the strict standard that imposes. It talks more about constraints here: http://whiley.org/guide/constraints/ http://whiley.org/guide/constraints/ .
- fmap 15y agoYou are right, the problem is undecidable in general. If the compiler is unsure whether a constraint is satisfied it will have to add a runtime check. This is similar to the behavior of array accesses in Java: If you access an invalid index the JVM is required to throw an out of bounds exception. In practice this would be unacceptably slow and if the compiler can prove that such an exception can never happen, the check will be removed. As for the "simple" example of testing "y == 0", this is actually already undecidable. If you are interested, you might have a look at Nielson's "Principles of Program Analysis", I think that this particular example (undecidability of MOP Constant Propagation) is worked out there. Also, the book is a nice introduction to the subject.
- redjamjar 15y agoThe good news about undecidability is that, for the most part, it's not a problem. That is, the problem instances that arise in practice are almost never actually undecidable.
- bokchoi 15y agoNo, the requires clause is verified at compile time. To successfully compile, you must perform a check (y != 0) before calling the f function. The compiler verifies that y will never be zero when called.