[Date Prev][Date Next][Thread Prev][Thread Next][Author Index][Date Index][Thread Index]
Is the list alive?
- To: udanax@xxxxxxxxxx
- Subject: Is the list alive?
- From: "David G. Durand" <david@xxxxxxxxxxxxxxxxxxx>
- Date: Wed, 23 Feb 2000 12:16:10 -0500
This is a repost of my earlier mail, as requested by Roger Gregory.
This is a spare time project for me, so I haven't been able to update
this at all, but here it is, for what it's worth.
I have made a few resources available (on a relatively low-powered
machine in my house):
http://grendel.conlang.org/~dgd/udanax/ is a rough and ready
Smalltalk browser created from the export files on the udanax.com web
site.
A few of the root classes in the Gold source tree are not present in
the distributed files (Object, some others) When you select those
classes fromt he TOC, you get a 404. There are only about 5-6 classes
missing, so don't let the few broken links discourage you -- there's
a lot of code there.
http://grendel.conlang.org/~dgd/green_doc/cxref.html is an HTML cross
reference listing created with the free cxref tool. It lets you
browse by function and file.
Here's what I've learned and some of the questions that I still have.
I was waiting for more than a decade in anticipation of seeing how
Xanadu (now Udanax) actually works. I've not found that the raw
source code provides clear and easy answers to that question,
although some general features are rather clear. I'd encourage anyone
with overview insights to contribute to do so.
My own examination shows that the fundamental "model-T" enfilade
appears to be a balanced tree of totally ordered content addresses.
The simplest approach to managing such a data structure for multiple
versions, with data sharing, is to use a technique that I've always
called "copy-to-root". The udanax code instead inserted some sort of
node representing a permutation or alteration in place at every
ancestor where the child relations change for a given version. I
believe that these "node-level diffs" are called "orgls", but can't
quite tell.
The loaf/crum management is a basic explicitly managed virtual
memory, with in memeory use-counts managed in the code. Link
management is based on a "2-D" enfilade which seems to manage
starting points and widths of linked areas, with linked lists of
pointers to the original data in the I-stream.
Again, any verification of this stuff would be welcome.
The Smalltalk code is more scrutable, but also more ambitious. It
seems to contain a certain amount of dead code, as well as many
classes for process management and the like that are not so closely
related to the fundamental algorithms (at least the pure data
management ones).
The key generalization seems to have been to generalize the original
algorithsm. The original code seems to be very specialized to the
management of permutations (+ insertions + deletions) of a total
ordering, as that ordering changes to create multiple versions, as
well as to the efficient location of sequence elements in arbitrary
states of that sequence based on a fundamental identity (i-stream
address).
In the generalized code, the sequence is replaced by an arbitrary
address space, which can be any algebraic structure (set of items
with significant relations between them). Contents are associated
directly (by identity) with elements of the address space by a
mapping. Operations are represented by transformations (or complete
replacement, or incremental replacement?) of the address->data
mappings. This means that handling n-d (and indeed arbitrary)
topologies can be handled uniformly within a single structure. I
assume that this structure is the fabled Ent.
I don't quite understand how WIDativity and DSPativity are used to
enable the efficient creation of compositional maps for this. I get
lost in the code, but the Ent seems to be a hierarchical
representation of a series of maps. The top level represents large
scale rearrangements, and yields a precise state when composed with
the smaller scale maps whose results form its input. Such a
composition is a way to retrieve a single state of the base address
space. However, there must be an efficient way to select from
alternative maps at each level, so that a particular state can be
selected.
This might be a big tree, with hashtables at each node, with elements
of the hashtable being alternative maps for that node, keyed off of
the version identifier of a given state (a Bert, right?).
Any insights into this would be appreciated.
-- David
--
_________________________________________
David Durand dgd@xxxxxxxxx \ david@xxxxxxxxxxxxxxxxxxx
http://cs-people.bu.edu//dgd/ \ Director of Engineering
Graduate Student no more! \ Dynamic Diagrams
--------------------------------------------\ http://www.dynamicDiagrams.com/
\__________________________
_________________________________________
David Durand dgd@xxxxxxxxx \ david@xxxxxxxxxxxxxxxxxxx
http://cs-people.bu.edu//dgd/ \ Director of Development
Graduate Student no more! \ Dynamic Diagrams
--------------------------------------------\ http://www.dynamicDiagrams.com/
\__________________________