[cells-devel] Cells II Functional Requirements

Michael Naunton michael at naunton.us
Tue Jun 8 02:54:18 UTC 2004


So, (where = is an arbitrary function of)

B = X
A = B

I can see how to gate on B such that A remains quiescent.

What about:

B = X
C = B
A = X+C+B

After X changes, A and B need to move to S+.  How do you get the
ordering between A and B such that A only gets recomputed once?  I could
just recompute A, recomputing B recursively as needed, but surely C must
be marked as "possibly needing recomputation" on dX, i.e. we must
traverse all recursive dependants of X.

Is the recursive step needed, or am I missing something obvious here?

-- Michael


On Mon, 2004-06-07 at 21:51, Kenny Tilton wrote:
> Cells II seems to be OK, and is back at work running Cello as well as 
> passing its regression tests. It will be released when I figure out 
> whether to put everything up on the Cells or Cello project. I plan from 
> here out to focus more on developing a commercial title (using Cello) 
> than on porting Cello. This may mean I will not even look at OS X until 
> the commercial title is ready to go and I want the OS X version (I 
> will). This also means I want a very simple way to share my ongoing work 
> on Cello/Cells and the easiest will be to have one cvs repository I 
> update periodically.
> 
> Anyway, for now, here is the spec which guided the Cells II rewrite:
> 
> Suppose the application is at some steady state S in which all Cells
> (slots of instances) are either inputs (what I used to call c-variable)
> or have been computed from other Cells.
> 
> Now the application polls a socket or OS event stream and gets a new 
> input, which leads to some cell X being assigned a new value.
> 
> Suppose also the new value for X is different from the prior value 
> (according to a user-definable test). We now have not just a write 
> operation but also a semantically meaningful change to X, so we also
> consider a new state S+ to have been established, with X being the 
> only Cell to have reached state S+.
> 
> Now suppose there exists some cell A which depends only on cell B which 
> depends only on X. Suppose also that when cell B gets recomputed to 
> reach state S+, the change test for B's new value indicates "no change". 
> Let us then say B is dependent on the change to X but /unaffected/ by it.
> 
> At this point, all data points other than X are obsolete. Formally:
> 
>  dX establishes state S+;
>  X is by definition affected by dX, and reaches S+ trivially;
>  all state unaffected by dX is considered to be at state S+;
>  all other state is still at S.
> 
> Cells is responsible for automatically ensuring all data points reach
> state S+ within these constraints:
> 
> [] completeness: all non-lazy cells affected by X will be recomputed
> 
> [] consistency: once state S+ exists, computations should involve 
> values only from state S+. Note that this means state S++ cannot be allowed 
> to arise during the transition from S to S+.
> 
> [] effciency: only cells affected by X get recomputed, only once, and 
> only those cells which change will be scheduled for output.
> 
> [] useability: no re-entry of cell computation code, mainly so that
> programmers need not worry about it.
> 
> 
> kt
> 
> 
> 
> _______________________________________________
> cells-devel site list
> cells-devel at common-lisp.net
> http://common-lisp.net/mailman/listinfo/cells-devel






More information about the cells-devel mailing list