I am not sure if I understood correctly, but you may want to take a
look to Gemstone. As far as I remember they can have not only
different versions of a certain class at the same time, but also
instances of a specific class version all living together at the same
time.
Thanks for the pointer, but yeah, I know about Gemstone. Our ideas are
slightly different however...
The idea is more to have multiple versions of the same live instance at
the same time in memory; depending on the version of the code they are
related to. This threads running in different versions can look at the
same instances but have a slightly different view on the object graph.
The only objects that will have different versions are global objects,
hence the thread-local pools to avoid overhead when unnecessary. Then
since threads are related to versions, we would have different heaps for
the different versions of the global space.
For example in the case of the alias debugger, the debugger has a view
on the world that is completely aliased. Its version of the heap will
look like that. The rest of the code would however immediately break if
it would access the global state in that format since the alias-wrappers
are unexpected. So we have 2 versions of the global heap, 1 with aliases
and 1 without.
For further reading, look at Erwann's active context.
cheers,
Toon