Eiffel: the language
Journal of Computer and System Sciences - 30th annual ACM symposium on theory of computing
Extended static checking for Java
PLDI '02 Proceedings of the ACM SIGPLAN 2002 Conference on Programming language design and implementation
Contracts for higher-order functions
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
Computer
Making Components Contract Aware
Computer
Hints on programming language design.
Hints on programming language design.
Interlanguage migration: from scripts to programs
Companion to the 21st ACM SIGPLAN symposium on Object-oriented programming systems, languages, and applications
The design and implementation of typed scheme
Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Static contract checking for Haskell
Proceedings of the 36th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Proceedings of the 2010 ACM Symposium on Applied Computing
Semantics Engineering with PLT Redex
Semantics Engineering with PLT Redex
Logical types for untyped languages
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
Correct blame for contracts: no more scapegoating
Proceedings of the 38th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Nested and dynamic contract boundaries
IFL'09 Proceedings of the 21st international conference on Implementation and application of functional languages
On contract satisfaction in a higher-order world
ACM Transactions on Programming Languages and Systems (TOPLAS)
Typed contracts for functional programming
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
Complete monitors for behavioral contracts
ESOP'12 Proceedings of the 21st European conference on Programming Languages and Systems
Higher-order symbolic execution via contracts
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Chaperones and impersonators: run-time support for reasonable interposition
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Foundations for behavioral higher-order contracts
Foundations for behavioral higher-order contracts
Hi-index | 0.00 |
Many languages support behavioral software contracts so that programmers can describe a component's obligations and promises via logical assertions in its interface. The contract system monitors program execution, checks whether the assertions hold, and, if not, blames the guilty component. Pinning down the violator gets the debugging process started in the right direction. Quality contracts impose a serious run-time cost, however, and programmers therefore compromise in many ways. Some turn off contracts for deployment, but then contracts and code quickly get out of sync during maintenance. Others test contracts randomly or probabilistically. In all cases, programmers have to cope with lack of blame information when the program eventually fails. In response, we propose option contracts as an addition to the contract tool box. Our key insight is that in ordinary contract systems, server components impose their contract on client components, giving them no choice whether to trust the server's promises or check them. With option contracts, server components may choose to tag a contract as an option and clients may choose to exercise the option or accept it, in which case they also shoulder some responsibility. We show that option contracts permit programmers to specify flexible checking policies, that their cost is reasonable, and that they satisfy a complete monitoring theorem.