I'm pretty sure I don't want an agent based model. I want clear transactional semantics. However, there is no reason both should not exist.
On Mar 3, 9:11 am, Anand Patil <anand.prabhakar.pa...@gmail.com> wrote: > On Mar 3, 1:04 pm, Rich Hickey <richhic...@gmail.com> wrote: > > > I think it is important to embrace asynchrony and concurrency as > > Clojure does. Any Cells-for-Clojure that presumes the world is a > > single synchronous chain of events would be a misfit. The whole notion > > of a 'current step' is suspect. > > I'd appreciate it if my asynchronous lazy cells got a look, as I've > given them a few revisions now. They're > athttp://github.com/onyin/lazy-agent/tree. > They don't have any global counter, but the diamond pattern is no > problem for them. As noted in an earlier thread, my def-cell macro is > not as nice as it could be, but it wouldn't be hard for someone who is > good at macros to write a quick wrapper. > > The readme: > > Implements two types of agent-based 'cells' for Clojure: lazy agents > and oblivious agents. These complement the auto-agents available in > Clojure Contrib. Both allow for concurrent cell updates with > respectably efficient scheduling and avoid unnecessarily repeating > cell updates. > > If you deref a lazy cell, you'll see a map: {:value xxx :status > yyy}. :status may be :needs-update, :updating, :up-to-date > or :oblivious. If a cell is up-to-date or oblivious, :value gives the > value of the cell. > > When a lazy agent's ancestor changes, its value changes to {:value > nil :status :needs-update} but it does not compute its new value until > it receives a message instructing it to do so. To send the update > message to a group of agents, do (update a b c d e). To send the > update message and wait for the values, do (evaluate a b c d e). > > Oblivious agents are even lazier than lazy agents. When an oblivious > agent is up-to-date, its status is :oblivious. If an ancestor > subsequently changes, the oblivious agent will not do anything. It > needs to receive a 'force-need-update' message to change state to > {:value nil :status :needs-update}, but then it starts watching its > parents for changes like a lazy agent until it computes. > > Anand --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---