your mail

Armin Rigo
Tue Nov 26 05:07:01 2002


On Mon, 25 Nov 2002, Gustavo Lacerda wrote:
> "For example, a Lisp source file describes a tree. Apart from the implicit
> root, the nodes are cons cells, nil, or literals. The former has two "up"
> ports, car and cdr. All nodes have a "down" port, usually called its
> address, its identity, or whatever. When the program runs, the tree might
> cease to be a linear graph because of sharing -- in which case you have
> several "pointers" to the same node, i.e. several edges connecting to its
> "down" port."
> Can you give me an example of such a source file, and why it would cease to
> be a linear graph?

The Lisp source files describe a tree (all trees are linear graphs). But
when you execute your Lisp code, you will execute intructions that modify
that structure; something that could happend is that we duplicate a
pointer to a node. For example, you may store '(car x)' into '(car y)'.
Then the "down" port of the now-shared node is no longer stricly speaking
linear, because it is linked to both the 'car' of x and the 'car' of y.

Well, that was just an example. While I've been thinking more about graph
reductions, it now seems interesting to explicitely allow non-linearity in
some situations. For example, althought one can always make a graph
explicitely linear by replacing the non-linear link

           _- Y
   X <---_
            - Z

with three links and a new "copy" node

               _- Y
    X ---copy_
                - Z

there are levels of abstractions at which the upper situation is just the
way to go because it directly models the idea that we can go from Z to X,
or from Y to X, but not easily back --- e.g. following a pointer.

> This sounds very interesting. I would like to work on it too, and I have a
> lot of time. Do you have any suggestions?

I don't know. Not much work has been done recently at Tunes in this area.
I'll try to copy my message to the mailing list.