I don't follow your logic. Modifications of refs within a transaction retry too.
On Mar 5, 11:56 am, Mark Engelberg <mark.engelb...@gmail.com> wrote: > On Wed, Mar 3, 2010 at 5:20 PM, Rick Moynihan <rick.moyni...@gmail.com>wrote: > > > > > If you have a single value representing the whole world, then it seems > > that protecting it with an atom would be the simplest and most > > idiomatic solution. > > ... > > > For a single value > > there seems to be little reason to adopt refs, ... > > I disagree. The problem with atoms is that updating an atom is a > side-effect that cannot (typically) participate safely in a transaction. It > might be retried, so if for example, you want to increment the contents of > an atom, it might get incremented multiple times which is generally not okay > (if you're storing something in a cache, then a retry might be okay). > > If you make a design decision to use an atom, you are effectively committing > to never, ever being able to update that atom within a transaction. > > In my opinion, this has major implications and is a decision that should not > be taken lightly. In a language like Clojure, we should strive to write > things that are as side-effect free as possible, so they can participate in > transactions. Using atoms runs the risk of creating headaches later, so > unless you're 100% sure the semantics of your program won't change if they > are retried, or if you're 100% sure you'll never want to change the contents > of the atom as part of a sequence of logic involving setting other refs, > don't use atoms. > > refs can do everything atoms can do and more. They are slightly slower, > perhaps, but much safer. So unless you have an explicit performance reason > to use atoms and have thought through the implications, the simplest design > choice is to prefer refs. -- 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 Note that posts from new members are moderated - please be patient with your first post. 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