Robby Findler's Publications (with selected abstracts)

sorted by year | sorted by venue

Conference 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
Robby Findler