Jordan Henderson jordan@Starbase.NeoSoft.COM
Mon, 19 May 1997 19:33:23 -0500 (CDT)

Chris Bitmead writes:
> Jordan Henderson writes: 
> >I think we should base all design decisions on experience, where available.
> >I vote that any persistent object have a default versioning that is, at 
> >a minimum, very crude, just based on version numbers where the accessing
> >the most current version requires no specification of version at all.  
> I find the possibility of every persistent object having versioning
> numbers, including cons cells, and so on, to be pretty silly,
> semantically and efficiency-wise.
> What use are you going to make of a cons cell with a version number?

Well, when I said every object, I suppose I should have qualified that a
bit.  Any object that can have an invariant reference applied to it, like
those associated with interned symbols, could have a version number.

> >This
> >would be like the file system versioning available in VMS, which I claim is
> >superior (as a default) to the lack of versioning.  
> A traditional file system, including VMS, is a whole different kettle
> of fish to a persistent store.
> >Of course, it should be
> >possible to defeat this default versioning by setting parameters specifiying
> >the maximum number of versions to be maintained (setting this to 1 would
> >mean no versioning).
> Sounds like fun that every time you create an innocent little object
> you have to go and switch off this dratted versioning thing.

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.

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. 

Having such a facility supported at the lowest level may facilitate such
wonders as flexible tracing and reversible execution.  It should not be
regarded as a "cost" and done away with frivolously, or deferred to a 
high application level.