Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Runtime Assertion Checking for Old Expressions #101

Open
DavePearce opened this issue Oct 11, 2021 · 0 comments
Open

Runtime Assertion Checking for Old Expressions #101

DavePearce opened this issue Oct 11, 2021 · 0 comments

Comments

@DavePearce
Copy link
Member

DavePearce commented Oct 11, 2021

(see also Whiley/WhileyCompiler#1096)

There are a number of questions around old(e) expressions and how they can be checked at runtime efficiently. At the moment, the Whiley interpreter clones the entire program state --- which is pretty inefficient. For example, in the JML Runtime Assertion Checker, they evaluate old(e) expressions on entry to a method and stash them for checking the postcondition. But, this is very problematic for a few reasons: firstly, how do we manage recursive properties involving old()? secondly, how do we handle quantified expressions, etc?

References

  1. Past Expression: Encapsulating Pre-States at Post-Conditions by Means of AOP Proposes \past(e) to replace \old(e) in JML to address the issue that (in Java) \old(p) for some class variable p only returns its reference, and there is no way to do e.g. \old(*p) as we can in Whiley. Yes, we can do e.g. \old(p.f) for each field, but this breaks encapsulation. To address performance of runtime checking, they employ a difference heap.
  2. How the design of JML accommodates both runtime assertion checking and formal verification
  3. A Runtime Assertion Checker for the Java Modeling Language (JML). "The runtime assertion checker handles old expressions by evaluating them in the pre-state inside the precondition check method and caching the results in private fields"
  4. Prototyping a tool environment for run-time assertion checking in JML with communication histories
  5. Temporaljmlc: A JML Runtime Assertion Checker Extension for Specification and Checking of Temporal Properties
  6. An Optimized Memory Monitoring for Runtime Assertion Checking of C Programs
  7. Combining Monitoring with Run-Time Assertion Checking
  8. OpenJML: JML for Java 7 by Extending OpenJDK
  9. Run-time assertion checking of JML annotations in multithreaded applications with e-OpenJML
  10. A Lesson on Runtime Assertion Checking with Frama-C
  11. Runtime Assertion Checking and Static Verification: Collaborative Partners
  12. Efficient Runtime Assertion Checking of Assignable Clauses with Datagroups
  13. Client-aware checking and information hiding in interface specifications with JML/ajmlc
  14. Verified Runtime Assertion Checking for Memory Properties
  15. The e-ACSL perspective on runtime assertion checking
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant