Fri Aug 14 16:26:47 CEST 2009
Code and Variables
The VM's data structures should not be visible inside the PF language:
the machine is not reflective. This is a key difference with the
current PF implementation. This enables graph data to be used to
represent PF byte code. (Note that if reflection is necessary, it can
be implemented at a greater expense by _copying_ from graph -> linear
memory and back.)
The remaining problem is then the representation of variables.
Essentially a variable is a box that's referenced by code.
CODE -> BOX
This BOX can then be loaded on the data stack to enable the PF machine
to modify its contents.
But. What can be put in a box? What if a box disappears? Hmm.. not
done yet. Basicly it seems that a box needs to be an aref. What if
an aref contains a list? Yes.. plenty of pitfalls..
This can be solved by changing the semantics of finalizers: they take
objects instead of constant's pointer. By tagging constant with 00
nothing really changes though.
So, finalizers take objects: this means that linear structures can be
embedded in an aref: if an aref becomes unreachable, an RC-- will
ripple through the list.