The concepts, as well as the Clojure implementation, presented in this article, may be useful for those designing and implementing some of the "distributed wiki" and "load-balancing" capabilities of 2.X; also for "realtime group editing" features I've seen mentioned in the survey. Also, the concepts here could help in designing finer-grained, yet "federalized/distributed" locking for concurrent access e.g. which might be needed for "collaborative" or simultaneous editing of xwiki documents, as well as load-balanced wikis. This also isn't just "starry eyed theory" -- via JSR223, these features could be integrated into the Xwiki Java API, giving a "concurrent scripting face" to the Xwiki API running on multiple wiki hosts. (see http://groups.google.com/group/clojure/msg/ad811b69d448e3db re JSR-223 status of Clojure). Software Transactional Memory <http://java.ociweb.com/mark/stm/article.html>
- Overview <http://java.ociweb.com/mark/stm/article.html#Overview> - Lock-based Concurrency<http://java.ociweb.com/mark/stm/article.html#Locks> - Actor-based Concurrency<http://java.ociweb.com/mark/stm/article.html#Actors> - Transactional Memory <http://java.ociweb.com/mark/stm/article.html#TM> - Software Transactional Memory<http://java.ociweb.com/mark/stm/article.html#STM> (STM) - Persistent Data Structures<http://java.ociweb.com/mark/stm/article.html#PersistentDataStructures> - STM Implementations<http://java.ociweb.com/mark/stm/article.html#STMImplementations> - Clojure Overview<http://java.ociweb.com/mark/stm/article.html#ClojureOverview> - Clojure Reference Types<http://java.ociweb.com/mark/stm/article.html#ClojureReferenceTypes> - Clojure Validators and Watchers<http://java.ociweb.com/mark/stm/article.html#ClojureValidatorsAndWatchers> - Clojure STM - High Level<http://java.ociweb.com/mark/stm/article.html#ClojureSTMHigh> - Clojure STM - Low Level<http://java.ociweb.com/mark/stm/article.html#ClojureSTMLow> - Conclusion <http://java.ociweb.com/mark/stm/article.html#Conclusion> - References <http://java.ociweb.com/mark/stm/article.html#References> Clojure has built-in support for Concurrency: ( http://java.ociweb.com/mark/clojure/article.html#Concurrency ) > Managing concurrency with locks is hard. It requires determining which > objects need to be locked and when they need to be locked. These decisions > need to be reevaluated when the code is modified or new code is added. If a > developer forgets to lock objects that need to be locked or locks them at > the wrong times, bad things can happen. These include > deadlocks<http://en.wikipedia.org/wiki/Deadlock> > and race conditions <http://en.wikipedia.org/wiki/Race_condition>. If > objects are locked unnecessarily, there is a performance penalty. Support for concurrency is one of the main reasons why many developers > choose to use Clojure. All data is immutable unless explicitly marked as > mutable by using the reference types > Var<http://java.ociweb.com/mark/clojure/article.html#Vars> > , Ref <http://java.ociweb.com/mark/clojure/article.html#Refs>, > Atom<http://java.ociweb.com/mark/clojure/article.html#Atoms> > and Agent <http://java.ociweb.com/mark/clojure/article.html#Agents>. > These provide safe ways to manage shared state and are described in the next > section titled "Reference > Types<http://java.ociweb.com/mark/clojure/article.html#ReferenceTypes> > ". Niels http://nielsmayer.com _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

