I like it. I can see significant use of these to help speed up some of the benchmark programs I've been hacking on:
git://github.com/jafingerhut/clojure-benchmarks.git and more importantly, that means they can be good in optimizing useful code, too :-) I was pondering this question "If a pure function mutates some local data in order to produce an immutable return value, is that ok?" that Rich posed just a day or three ago, when thinking about whether there was a way to automatically determine whether a function is pure / "referentially transparent" or not (at least for a useful subset of actual Clojure code). In particular, Clojure's str function does this already with StringBuilder.append: (defn str ;; doc string deleted for brevity ([] "") ([#^Object x] (if (nil? x) "" (. x (toString)))) ([x & ys] ((fn [#^StringBuilder sb more] (if more (recur (. sb (append (str (first more)))) (next more)) (str sb))) (new StringBuilder #^String (str x)) ys))) Very nice to see the idea generalized to Clojure data structures, too, and the safety nets built into it in case someone forgets to call "persistent!" on a data structure before using it in another thread. Thanks, Andy On Aug 3, 2:25 pm, Rich Hickey <richhic...@gmail.com> wrote: > I've been doing some work on Transient Data Structures. You can read > about them here: > > http://clojure.org/transients > > Feedback welcome, > > Rich --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---