105
The persistent address space in Palimpsest greatly enhances the ease and precision of
conflict detection, local investigation of editing histories, and persistent selection manage-
ment. For a Palimpsest-based system, anchor management of hypertext links is almost auto-
matic. This is a direct result of a pointing system that creates pointers that are valid across
revisions without requiring active maintenance. The usefulness of persistent pointers of
various sorts has been noted by others. Fischer and Ladner (Fischer and Ladner 1979)exam-
ined data structures for the management of “sticky pointers.” Their data structure facilitates
the in-memory management of persistent pointers during editing, rather than the distrib-
uted, persistent management of editing histories, but the basic concepts and mechanisms are
quite similar.
Alan Dix has explored the notion of “dynamic pointers” (Dix 1991; Abowd and Dix 1992;
Dix 1995) to track data contexts across various forms of update and change. Applied to
change tracking, dynamic pointers take an intermediate position between Palimpsest ad-
dresses, which are fully persistent, and operational transformation, in which operations
themselves are dynamically translated against each other. The insight behind Dix’s dynamic
pointers is that if the translation of operations is specified for every possible pair of opera-
tions, the pointers can be updated easily. For all of these transformations, only the offsets in
other commands are actually being updated. By treating those offsets as pointers, the com-
mands themselves need not be translated, but can be specified in terms of an effect relative
to particular dynamic pointers. Each command has a specified update function for any point-
ers in its vicinity that defines how they should be updated when it is executed or undone.
This single transformation function for the dynamic pointers suffices to transform any op-
eration to account for the effects of any other operation issued by a collaborator. Thus, dy-
namic pointers are in one way of generalizing the notion of operational transformation. Like
operational transformation, this method still depends on collaborating instances of an appli-
cation having sufficient knowledge of other instance’s states to know what dynamic pointers
The persistent address space in Palimpsest greatly enhances the ease and precision of
conflict detection, local investigation of editing histories, and persistent selection manage-
ment. For a Palimpsest-based system, anchor management of hypertext links is almost auto-
matic. This is a direct result of a pointing system that creates pointers that are valid across
revisions without requiring active maintenance. The usefulness of persistent pointers of
various sorts has been noted by others. Fischer and Ladner (Fischer and Ladner 1979)exam-
ined data structures for the management of “sticky pointers.” Their data structure facilitates
the in-memory management of persistent pointers during editing, rather than the distrib-
uted, persistent management of editing histories, but the basic concepts and mechanisms are
quite similar.
Alan Dix has explored the notion of “dynamic pointers” (Dix 1991; Abowd and Dix 1992;
Dix 1995) to track data contexts across various forms of update and change. Applied to
change tracking, dynamic pointers take an intermediate position between Palimpsest ad-
dresses, which are fully persistent, and operational transformation, in which operations
themselves are dynamically translated against each other. The insight behind Dix’s dynamic
pointers is that if the translation of operations is specified for every possible pair of opera-
tions, the pointers can be updated easily. For all of these transformations, only the offsets in
other commands are actually being updated. By treating those offsets as pointers, the com-
mands themselves need not be translated, but can be specified in terms of an effect relative
to particular dynamic pointers. Each command has a specified update function for any point-
ers in its vicinity that defines how they should be updated when it is executed or undone.
This single transformation function for the dynamic pointers suffices to transform any op-
eration to account for the effects of any other operation issued by a collaborator. Thus, dy-
namic pointers are in one way of generalizing the notion of operational transformation. Like
operational transformation, this method still depends on collaborating instances of an appli-
cation having sufficient knowledge of other instance’s states to know what dynamic pointers