Conventional type systems lack the power to express all of the obligations and promises that an
API imposes on, or promises to, client modules. Some language designers cover this expressiveness
gap with behavioral contracts. While contracts can express many logical constraints, some aspects
of API specifications still pose challenges. The presence of sequence diagrams or protocol-like
comments in interface descriptions is a symptom of this problem.
Trace contracts are a linguistic solution for expressing and enforcing rich temporal properties
in higher-order languages. In this talk, I'll present a prototype of trace contracts and discuss
open questions with respect to blame assignment, monitor efficiency, and programmer ergonomics.
Cameron is a third-year Ph.D. student and member of the Programming Research Laboratory at Northeastern University, advised by Matthias Felleisen. His research area is programming languages with an emphasis on robust software construction.