Abstract
This talk explores three approaches to optimizing the performance of programs using persistent structures. The first approach consists in optimizing purely functional structures by increasing the arity of tree leaves and nodes. The second approach consists in exploiting edge effects to achieve persistence. The third approach consists in modifying the interface by allowing non-persistent transient versions, using the technique known as " transience ". I'll show how to implement these three approaches on various structures: stacks, queues, arrays, and breakable and concatenable sequences.