Jordan Henderson jordan@Starbase.NeoSoft.COM
Tue, 20 May 1997 21:12:18 -0500 (CDT)

Chris Bitmead writes:
> Jordan Henderson writes:
> >You could just set the global default to be no versioning, if that's 
> >what you want.  Of course, you never know when you might WANT to go
> >look at an old value of FOO, or an old definition of Set-cursor, etc.
> Except it still wouldn't work, because how does the old version of
> FOO, know which of it's internal objects correspond to itself? That is
> unless you have every reference in the system carry both a pointer AND
> a version id.

Well, it's clear that there are some details I hadn't considered.

> >It doesn't make sense, of course, to turn off versioning for individual
> >cons cells that aren't referred to by symbols, because you'd have no
> >way to refer to the cons cell in the first place to specify the new
> >versioning parameters.
> >
> >I'll rephrase my position so it's immune to the extreme case you cite.
> >Versioning should be supported for any object that has a named reference
> >to it at a very low level. 
> But you still can't win. What if named reference "Treasure Island"
> points to several chapters with named refererences "Chapter 1",
> Chapter 2" etc. Now at time T you make some changes to several
> chapters. Later you decide you didn't like those changes, and want to
> go back to the time immediately before time T. See? The information is
> lost. Without sensible application level support, versioning is
> meaningless.
> Worse, if you undo the latest change from one object, you could leave
> things in an inconsistent state with dangling references.

I don't see why it must be deferred to an application level.  It's a 
problem in directed graphs.  If an object-A refers to objects that change,
then a new version of object-A has to be created.  In fact, it's more
in the spirit of a Lisp system for the system to attempt to handle this
for you, behind your back.  If application level support is required for
versioning to work, we're in much the same situation we are today with
C applications doing memory management, difficult-to-debug problems 
leaving dangling references.

I admit that I haven't thoroughly thought out the consequences of 
attempting such transparent low-level support for versioning.  If it
were feasible, it would make database backup fairly straightforward
and it might allow other interesting applications.  

It does bring up fairly complicated relationships to have
low-level versioning on objects that manage the low-level versioning. 
The kind of thing a MOP is for, I guess.  As I said, I don't know if 
this is feasible.