But its proving in my experience to be a much more practical foundation, and going forward there is a lot of value in that.
But its proving in my experience to be a much more practical foundation, and going forward there is a lot of value in that.
For instance:
sudo rm -rf /
Every part of that is completely sound and correct. There are no buffer overflows, emory corruption, or anything. You wrote a completely correct command to do something (probably) really wrong.Then there are systems that just prevent ambiguous rules if you really dig into it. (Speaking of assisted theorem prover such as Coq and Isabelle.)
In this case it was fully specified that sudo should run rm with all privileges, which in turn will recursively deleted the root filesystem.
The entire execution is fully specified and will execute without fault. There is no mistake in `sudo rm -rf /`.
Logical faults may not be preventable with provers, such as when underlying assumptions are wrong.
For example, a prover could have verified the parity library as fully okay because it assumes that the initialization function will not be called without delegation. This underlying assumption X -!> Y (X cannot lead to Y) is wrong and X -> Y is the case but the prover only verified that Y -!> X.
Provers essentially duplicate your code, forcing you to express the solution and/or problem twice such that if you basically typo on the way, one of the pieces will complain about the other.
But it cannot and is incapable of preventing higher level mistakes.
Bugs happen no matter the language, even if LLVM was in Rust it would have them.
Security-related compiler bugs very rare, but they do exist, at least in graphics shader compilers: http://www.doc.ic.ac.uk/~afd/homepages/papers/pdfs/2017/OOPS... . My impression is that many of these shader compilers are based on LLVM, but this is mostly conjecture. (I do recall a video game crashing on me with internal LLVM errors from the graphics driver.)