  Live programming environments enable programmers to edit a running program
and obtain immediate feedback on each individual change. The liveness quality
is valued by programmers to help work in small steps and continuously add or
correct small functionality while maintaining the impression of a direct
connection between each edit and its manifestation at run-time. Such immediacy
may conflict with the desire to perform a combined set of intermediate steps,
such as a refactoring, without immediately taking effect after each individual
edit. This becomes important when an incomplete sequence of small-scale changes
can easily break the running program. State-of-the-art solutions focus on
retroactive recovery mechanisms, such as debugging or version control. In
contrast, we propose a proactive approach: Multiple individual changes to the
program are collected in an Edit Transaction, which can be made effective if
deemed complete. Upon activation, the combined steps become visible together.
Edit Transactions are capable of dynamic scoping, allowing a set of changes to
be tested in isolation before being extended to the running application. This
enables a live programming workflow with full control over change granularity,
immediate feedback on tests, delayed effect on the running application, and
coarse-grained undos. We present an implementation of Edit Transactions along
with Edit-Transaction-aware tools in Squeak/Smalltalk. We asses this
implementation by conducting a case study with and without the new tool
support, comparing programming activities, errors, and detours for implementing
new functionality in a running simulation. We conclude that workflows using
Edit Transactions have the potential to increase confidence in a change, reduce
potential for run-time errors, and eventually make live programming more
predictable and engaging.
