[cells-devel] Interesting cells issue, synapses to the rescue

Ken Tilton kennytilton at optonline.net
Thu Oct 11 05:06:25 UTC 2007


Events are always a problem for a Cells-driven model, which being 
declarative is more of a steady-state paradigm: each cell rule is 
authored in the midset of "if the rest of the world is such and such, 
then I am so-and-so".

What I have been seleing as a general solution to the event problem is:

(c? (case (^event)
       (this (derive-this self))
       (otherwise .cache)))

..where .cache is my current value. ie, as far as this rule is 
concerned, any event other than 'this means nothing to me and I wish I 
did not even have to worry about it.

The problem I ran into is that my derive-this returned some other model 
instance, and as other events ignored by this rule transpired, that 
model instance ceased to be. So the slot in question now held a dead 
instance and returned it when the slot got queried. This happened in 
turn because models are cells-mediated and normally when the instance 
ceased to be some dependency would have kicked off the above rule and it 
would have returned nil or some new instance, but...

...when some event other than 'this came through, the rule ran and the 
cell ended up dependent only on the event cell. Rules depend only on the 
things they touched in their last invocation, and when some other event 
comes through the only cell touched is the event cell. uh-oh.

What is needed is a cells-aware way of saying I /really/ do not want to 
know about other events, and that is the kind of thing I use synapses 
for. A synapse is like an flet or labels function, a cell internal to a 
rule. I have not bundled up the new synapse to look all clever so a lot 
of wiring shows but in the end it will just be something like:

   (c? (case (f-find (^event) '(this that))
         (this ...)
         (that ...)))

...and the rule will fire only when the event is thos or that, meaning 
any/all dependencies established during the processing of this or that 
will stay around until another event this or that occurs.

kt



More information about the cells-devel mailing list