What is the performance penalty? On Sep 23, 5:21 am, Alyssa Kwan <alyssa.c.k...@gmail.com> wrote: > This is in reference > tohttp://groups.google.com/group/clojure/browse_frm/thread/d6deac0c34d0.... > > Hi everyone! > > I have hacked the Clojure core to add durability to refs. The syntax > to create these is (dref <val> <key> <path>), where <key> and <path> > are strings. Then you use them just like refs. Creating a dref > creates a global identity, such that subsequent dref calls to the same > key and path will get the same dref. On subsequent dref calls, the > <val> will be ignored and the persisted value used. This includes in > subsequent VM instances. > > Get it here: git://github.com/kwanalyssa/clojure.git > > 1. <path> refers to BDB JE databases which get created in the "data" > directory of your project. > 2. BDB JE is used. I'm ignorant of IP and licensing issues. Making > BDB JE core to Clojure is probably an issue. > 3. Currently only a subset of Clojure primitives types is supported. > No BigDecimal or Ratio yet. See the comprehensive list (and > serialization mappings) at the bottom of src/jvm/clojure/lang/ > DRef.java. BDB JE TupleBindings are used. Submissions welcome, > especially for the persistent data structures. > 4. How do we approach the problem of storing objects with lexical > environments? > 5. Unit tests welcome! I didn't do TDD since the work is in Java and > there's no Java-level tests in the project. Please add your own in > test/clojure/test_clojure/drefs.clj. I'm new to concurrency, so tests > along those lines would be awesome! > 6. The ACID part is not really guaranteed!!! STM is currently one- > phase-commit. I inserted two-phase-commits to the data stores in the > middle of the one-phase-commit. There's the remote possibility that > STM in-memory changes fail AFTER writing to disk. It's REALLY remote, > but it is possible. STM would have to be made 2PC to make this > airtight. That's way beyond my current grasp of both concurrency and > Clojure implementation. > 7. I was aiming for an API where <path> is optional. However, I > didn't want to stray from the ref API, which has variable arity. > Suggestions on how to reconcile the two are welcome! > 8. To maintain global identity, I use a static cache, which requires > non-hard references to avoid OOM issues. This is my first time doing > this, so please check my code to make sure that I'm doing it right. > I'm using SoftReferences, though WeakReferences may be better for real- > life usage patterns. Let me know! > > Please dig in! Feedback appreciated! > Alyssa Kwan
-- 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