"rhickey added TransactionalHashMap, an implementation of
java.util.ConcurrentHashMap that works in/with transactions"
http://clojure-log.n01se.net/date/2008-08-01.html#09:36
It looks to me like it's mutable, but all the data is actually stored
in refs, so you can only do your mutations in a transaction:
(def x
(dosync
(doto (clojure.lang.TransactionalHashMap.)
(put :a 1)
(put :b 2))))
So: thread safe, transactional, mutable ConcurrentHashMap. Maybe it'd
be useful for passing into Java libs?
Unfortunately you apparently can't print them in SVN 1063:
java.lang.ClassCastException: clojure.lang.PersistentHashMap cannot be
cast to java.util.Collection
at clojure.lang.TransactionalHashMap.entrySet(TransactionalHashMap.java:127)
at clojure.lang.RT.seqFrom(RT.java:463)
at clojure.lang.RT.seq(RT.java:452)
at clojure.seq__28.invoke(boot.clj:92)
at clojure.fn__1952$fn__1954.invoke(boot.clj:3524)
at clojure.print_ctor__1889.invoke(boot.clj:3433)
at clojure.fn__1952.invoke(boot.clj:3517)
at clojure.lang.MultiFn.invoke(MultiFn.java:152)
at clojure.lang.Var.invoke(Var.java:323)
at clojure.lang.RT.print(RT.java:1165)
at clojure.lang.Repl.main(Repl.java:88)
--Chouser