UNDO . SYSTEMS

A field guide to reversible computing.
Notes from a long afternoon in the library.

Vol. III / No. 7 / Spring

Thesis — 01

Every running system is a private library of states — a quiet collection of versions of itself. To undo is not to erase, but to remember well: to keep enough of the past on hand that the present is never the only option.

Fig. 1.

Two states & the thread between. The undo path is the dotted one.

II.

The Three Principles

i.

Of journals.

A reversible system keeps a journal — not for nostalgia, but for navigation. The journal must be append-only, append-cheap, and read-friendly.

ii.

Of inverses.

For every action there must be an inverse, or a sufficient reconstruction. Where neither is possible, the action is a commitment, and must be marked as such.

iii.

Of patience.

An undo system rewards patience. The user need not race the system; the system has waited.

III.

A small interface.

interface UndoableSystem<S, A> {
  apply(state: S, action: A): S;
  invert(action: A): A | null;
  journal: Journal<A>;
}

Reading List

  • [01] On Reversible Computation — Bennett, 1973
  • [02] Logical Reversibility — Landauer, 1961
  • [03] Time-Travel for the Working System — Marginalia, 2014
  • [04] Patience & the Long Index — an unpublished pamphlet

Set in JetBrains Mono, Spectral, and EB Garamond. Compiled in a quiet room.