Reference. Oh Lord, Please Don’t Let Contracts be Misunderstood (Functional Pearl)
Contracts feel misunderstood, especially those with a higher-order soul. While software engineers appreciate contracts as tools for articulating the interface between components, functional programmers desperately search for their types and meaning, completely forgetting about their pragmatics.
This gem presents a novel analysis of contract systems. Applied to the higher-order kind, this analysis reveals their large and clearly unappreciated software engineering potential. Three sample applications illustrate where this kind of exploration may lead.
Cite
Cites 53 works (0 here)
External (53)
- Relatively Complete Counterexamples for Higher-order Programs (2015)
- Feature-specific Profiling (2015)
- Shill: A Secure Shell Scripting Language (2014)
- Soft Contract Verification (2014)
- Efficient Parametric Runtime Verification with Deterministic String Rewriting (2013)
- Contracts for First-Class Classes (2013)
- Constraining Delimited Control with Contracts (2013)
- Complete Monitors for Behavioral Contracts (2012)
- Access Permission Contracts for Scripting Languages (2012)
- Chaperones and Impersonators: Run-time Support for Reasonable Interposition (2012)
- On Contract Satisfaction in a Higher-Order World (2011)
- Correct Blame for Contracts: No More Scapegoating (2011)
- Temporal Higher-order Contracts (2011)
- Contract Aware Components, 10 years after (2010)
- Contracts Made Manifest (2010)
- The Two-state Solution: Native and Serializable Continuations Accord (2010)
- Semantics Engineering with PLT Redex (2009)
- Scribble: Closing the Book on Ad Hoc Documentation Tools (2009)
- Nested and Dynamic Contract Boundaries (2009)
- Well-typed Programs Can’t be Blamed (2009)
- Making Trace Monitors Feasible (2007)
- Rule Systems for Run-time Monitoring: From Eagle to Ruler (2007)
- Sound and Complete Models of Contracts (2006)
- Contracts as Pairs of Projections (2006)
- Hybrid Type Checking (2006)
- Scheme with Classes, Mixins, and Traits (2006)
- JML’s Rich, Inherited Specifications for Behavioral Subtypes (2006)
- Adding Trace Matching with Free Variables to AspectJ (2005)
- J-LO, a Tool for Runtime-Checking Temporal Assertions (2005)
- Integrating User-Level Threads with Processes in Scsh (2005)
- Relational Queries over Program Traces (2005)
- Event-based Runtime Verification of Java Programs (2005)
- Finding Application Errors and Security Flaws Using PQL: a Program Query Language (2005)
- An Investigation of Contracts as Projections (2004)
- Java-MaC: A Run-Time Assurance Approach for Java Programs (2004)
- The Coq Proof Assistant Reference Manual (2004)
- Towards Monitoring-Oriented Programming: A Paradigm Combining Specification and Implementation (2003)
- jContractor: Bytecode Instrumentation Techniques for Implementing Design by Contract in Java (2002)
- DrScheme: a Programming Environment for Scheme (2002)
- Contracts for Higher-Order Functions (2002)
- Jass — Java with Assertions (2001)
- DynaMICs: Comprehensive Support for Run-Time Monitoring (2001)
- Monitoring Java Programs with Java PathExplorer (2001)
- Language Primitives and Type Discipline for Structured Communication-Based Programming (1998)
- Typing the Specialization Interface (1993)
- Applying Design by Contract (1992)
- Eiffel: The Language (1992)
- On the Expressive Power of Programming Languages (1991)
- The Calculus of Constructions (1988)
- Typestate: A Programming Language Concept for Enhancing Software Reliability (1986)
- A Dialect of LISP (1978)
- Macaroni is Better Than Spaghetti (1977)
- Lambda-Calculus Models of Programming Languages (1968)