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.

Reply via email to