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