Live programming allows programmers to edit the code of a running program and
immediately see the effect of the code changes. This tightening of the
traditional edit-compile-run cycle reduces the cognitive gap between program code
and behavior, improving the learning experience of beginning programmers while
boosting the productivity of seasoned ones. Unfortunately, live programming is
difficult to realize in practice as imperative languages lack well-defined
abstraction boundaries that make live programming responsive or its feedback
comprehensible.
This paper enables live programming for user interface programming by cleanly
separating the rendering and non-rendering aspects of a UI program, allowing the
display to be refreshed on a code change without restarting the program. A type
and effect system formalizes this separation and provides an evaluation model
that incorporates the code update step. By putting live programming on a more
formal footing, we hope to enable critical and technical discussion of live
programming systems.