Ph.D. Proposal Abstract


ViewForm: A Language for Building Program Transformation Systems

A transformation system applies a set of rewrite rules to a source program to obtain a target program. Examples of existing transformation systems include compilers, optimizers, and systems that derive concrete programs from high-level specifications. A transformation system's behavior is determined by the semantic properties of both its rewrite rules and the way in which they are applied. One potential use for transformation systems is to construct user-customizable interactive tools for automating common programming tasks. These tasks include optimizing, reusing, generalizing, debugging, and parallelizing code. When performed manually, these tasks can be both time-consuming and error-prone, especially in large programs. Unfortunately, current transformation systems are not expressive, extensible, or fast enough to be used in this way. These problems arise because current transformation systems do not make adequate use of non-local program properties, they prohibit non-semantics-preserving rewrite rules, and they limit the degree of user participation in the transformation process. In return, transformation systems gain efficiency and correctness. I claim that a language for building transformation systems need not embrace these restrictions and can yet be general enough to yield efficient, safe, and user-extensible transformation systems. To demonstrate this claim, I propose to develop ViewForm, a language for building program transformation systems. ViewForm introduces two novel constructs; transforms and views. Transforms are composable rewrite rules with independent control structures and associated explanations. An explanation is a composable description of a transform's functionality. Views are composable abstractions over a program that provide access to non-local properties such as data-flow information. I present Mini-ViewForm, a working ViewForm prototype and a running example of its use. I also present an example dialog between a programmer and a user-extensible Programmer's Assistant that I will build to demonstrate my claim. The assistant's purpose is to automate complex programming tasks such as non-local program optimizations and modifications, debugging, parallelization, and verification of program properties. The assistant will be used to debug, modify, and optimize Scmutils (a tool for solving a rich and diverse set of mathematical expressions) in ways that would not otherwise be tenable by those unfamiliar with its implementation details.


Go to Selected Papers page.