I use agents instead of atoms when the function altering the value has side effects, or is especially expensive (and thus should not retry).
I haven't had to use refs yet, but my use case would be if the mutable data has enough parallel modification that splitting one atomic map into separate ref maps would be a performance boost. On Monday, July 27, 2015 at 11:00:56 PM UTC-7, Daniel Compton wrote: > > I think this is pretty unlikely. While megarefs look very cool, I'm not > sure what the benefit to having these directly in Clojure would be over > having them in a library. > > Anecdotally, everyone I have talked to about Clojure's reference types > have said that they have never needed to use ref's or agents in real world > code (I'm sure some people have to good effect though). > > That being said, you can always open a JIRA or design doc about this if > you feel strongly about it to start a discussion. > > -- > Daniel. > > On Tue, 28 Jul 2015 at 9:05 AM Lawrence Krubner <lawr...@rollioforce.com > <javascript:>> wrote: > >> Off topic, but I wonder if there was ever any discussion of megarefs >> being added to Clojure? >> >> https://github.com/cgrand/megaref >> >> >> On Tuesday, July 21, 2015 at 3:30:46 PM UTC-4, Rangel Spasov wrote: >>> >>> Ok, I think someone already mentioned this - sorry. Got it to compile by >>> bumping to [potemkin "0.4.1"] - thanks Zach + all : ) >>> >>> On Tuesday, July 21, 2015 at 12:24:43 PM UTC-7, Rangel Spasov wrote: >>>> >>>> Hey guys, >>>> >>>> Getting this error with 1.8.0-alpha2, I think related to aleph (using >>>> 0.4.0, latest version at the moment). >>>> >>>> #error { >>>> >>>> :cause IllegalName: >>>> compile__stub.aleph.http.core.aleph.http.core/HeaderMap >>>> >>>> :via >>>> >>>> [{:type clojure.lang.Compiler$CompilerException >>>> >>>> :message java.lang.NoClassDefFoundError: IllegalName: >>>> compile__stub.aleph.http.core.aleph.http.core/HeaderMap, >>>> compiling:(aleph/http/core.clj:81:1) >>>> >>>> :at [clojure.lang.Compiler analyzeSeq Compiler.java 6798]} >>>> >>>> {:type java.lang.NoClassDefFoundError >>>> >>>> :message IllegalName: >>>> compile__stub.aleph.http.core.aleph.http.core/HeaderMap >>>> >>>> :at [java.lang.ClassLoader preDefineClass ClassLoader.java 654]}] >>>> >>>> :trace >>>> >>>> [[java.lang.ClassLoader preDefineClass ClassLoader.java 654] >>>> >>>> [java.lang.ClassLoader defineClass ClassLoader.java 758] >>>> >>>> [java.lang.ClassLoader defineClass ClassLoader.java 642] >>>> >>>> [clojure.lang.DynamicClassLoader defineClass DynamicClassLoader.java >>>> 46] >>>> >>>> [clojure.lang.Compiler$NewInstanceExpr compileStub Compiler.java 7815] >>>> >>>> [clojure.lang.Compiler$NewInstanceExpr build Compiler.java 7680] >>>> >>>> [clojure.lang.Compiler$NewInstanceExpr$DeftypeParser parse >>>> Compiler.java 7590] >>>> >>>> [clojure.lang.Compiler analyzeSeq Compiler.java 6791] >>>> >>>> [clojure.lang.Compiler analyze Compiler.java 6592] >>>> >>>> [clojure.lang.Compiler analyze Compiler.java 6553] >>>> >>>> [clojure.lang.Compiler$BodyExpr$Parser parse Compiler.java 5929] >>>> >>>> [clojure.lang.Compiler$LetExpr$Parser parse Compiler.java 6247] >>>> >>>> [clojure.lang.Compiler analyzeSeq Compiler.java 6791] >>>> >>>> [clojure.lang.Compiler analyze Compiler.java 6592] >>>> >>>> [clojure.lang.Compiler analyze Compiler.java 6553] >>>> >>>> [clojure.lang.Compiler$BodyExpr$Parser parse Compiler.java 5929] >>>> >>>> [clojure.lang.Compiler$FnMethod parse Compiler.java 5359] >>>> >>>> [clojure.lang.Compiler$FnExpr parse Compiler.java 3959] >>>> >>>> [clojure.lang.Compiler analyzeSeq Compiler.java 6789] >>>> >>>> [clojure.lang.Compiler analyze Compiler.java 6592] >>>> >>>> [clojure.lang.Compiler eval Compiler.java 6847] >>>> >>>> [clojure.lang.Compiler eval Compiler.java 6839] >>>> >>>> [clojure.lang.Compiler load Compiler.java 7295] >>>> >>>> [clojure.lang.RT loadResourceScript RT.java 372] >>>> >>>> [clojure.lang.RT loadResourceScript RT.java 363] >>>> >>>> [clojure.lang.RT load RT.java 453] >>>> >>>> [clojure.lang.RT load RT.java 419] >>>> >>>> [clojure.core$load$fn__5448 invoke core.clj 5866] >>>> >>>> [clojure.core$load doInvoke core.clj 5865] >>>> >>>> [clojure.lang.RestFn invoke RestFn.java 408] >>>> >>>> [clojure.core$load_one invoke core.clj 5671] >>>> >>>> [clojure.core$load_lib$fn__5397 invoke core.clj 5711] >>>> >>>> [clojure.core$load_lib doInvoke core.clj 5710] >>>> >>>> [clojure.lang.RestFn applyTo RestFn.java 142] >>>> >>>> [clojure.core$apply invoke core.clj 632] >>>> >>>> [clojure.core$load_libs doInvoke core.clj 5749] >>>> >>>> [clojure.lang.RestFn applyTo RestFn.java 137] >>>> >>>> [clojure.core$apply invoke core.clj 632] >>>> >>>> [clojure.core$require doInvoke core.clj 5832] >>>> >>>> [clojure.lang.RestFn invoke RestFn.java 551] >>>> >>>> [aleph.http.server$eval9251$loading__5340__auto____9252 invoke >>>> server.clj 1] >>>> >>>> [aleph.http.server$eval9251 invoke server.clj 1] >>>> >>>> [clojure.lang.Compiler eval Compiler.java 6850] >>>> >>>> [clojure.lang.Compiler eval Compiler.java 6839] >>>> >>>> [clojure.lang.Compiler load Compiler.java 7295] >>>> >>>> [clojure.lang.RT loadResourceScript RT.java 372] >>>> >>>> [clojure.lang.RT loadResourceScript RT.java 363] >>>> >>>> [clojure.lang.RT load RT.java 453] >>>> >>>> [clojure.lang.RT load RT.java 419] >>>> >>>> [clojure.core$load$fn__5448 invoke core.clj 5866] >>>> >>>> [clojure.core$load doInvoke core.clj 5865] >>>> >>>> [clojure.lang.RestFn invoke RestFn.java 408] >>>> >>>> [clojure.core$load_one invoke core.clj 5671] >>>> >>>> [clojure.core$load_lib$fn__5397 invoke core.clj 5711] >>>> >>>> [clojure.core$load_lib doInvoke core.clj 5710] >>>> >>>> [clojure.lang.RestFn applyTo RestFn.java 142] >>>> >>>> [clojure.core$apply invoke core.clj 632] >>>> >>>> [clojure.core$load_libs doInvoke core.clj 5753] >>>> >>>> [clojure.lang.RestFn applyTo RestFn.java 137] >>>> >>>> [clojure.core$apply invoke core.clj 632] >>>> >>>> [clojure.core$require doInvoke core.clj 5832] >>>> >>>> [clojure.lang.RestFn invoke RestFn.java 457] >>>> >>>> [aleph.http$eval1594$loading__5340__auto____1595 invoke http.clj 1] >>>> >>>> [aleph.http$eval1594 invoke http.clj 1] >>>> >>>> [clojure.lang.Compiler eval Compiler.java 6850] >>>> >>>> [clojure.lang.Compiler eval Compiler.java 6839] >>>> >>>> [clojure.lang.Compiler load Compiler.java 7295] >>>> >>>> [clojure.lang.RT loadResourceScript RT.java 372] >>>> >>>> [clojure.lang.RT loadResourceScript RT.java 363] >>>> >>>> [clojure.lang.RT load RT.java 453] >>>> >>>> [clojure.lang.RT load RT.java 419] >>>> >>>> [clojure.core$load$fn__5448 invoke core.clj 5866] >>>> >>>> [clojure.core$load doInvoke core.clj 5865] >>>> >>>> [clojure.lang.RestFn invoke RestFn.java 408] >>>> >>>> [clojure.core$load_one invoke core.clj 5671] >>>> >>>> [clojure.core$load_lib$fn__5397 invoke core.clj 5711] >>>> >>>> [clojure.core$load_lib doInvoke core.clj 5710] >>>> >>>> [clojure.lang.RestFn applyTo RestFn.java 142] >>>> >>>> [clojure.core$apply invoke core.clj 632] >>>> >>>> [clojure.core$load_libs doInvoke core.clj 5749] >>>> >>>> [clojure.lang.RestFn applyTo RestFn.java 137] >>>> >>>> [clojure.core$apply invoke core.clj 632] >>>> >>>> [clojure.core$require doInvoke core.clj 5832] >>>> >>>> [clojure.lang.RestFn invoke RestFn.java 1789] >>>> >>>> [cloud_monkey.aleph_netty$eval1588$loading__5340__auto____1589 invoke >>>> aleph_netty.clj 1] >>>> >>>> [cloud_monkey.aleph_netty$eval1588 invoke aleph_netty.clj 1] >>>> >>>> [clojure.lang.Compiler eval Compiler.java 6850] >>>> >>>> [clojure.lang.Compiler eval Compiler.java 6839] >>>> >>>> [clojure.lang.Compiler load Compiler.java 7295] >>>> >>>> [clojure.lang.RT loadResourceScript RT.java 372] >>>> >>>> [clojure.lang.RT loadResourceScript RT.java 363] >>>> >>>> [clojure.lang.RT load RT.java 453] >>>> >>>> [clojure.lang.RT load RT.java 419] >>>> >>>> [clojure.core$load$fn__5448 invoke core.clj 5866] >>>> >>>> [clojure.core$load doInvoke core.clj 5865] >>>> >>>> [clojure.lang.RestFn invoke RestFn.java 408] >>>> >>>> [clojure.core$load_one invoke core.clj 5671] >>>> >>>> [clojure.core$load_lib$fn__5397 invoke core.clj 5711] >>>> >>>> [clojure.core$load_lib doInvoke core.clj 5710] >>>> >>>> [clojure.lang.RestFn applyTo RestFn.java 142] >>>> >>>> [clojure.core$apply invoke core.clj 632] >>>> >>>> [clojure.core$load_libs doInvoke core.clj 5749] >>>> >>>> [clojure.lang.RestFn applyTo RestFn.java 137] >>>> >>>> [clojure.core$apply invoke core.clj 632] >>>> >>>> [clojure.core$require doInvoke core.clj 5832] >>>> >>>> [clojure.lang.RestFn invoke RestFn.java 512] >>>> >>>> [cloud_monkey.core$eval14$loading__5340__auto____15 invoke core.clj 1] >>>> >>>> [cloud_monkey.core$eval14 invoke core.clj 1] >>>> >>>> [clojure.lang.Compiler eval Compiler.java 6850] >>>> >>>> [clojure.lang.Compiler eval Compiler.java 6839] >>>> >>>> [clojure.lang.Compiler load Compiler.java 7295] >>>> >>>> [clojure.lang.RT loadResourceScript RT.java 372] >>>> >>>> [clojure.lang.RT loadResourceScript RT.java 363] >>>> >>>> [clojure.lang.RT load RT.java 453] >>>> >>>> [clojure.lang.RT load RT.java 419] >>>> >>>> [clojure.core$load$fn__5448 invoke core.clj 5866] >>>> >>>> [clojure.core$load doInvoke core.clj 5865] >>>> >>>> [clojure.lang.RestFn invoke RestFn.java 408] >>>> >>>> [clojure.core$load_one invoke core.clj 5671] >>>> >>>> [clojure.core$load_lib$fn__5397 invoke core.clj 5711] >>>> >>>> [clojure.core$load_lib doInvoke core.clj 5710] >>>> >>>> [clojure.lang.RestFn applyTo RestFn.java 142] >>>> >>>> [clojure.core$apply invoke core.clj 632] >>>> >>>> [clojure.core$load_libs doInvoke core.clj 5749] >>>> >>>> [clojure.lang.RestFn applyTo RestFn.java 137] >>>> >>>> [clojure.core$apply invoke core.clj 632] >>>> >>>> [clojure.core$require doInvoke core.clj 5832] >>>> >>>> [clojure.lang.RestFn invoke RestFn.java 408] >>>> >>>> [user$eval5 invoke form-init1994735649128181545.clj 1] >>>> >>>> [clojure.lang.Compiler eval Compiler.java 6850] >>>> >>>> [clojure.lang.Compiler eval Compiler.java 6839] >>>> >>>> [clojure.lang.Compiler eval Compiler.java 6839] >>>> >>>> [clojure.lang.Compiler load Compiler.java 7295] >>>> >>>> [clojure.lang.Compiler loadFile Compiler.java 7233] >>>> >>>> [clojure.main$load_script invoke main.clj 275] >>>> >>>> [clojure.main$init_opt invoke main.clj 280] >>>> >>>> [clojure.main$initialize invoke main.clj 308] >>>> >>>> [clojure.main$null_opt invoke main.clj 343] >>>> >>>> [clojure.main$main doInvoke main.clj 421] >>>> >>>> [clojure.lang.RestFn invoke RestFn.java 421] >>>> >>>> [clojure.lang.Var invoke Var.java 383] >>>> >>>> [clojure.lang.AFn applyToHelper AFn.java 156] >>>> >>>> [clojure.lang.Var applyTo Var.java 700] >>>> >>>> [clojure.main main main.java 37]]} >>>> >>>> >>>> @raspasov >>>> >>>> On Saturday, July 18, 2015 at 6:12:12 AM UTC-7, Alex Miller wrote: >>>>> >>>>> Clojure 1.8.0-alpha1 and 1.8.0-alpha2 are now available. >>>>> >>>>> Try it via >>>>> - Download: >>>>> https://repo1.maven.org/maven2/org/clojure/clojure/1.8.0-alpha2 >>>>> - Leiningen: [org.clojure/clojure "1.8.0-alpha2"] >>>>> >>>>> 1.8.0-alpha1 includes support for tuples (optimized small vectors) >>>>> inspired by Zach Tellman's work. >>>>> >>>>> 1.8.0-alpha2 has an additional set of bug fixes and enhancements: >>>>> >>>>> CLJ-703 Improve writeClassFile performance >>>>> CLJ-1659 compile leaks files >>>>> CLJ-1761 clojure.core/run! does not always return nil >>>>> CLJ-1645 'javap -v' on protocol class reveals no source file >>>>> CLJ-1644 into-array fails for sequences starting with nil >>>>> CLJ-1588 StackOverflow in clojure.test macroexpand with `are` and >>>>> anonymous `fn` >>>>> CLJ-1565 pprint issues infinite output for a protocol >>>>> CLJ-1562 some->,some->>,cond->,cond->> and as-> doesn't work with >>>>> (recur) >>>>> CLJ-1533 Oddity in type tag usage for primInvoke >>>>> CLJ-1528 clojure.test/inc-report-counter is not thread safe >>>>> CLJ-1399 missing field munging when recreating deftypes serialized >>>>> into byte code >>>>> CLJ-1313 Correct a few unit tests >>>>> CLJ-1250 Reducer (and folder) instances hold onto the head of seqs >>>>> CLJ-1208 Namespace is not loaded on defrecord class init >>>>> >>>>> Our current plans for 1.8 are to feature freeze on October 1st >>>>> (typically that is beta 1) and then work through a release in time for >>>>> the >>>>> Clojure/Conj in late November. We expect 1.8 to include the Socket Server >>>>> REPL work (http://dev.clojure.org/display/design/Socket+Server+REPL) >>>>> and possibly other things to be determined. >>>>> >>>>> - Alex >>>>> >>>> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to clo...@googlegroups.com >> <javascript:> >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+u...@googlegroups.com <javascript:> >> For more options, visit this group at >> http://groups.google.com/group/clojure?hl=en >> --- >> You received this message because you are subscribed to the Google Groups >> "Clojure" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to clojure+u...@googlegroups.com <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > -- > -- > Daniel > -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.