Promises: limited specifications for analysis and manipulation

Structural change in a large system is hindered when information is missing about portions of the system, as is often the case in a distributed development process. An annotation mechanism called promises is described for expressing properties that can enable many kinds of structural change in systems. Promises act as surrogates for an actual component, and thus are analogous to "header" files, but with more specific semantic information. Unlike formal specifications, however, promises are designed to be easily extracted from systems and managed by programmers using automatic analysis tools. Promises are described for effects, unique references, and use properties. By using promises, a component developer can offer additional opportunity for change (flexibility) to clients, but at a potential cost in flexibility for the component itself. This suggests the possibility of using promises as a means to allocate flexibility among the components of a system.

[1]  Daniel Jackson Aspect: detecting bugs with abstract dependences , 1995, TSEM.

[2]  Henry G. Baker,et al.  “Use-once” variables and linear objects: storage management, reflection and multi-threading , 1995, SIGP.

[3]  Paulo Sérgio Almeida Balloon Types: Controlling Sharing of State in Data Types , 1997, ECOOP.

[4]  Pierre Jouvelot,et al.  Algebraic reconstruction of types and effects , 1991, POPL '91.

[5]  William F. Opdyke,et al.  Refactoring object-oriented frameworks , 1992 .

[6]  David E. Evans,et al.  Static detection of dynamic memory errors , 1996, PLDI '96.

[7]  Naftaly H. Minsky Towards Alias-Free Pointers , 1996, ECOOP.

[8]  Mads Tofte,et al.  Implementation of the typed call-by-value λ-calculus using a stack of regions , 1994, POPL '94.

[9]  Stephen J. Garland,et al.  Larch: Languages and Tools for Formal Specification , 1993, Texts and Monographs in Computer Science.

[10]  Alexander Aiken,et al.  Better static memory management: improving region-based analysis of higher-order languages , 1995, PLDI '95.

[11]  William G. Griswold,et al.  Automated assistance for program restructuring , 1993, TSEM.

[12]  William L. Scherlis Small-scale structural reengineering of software , 1996, ISAW '96.

[13]  K. R Leino,et al.  Towards Reliable Modular Programs , 1995 .

[14]  Yang Meng Tan,et al.  LCLint: a tool for using specifications to check code , 1994, SIGSOFT '94.

[15]  Yang Meng Tan Formal specification techniques for promoting software modularity, enhancing documentation, and testing specifications , 1994 .

[16]  Matthias Felleisen,et al.  Componential set-based analysis , 1997, TOPL.

[17]  Pierre Jouvelot,et al.  Polymorphic type, region and effect inference , 1992, Journal of Functional Programming.

[18]  John C. Reynolds,et al.  Syntactic control of interference , 1978, POPL.

[19]  John Hogg,et al.  Islands: aliasing protection in object-oriented languages , 1991, OOPSLA '91.

[20]  Henry G. Baker,et al.  Lively linear Lisp: “look ma, no garbage!” , 1992, SIGP.