As they describe in the paper, if you want that behavior you can get it, but it comes at a cost. If you would like the softer guarantees (could be exception or not, but never invalid data), you can get better performance.
What they describe is a knob that lets you trade off static assurance against dynamic assurance, for performance. If you have good static tools (e.g. something like Rust's borrow checker, or various C++ tools I know nothing about) you can confidently not care one way or the other and take the performance.