Abstract types have existential type
ACM Transactions on Programming Languages and Systems (TOPLAS)
The Turing programming language
Communications of the ACM
Eiffel: the language
The revised report on the syntactic theories of sequential control and state
Theoretical Computer Science
Eiffel: an introduction
Manifest types, modules, and separate compilation
POPL '94 Proceedings of the 21st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A type-theoretic approach to higher-order modules with sharing
POPL '94 Proceedings of the 21st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A syntactic approach to type soundness
Information and Computation
A Practical Approach to Programming With Assertions
IEEE Transactions on Software Engineering
Objective ML: a simple object-oriented extension of ML
Proceedings of the 24th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Proper tail recursion and space efficiency
PLDI '98 Proceedings of the ACM SIGPLAN 1998 conference on Programming language design and implementation
Modular object-oriented programming with units and mixins
ICFP '98 Proceedings of the third ACM SIGPLAN international conference on Functional programming
Revised5 report on the algorithmic language scheme
ACM SIGPLAN Notices
A technique for software module specification with examples
Communications of the ACM
Programming with Specifications: An Introduction to Anna, a Language for Specifying ADA Programs
Programming with Specifications: An Introduction to Anna, a Language for Specifying ADA Programs
The Java Language Specification
The Java Language Specification
The Definition of Standard ML
Composable and compilable macros:: you want it when?
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
A Programmer's Reduction Semantics for Classes and Mixins
Formal Syntax and Semantics of Java
ACM '77 Proceedings of the 1977 annual conference
Bee: an integrated development environment for the Scheme programming language
Journal of Functional Programming
DrScheme: a programming environment for Scheme
Journal of Functional Programming
An Overview of Anna, a Specification Language for Ada
IEEE Software
Hi-index | 0.00 |
Assertions play an important role in the construction of robust software. Their use in programming languages dates back to the 1970s. Eiffel, an object-oriented programming language, wholeheartedly adopted assertions and developed the "Design by Contract" philosophy. Indeed, the entire object-oriented community recognizes the value of assertion-based contracts on methods. In contrast, languages with higher-order functions do not support assertion-based contracts. Because predicates on functions are, in general, undecidable, specifying such predicates appears to be meaningless. Instead, the functional languages community developed type systems that statically approximate interesting predicates. In this paper, we show how to support higher-order function contracts in a theoretically well-founded and practically viable manner. Specifically, we introduce ?CON, a typed lambda calculus with assertions for higher-order functions. The calculus models the assertion monitoring system that we employ in Dr Scheme. We establish basic properties of the model (type soundness, etc.) and illustrate the usefulness of contract checking with examples from Dr Scheme's code base. We believe that the development of an assertion system for higherorder functions serves two purposes. On one hand, the system has strong practical potential because existing type systems simply cannot express many assertions that programmers would like to state. nOn the other hand, an inspection of a large base of invariants may provide inspiration for the direction of practical future type system research.