In an effort to develop tools for enhancing the flexibility of software and the expressiveness of programming we have been experimenting with Layering, a way of incrementally adding auxiliary information to a program, without modifying the basic text of the program. In Chapter 6 of Software Design for Flexibility (SDF) Chris Hanson and I show one approach to using layering for adding things like unit computations and support-set (provenance) computations to a program in MIT/GNU Scheme. We use the support-sets and computations in the Propagation in Chapter 7. But the layering is still pretty unpleasant.
In this talk I will show how layering can be used. I will show one way to implement it that is less limiting, but which requires (small?) changes to the underlying Scheme system (interpreter/compiler/runtime-system). I will also describe some serious issues that I do not know how to address, hoping to stimulate some good work in this direction.