A calculus for assignments in higher-order languages
POPL '87 Proceedings of the 14th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Eiffel: the language
Fully abstract semantics for observably sequential languages
Information and Computation
A Practical Approach to Programming With Assertions
IEEE Transactions on Software Engineering
ALGOL-like Languages, Volume 1
Derivatives of Regular Expressions
Journal of the ACM (JACM)
On full abstraction for PCF: I, II, and III
Information and Computation
Information and Computation
Proceedings of the 8th European software engineering conference held jointly with 9th ACM SIGSOFT international symposium on Foundations of software engineering
Object-Oriented Software Construction
Object-Oriented Software Construction
Contracts for higher-order functions
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
CSL '97 Selected Papers from the11th International Workshop on Computer Science Logic
A Fully Abstract Game Semantics for General References
LICS '98 Proceedings of the 13th Annual IEEE Symposium on Logic in Computer Science
A Fully Abstract Game Semantics of Local Exceptions
LICS '01 Proceedings of the 16th Annual IEEE Symposium on Logic in Computer Science
An Overview of the Runtime Verification Tool Java PathExplorer
Formal Methods in System Design
Kill-safe synchronization abstractions
Proceedings of the ACM SIGPLAN 2004 conference on Programming language design and implementation
Adding trace matching with free variables to AspectJ
OOPSLA '05 Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Relational queries over program traces
OOPSLA '05 Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Sound and complete models of contracts
Journal of Functional Programming
The temporal logic of programs
SFCS '77 Proceedings of the 18th Annual Symposium on Foundations of Computer Science
Static contract checking for Haskell
Proceedings of the 36th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Regular-expression derivatives re-examined
Journal of Functional Programming
Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Semantics Engineering with PLT Redex
Semantics Engineering with PLT Redex
Event-based input validation using design-by-contract patterns
ISSRE'09 Proceedings of the 20th IEEE international conference on software reliability engineering
Rule Systems for Run-time Monitoring
Journal of Logic and Computation
Correct blame for contracts: no more scapegoating
Proceedings of the 38th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Typed contracts for functional programming
FLOPS'06 Proceedings of the 8th international conference on Functional and Logic Programming
Contracts as pairs of projections
FLOPS'06 Proceedings of the 8th international conference on Functional and Logic Programming
The spec# programming system: an overview
CASSIS'04 Proceedings of the 2004 international conference on Construction and Analysis of Safe, Secure, and Interoperable Smart Devices
Stateful contracts for affine types
ESOP'10 Proceedings of the 19th European conference on Programming Languages and Systems
Runtime verification based on register automata
TACAS'13 Proceedings of the 19th international conference on Tools and Algorithms for the Construction and Analysis of Systems
Hi-index | 0.00 |
Behavioral contracts are embraced by software engineers because they document module interfaces, detect interface violations, and help identify faulty modules (packages, classes, functions, etc). This paper extends prior higher-order contract systems to also express and enforce temporal properties, which are common in software systems with imperative state, but which are mostly left implicit or are at best informally specified. The paper presents both a programmatic contract API as well as a temporal contract language, and reports on experience and performance results from implementing these contracts in Racket. Our development formalizes module behavior as a trace of events such as function calls and returns. Our contract system provides both non-interference (where contracts cannot influence correct executions) and also a notion of completeness (where contracts can enforce any decidable, prefix-closed predicate on event traces).