RML: RUNTIME MONITORING LANGUAGE
Luca Franceschini
ACM Student Research Competition
<Programming>, 3 April 2019, Genoa, Italy
A System-Agnostic DSL for Runtime Verification
RUNTIME VERIFICATION 101
Idea: do not verify programs, verify executions
- Static analysis on dynamic languages is painful
- Some properties are hard to enforce statically
- Opportunity to recover (beyond our scope)
Ok, but why?
PROPOSED ARCHITECTURE
RML LANGUAGE
Key ideas:
- System-independent
- Programmer-friendly syntax
- Expressivity (rich set of operators)
EXAMPLE: FILE
open matches { name: "open" };
write matches { name: "write" };
close matches { name: "close" };
Main = empty ∨ Something;
Something = open write* close;
EXAMPLE: FILE
open(fd) matches { name: "open", args: [fd, ...] };
write(fd) matches { name: "write", args: [fd, ...] };
close(fd) matches { name: "close", args: [fd, ...] };
Main = empty ∨ Something;
Something = { let fd;
open(fd) write(fd)* close(fd)
};
EXAMPLE: FILES
open(fd) matches { name: "open", args: [fd, ...] };
write(fd) matches { name: "write", args: [fd, ...] };
close(fd) matches { name: "close", args: [fd, ...] };
Main = empty ∨ Something;
Something = { let fd;
open(fd)
(write(fd)* close(fd)) | Main
};
QUESTIONS?
VERDICT
5-value logic for the verdict:
- Error, unexpected event
- Ok so far, but more events are expected
- Ok, there may be further events
- Ok, now termination is expected
- Ok, the property is satisfied
SRC
By Luca Franceschini
SRC
- 748