Chris Bitmead uid
Tue, 20 May 1997 10:46:15 +1000

>> 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.

What is an invariant reference?

>> 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.

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.

>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

Worse, if you undo the latest change from one object, you could leave
things in an inconsistent state with dangling references.

>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.