Robby Findler's Publications (with selected abstracts)sorted by year | sorted by venueConference publications | Lazy Contract Checking for Immutable Data Structures Findler, Guo, and Rogers International Symposium on Implementation and Application of Functional Languages (IFL) 2007 pdf | | Abstract |
Existing contract checkers for data structures force programmers to choose between poor alternatives.
Contracts are either built into the functions that construct the data structure, meaning that each object can
only be used with a single contract and that a data structure with an invariant cannot be viewed as a subtype
of the data structure without the invariant (thus inhibiting abstraction) or contracts are checked eagerly when
an operation on the data structure is invoked, meaning that many redundant checks are performed,
potentially even changing the program's asymptotic complexity.
We explore the idea of adding a small, controlled amount of laziness to contract checkers so that the contracts
on a data structure are only checked as the program inspects the data structure. Unlike contracts on the constructors,
our lazy contracts allow subtyping and thus preserve the potential for abstraction. Unlike eagerly-checked contracts,
our contracts do not affect the asymptotic behavior of the program.
This paper presents our implementation of these ideas, an optimization in our implementation,
performance measurements, and a discussion of an extension to our implementation that
admits more expressive contracts by loosening the strict asymptotic guarantees and only
preserving the amortized asymptotic complexity.
|
|
| | Well-typed programs can’t be blamed Wadler, Findler Workshop on Scheme and Functional Programming 15-26 2007 pdf |
| | Relationally-Parametric Polymorphic Contracts Guha, Matthews, Findler, Krishnamurthi Dynamic Languages Symposium (DLS) 29-40 2007 pdf |
| | Adding Delimited and Composable Control to a Production Programming Environment Flatt, Yu, Findler, Felleisen International Conference on Functional Programming (ICFP) 165-176 2007 pdf redex model |
| | A Rewriting Semantics for Type Inference Kuan, MacQueen, Findler European Symposium on Programming (ESOP) 426-440 2007 pdf |
| | Operational Semantics for Multi-Language Programs Matthews, Findler Symposium on Principles of Programming Languages (POPL) 3-10 2007 color pdf b&w pdf | | Abstract |
Inter-language interoperability is big business, as the success
of Microsoft's .NET and COM and Sun's JVM show. Programming
language designers are designing programming languages that
reflect that fact -- SML#, Mondrian, and Scala, to name just a few
examples, all treat interoperability with other languages as a
central design feature. Still, current multi-language research
tends not to focus on the semantics of interoperation features,
but only on how to implement them efficiently. In this paper, we
take first steps toward higher-level models of interoperating
systems. Our technique abstracts away the low-level details of
interoperability like garbage collection and representation
coherence, and lets us focus on semantic properties like
type-safety and observable equivalence.
Beyond giving simple expressive models that are natural
compositions of single-language models, our studies have
uncovered several interesting facts about interoperability. For
example, higher-order contracts naturally emerge as the glue to
ensure that inter-operating languages respect each other's type
systems. While we present our results in an abstract setting,
they shed light on real multi-language systems and tools such as
the JNI, SWIG, and and Haskell's stable pointers.
|
|
| | Scheme with Classes, Mixins, and Traits Flatt, Findler, Felleisen Asian Symposium on Programming Languages and Systems (APLAS) 270-289 2006 pdf | | Abstract |
The Scheme language report advocates language design as the composition of
a small set of orthogonal constructs, instead of a large accumulation of
features. In this paper, we demonstrate how such a design scales with the
addition of a class system to Scheme. Specifically, the PLT Scheme class
system is a collection of orthogonal linguistic constructs for creating
classes in arbitrary lexical scopes and for manipulating them as
first-class values. Due to the smooth integration of classes and the core
language, programmers can express mixins and traits, two major recent
innovations in the object-oriented world. The class system is implemented
as a macro in terms of procedures and a record-type generator; the mixin
and trait patterns, in turn, are naturally codified as macros over the
class system.
|
|
| | Contracts as Pairs of Projections Findler, Blume International Symposium on Functional and Logic Programming (FLOPS) 226-241 2006 expanded tech report, pdf | | Abstract |
Assertion-based contracts provide a powerful mechanism for stating invariants
at module boundaries and for enforcing them uniformly. In 2002, Findler and
Felleisen showed how to add contracts to higher-order functional languages,
allowing programmers to assert invariants about functions as values. Following
up in 2004, Blume and McAllester provided a quotient model for contracts. Roughly
speaking, their model equates a contract with the set of values that cannot violate
the contract. Their studies raised interesting questions about the nature of contracts
and, in particular, the nature of the any contract.
In this paper, we develop a model for software contracts that follows Dana Scott's
program by interpreting contracts as projections. The model has already improved our
implementation of contracts. We also demonstrate how it increases our understanding
of contract-oriented programming and design. In particular, our work provides a
definitive answer to the questions raised by Blume and McAllester's work. The key insight
from our model that resolves those questions is that a contract that puts no obligation on
either party is not the same as the most permissive contract for just one of the parties.
|
|
| | Modular Set-Based Analysis from Contracts Meunier, Findler, Felleisen Symposium on Principles of Programming Languages (POPL) 218-231 2006 pdf |
| | An Operational Semantics for R5RS Scheme Matthews, Findler Workshop on Scheme and Functional Programming 41-54 2005 pdf |
| | Fine-Grained Interoperability through Contracts and Mirrors Gray, Findler, Flatt Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA) 231-246 2005 pdf |
| | Super and Inner - Together at Last! Goldberg, Findler, Flatt Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA) 116-129 2004 pdf model, in PLT Redex |
| | Slideshow: Functional Presentations Findler, Flatt International Conference on Functional Programming (ICFP) 224-235 2004 pdf |
| | Kill-Safe Synchronization Abstractions Flatt, Findler Programming Language Design and Implementation (PLDI) 47-58 2004 online |
| | A Visual Environment for Developing Context-Sensitive Term Rewriting Systems Matthews, Findler, Flatt, Felleisen International Conference on Rewriting Techniques and Applications (RTA) 301-312 2004 pdf |
| | Semantic Casts: Contracts and Structural Subtyping in a Nominal World Findler, Flatt, Felleisen European Conference for Object-Oriented Programming (ECOOP) 364-388 2004 pdf | | Abstract |
Nominal subtyping forces programmers to explicitly state all of the subtyping relationships in the program.
This limits component reuse, because programmers cannot anticipate all of the contexts in which a
particular class might be used.
In contrast, structural subtyping implicitly allows any type with appropriate structure to be used in a given context.
Languagues with contracts exacerbate the problem.
Since contracts are typically expressed as refinements of types, contracts in nominally typed languages
introduce additional obstacles to reuse.
To overcome this problem we show how to extend a nominally typed language with semantic casts that
introduce a limited form of structural subtyping.
The new language must dynamically monitor contracts, as new subtyping relationships are exploited via semantic casts.
In addition, it must also track the casts to properly assign blame in case interface contract are violated.
|
|
| | Modeling Web Interactions Graunke, Findler, Krishnamurthi, Felleisen European Symposium on Programming (ESOP) 238-252 2003 ps.gz pdf |
| | The Structure and Interpretation of the Computer Science Curriculum Felleisen, Findler, Flatt, Krishnamurthi Functional and Declarative Programming in Education (FDPE) 21-26 2002 pdf ps |
| | Contracts for Higher-Order Functions Findler, Felleisen International Conference on Functional Programming (ICFP) 48-59 2002 expanded techreport version: pdf ps; original ICFP version (with corrections): pdf ps; | | Abstract |
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
,
a typed lambda calculus with assertions
for higher-order functions. The calculus models the
assertion monitoring system that we employ in DrScheme. We
establish basic properties of the model (type soundness,
etc.) and illustrate the usefulness of contract checking
with examples from DrScheme's code base.
We believe that the development of an assertion system for
higher-order 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. On the other hand, an
inspection of a large base of invariants may provide
inspiration for the direction of practical future type
system research.
|
|
| | Automatically Restructuring Programs for the Web Graunke, Findler, Krishnamurthi, Felleisen Automated Software Engineering (ASE) 211-222 2001 download |
| | Contract Soundness for Object-Oriented Languages Findler, Felleisen Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA) 1-15 2001 download | | Abstract |
Checking pre- and post-conditions of procedures and methods at runtime helps improve software reliability.
In the procedural world, pre- and post-conditions have a straightforward interpretation. If a procedure's pre-condition
doesn’t hold, the caller failed to establish the proper context. If a post-condition doesn’t hold,
the procedure failed to compute the expected result.
In the object-oriented world, checking pre- and post-conditions for methods, often called contracts in this
context, poses complex problems. Because methods may be overridden, it is not sufficient to check only pre- and
post-conditions. In addition, the contract hierarchy must be checked to ensure that the contracts on overridden methods
are properly related to the contracts on overriding methods. Otherwise, a class hierarchy may violate the substitution
principle, that is, it may no longer be true that an instance of a class is substitutable for objects of the super-class.
In this paper, we study the problem of contract enforcement in an object-oriented world from a foundational perspective.
More specifically, we study contracts as refinements of types. Pushing the analogy further, we state and prove a
contract soundness theorem that captures the essential properties of contract enforcement. We use the theorem to
illustrate how most existing tools suffer from a fundamental flaw and how they can be improved.
|
|
| | Behavioral Contracts and Behavioral Subtyping Findler, Latendresse, Felleisen Foundations of Software Engineering (FSE) 229-236 2001 download | | Abstract |
Component-based software manufacturing has the potential to
bring division-of-labor benefits to the world of software
engineering. In order to make a market of software
components viable, however, producers and consumers must
agree on enforceable software contracts.
In this paper, we show how to enforce contracts if
components are manufactured from class and interface
hierarchies. In particular, we focus on one style of
contract: pre- and post-conditions. Programmers annotate
class and interface methods with pre- and post-conditions
and the run-time system checks these conditions during
evaluation. These contracts guarantee that methods are
called properly and provide appropriate results.
In procedural languages, the use of pre- and post-condition
contracts is well-established and studies have demonstrated
its value. In object-oriented languages, however, assigning
blame for pre- and post-condition failures poses subtle and
complex problems. Specifically, assigning blame for
malformed class and interface hierarchies is so difficult
that none of the existing contract monitoring tools
correctly assign blame for these failures. In this paper, we
show how to overcome these problems in the context of Java.
Our work is based on the notion of behavioral subtyping.
|
|
| | Programming Languages as Operating Systems (or, Revenge of the Son of the Lisp Machine) Flatt, Findler, Krishnamurthi, and Felleisen International Conference on Functional Programming (ICFP) 138-147 1999 download | | Abstract |
The MrEd virtual machine serves both as the implementation platform
for the DrScheme programming environment, and as the underlying
Scheme engine for executing expressions and programs entered into
DrScheme's read-eval-print loop. We describe the key elements of the
MrEd virtual machine for building a programming environment, and we
step through the implementation of a miniature version of DrScheme in
MrEd. More generally, we show how MrEd defines a high-level operating
system for graphical programs.
|
|
| | Modular Object-Oriented Programming with Units and Mixins Findler, Flatt International Conference on Functional Programming (ICFP) 94-104 1998 download | | Abstract |
Module and class systems have evolved to meet the demand for
reuseable software components. Considerable effort has been
invested in developing new module and class systems, and in
demonstrating how each promotes code reuse. However,
relatively little has been said about the interaction of
these constructs, and how using modules and classes together
can improve programs. In this paper, we demonstrate the
synergy of a particular form of modules and classes--called
units and mixins, respectively--for solving complex reuse
problems in a natural manner.
|
|
| | DrScheme: A Pedagogic Programming Environment for Scheme Findler, Flanagan, Flatt, Krishnamurthi, Felleisen Programming Languages: Implementations, Logics, and Programs (PLILP) 369-388 1997 download |
|
Journal publications | Operational Semantics for Multi-Language Programs Matthews, Findler Transactions on Programming Languages and Systems (TOPLAS) to appear 2009 pdf |
| | An Operational Semantics for Scheme Matthews, Findler Journal of Functional Programming (JFP) 18(1): 47-86 2008 details | | Abstract |
This paper presents an operational semantics for the core of Scheme.
Our specification improves over the denotational semantics from the
Revised5 Report on the Algorithmic Language Scheme
specification in four ways.
First, it covers a larger part of the language, specifically eval, quote, dynamic-wind,
and the top level.
Second, it models multiple values in a way that does not require changes to unrelated parts of the language.
Third, it provides a faithful model of Scheme's undefined order of evaluation.
Finally, we have implemented our specification in
PLT Redex,
a domain-specific language for writing operational semantics.
The implementation allows others to experiment with our specification and allows us to build a specification test suite,
which improves our confidence that our system is a faithful model of Scheme.
In addition to a specification of Scheme,
this paper contributes three novel modeling techniques for Felleisen Hieb-style rewriting semantics.
All three techniques are applicable to a wider range of problems than modeling Scheme, and they combine
seamlessly in our model, suggesting that they would scale to complete models of other languages.
|
|
| | Modeling Web Interactions and Errors Krishnamurthi, Findler, Graunke, Felleisen Interactive Computation: The New Paradigm 255-276 2006 pdf book chapter |
| | Slideshow: Functional Presentations Findler, Flatt Journal of Functional Programming (JFP) 16(4-5): 583-619 2006 pdf (greyscale) pdf (color) | | Capsule Review |
Readers familiar with Henderson's classic functional language for
describing fractal pictures will already be aware that
functional languages are nicely suited to tasks
concerned with the description of images.
The authors take this fundamental concept and develop it into a
practical, industrial-strength tool:
Slideshow,
a Scheme-based system that allows one to use Scheme's abstraction facilities
to design slide-based presentations.
It is interesting to see how the fine points of Scheme influence
the design of Slideshow.
For example, although Slideshow's language of picture combinators
is purely functional,
the authors nonetheless manage to exploit object identity
and Scheme's eq? primitive
to define Slideshow's facility for deconstructing or structurally
querying an image.
It is also interesting to see how, where and why the authors
judiciously employ side effects in their primarily pure system.
Given these kinds of design elements, it's hard not to wonder how such a system
would be designed given a different underlying language, such as Haskell.
The paper operates at multiple levels, discussing the design of
- (1) slides,
- (2) talks composed of slides, and
- (3) a language for describing #1 and #2.
The authors spend a significant portion of their time discussing not
simply the design of Slideshow, but the subtler design principles
behind using it to construct a presentation.
These are codified in a “design recipe,”
and a detailed example is developed to illustrate the recipe in action.
|
|
| | Selectors Make Set-based Analysis too Hard Meunier, Findler, Steckler, Wand Journal of Higher-Order and Symbolic Computing (HOSC) 18(3-4) 245-269 December 2005 pdf ps.gz publisher's site |
| | The TeachScheme! Project: Computing and Programming for Every Student Felleisen, Findler, Flatt, Krishnamurthi Computer Science Education (CSE) March 2004 pdf ps.gz from the publisher |
| | Automatically Restructing Programs for the Web Matthews, Findler, Graunke, Krishnamurthi, Felleisen Automated Software Engineering, an International Journal (ASEj) 11(4): 337-364, October 2004 pdf from the publisher |
| | The Structure and Interpretation of the Computer Science Curriculum Felleisen, Findler, Flatt, Krishnamurthi Journal of Functional Programming (JFP) 14(4): 365-37 2004 download |
| | DrScheme: A Programming Environment for Scheme Findler, Clements, Flanagan, Flatt, Krishnamurthi, Steckler, and Felleisen Journal of Functional Programming (JFP) 12(2) March 2002 download | | Abstract |
DrScheme is a programming environment for Scheme. It
fully integrates a graphics-enriched editor, a parser for
multiple variants of Scheme, a functional read-eval-print
loop, and an algebraic printer. The environment is
especially useful for students, because it has a tower of
syntactically restricted variants of Scheme that are designed to
catch typical student mistakes and explain them in terms
the students understand. The environment is also useful
for professional programmers, due to its sophisticated
programming tools, such as the static debugger, and its
advanced language features, such as units and mixins.
Beyond the ordinary programming environment tools,
DrScheme provides an algebraic stepper, a context-sensitive
syntax checker, and a static debugger. The
stepper reduces Scheme programs to values, according to
the reduction semantics of Scheme. It is useful
for explaining the semantics of linguistic facilities and
for studying the behavior of small programs. The syntax
checker annotates programs with font and color changes
based on the syntactic structure of the program. On
demand, it draws arrows that point from bound to binding
occurrences of identifiers. It also supports
alpha-renaming. Finally, the static debugger provides
a type inference system that explains specific inferences
in terms of a value-flow graph, selectively
overlaid on the program text.
|
|
| | Rapid construction of integrated maps using inner product mapping: YAC coverage of human chromosome 11 Perlin, M.W., Duggan, D.J., Davis, K., Farr, J.E., Findler, R.B., Higgins, M.J., Nowak, N.J., Evans, G.A., Qin, S., Zhang, J., Shows, T.B., James, M.R., and Richard III, C.W. Genomics 28(2): 315-327 1995 download |
|
Unreferred publications | Building Little Languages with Macros Felleisen, Findler, Flatt, Krishnamurthi Dr. Dobb's Journal (DDJ) April 2004 from www.ddj.org |
| | Fostering Little Languages Clements, Felleisen, Findler, Flatt, Krishnamurthi Dr. Dobb's Journal (DDJ) March 2004 from www.ddj.org |
| | An Investigation of Contracts as Projections Finder, Blume, Felleisen University of Chicago Computer Science Technical Report TR-2004-02 2004 from uc | | Abstract | Software contracts help programmers enforce program properties that the language's type system cannot express. Unlike types, contracts are (usually) enforced at run-time. When a contract fails, the contract system signals an error. Beyond such errors, contracts should have no other observable (functional) effect on the program's results. In most implementations, however, the language of contracts is the full-fledged programming language, which means that programmers may (intentionally or unintentionally) introduce visible effects into their contracts. Here we present the results of investigating the nature of contracts from a denotational perspective. Specifically, we use SPCF and the category of observably sequential functions to show that contracts are best understood as projections. Thus far, the investigation has produced a significantly faster contract implementation and the insight that our contract language cannot express all projections, which in turn has produced a new contract combinator. |
|
| | Behavioral Software Contracts (dissertation) Findler Rice University Computer Science Technical Report TR02-402 June 2002 pdf ps |
| | Object-oriented Programming Languages Need Well-founded Contracts Findler, Latendresse, and Felleisen Rice University Computer Science Technical Report TR01-372 January 2001 download |
| | Behavioral Interface Contracts for Java Findler, Felleisen Rice University Computer Science Technical Report TR00-366 August 2000 download |
| | Modular Abstract Interpreters Findler Undergraduate Senior Thesis 1995 pdf |
|
|