You're awesome. I've been playing around with a dependency network in JS recently, and I'd just been puzzling over exactly that question: how best to handle the case where a computation has side-effects. So I'm now busy googling concurrent revisions and self-adjusting computations. Got any further references to throw my way? Is there a standard literature on this stuff?
Actually it's a problem I'm working on right now, but I have nothing to share yet. Some sort of restricted programming model is needed, in my current system effects must be reversible and commutative, the last one being a major restriction but workable for most programs (e.g. set add is typically commutative, list add is not but can be hacked, dictionary set to the same key is not but can restricted by set once semantics).