Hi!  I'm an interested spectator but understand very little :)  I wonder if 
anyone would take a moment to explain?
E.g. I can't see why reading from a data structure should ever lead to a 
change in the refcounts.
A


On Thursday, 30 May 2013 15:56:42 UTC+1, tbc++ wrote:
>
> There are two things I see that reduce the viability of ref-count GCs with 
> Clojure:
>
> a) Clojure is insanely alloc heavy. Look at the source of the data 
> structures, merging two hash-maps (for instance) requires about 2-3 
> allocations per assoc, per kv in the merged map:
>
> (merge map1 map2)
> allocs = ~((tree-depth of map1) * (count map2)
>
> b) Every time you transverse a persistent structure's tree you'll need to 
> increment and decrement the refcounts. Consider multi-core, now the 
> refcounts have to be thread safe (atomic inc & dec). So if you have two 
> cores reading (not just writing) from the same hash-map, they'll be 
> fighting over the cache lines that the refcount is stored in, and that'll 
> kill performance. 
>
> Timothy
>
>
> On Thu, May 30, 2013 at 8:47 AM, Gary Trakhman 
> <gary.t...@gmail.com<javascript:>
> > wrote:
>
>> At first glance, those issues seem like they could be mitigated, so I 
>> think I see room here for some real-time ref-counted clojure.  I imagine 
>> it'd still have a lot of allocations so it wouldn't be that great for 
>> low-memory systems.
>>  
>>
>> On Thu, May 30, 2013 at 9:44 AM, Jean Niklas L'orange <
>> jean...@hypirion.com <javascript:>> wrote:
>>
>>>
>>>
>>> On Thursday, May 30, 2013 2:21:36 PM UTC+2, Gary Trakhman wrote:
>>>>
>>>> I just thought about this recently, but does the value-oriented nature 
>>>> of clojure mostly void the need for a cycles-aware GC?  It seems like you 
>>>> won't ever have cycles without identities, or pointers (java references). 
>>>>  Maybe this would be a problem only when you need identities, ie deftype 
>>>> or 
>>>> defprotocol implementing objects.
>>>>
>>>
>>> Sure thing, the value-oriented nature removes a lot of cycles in 
>>> practice. However, you may for instance have an atom which contain itself, 
>>> so they are not nonexistant. As such, the GC cannot be completely 
>>> cycle-ignorant, but perhaps it doesn't have to be efficient at finding them 
>>> either.
>>>
>>> Another place where cycles happen are in (mutually) recursive functions, 
>>> they may be iffy if you define many recursive anonymous functions at 
>>> runtime.
>>>
>>> -- Jean Niklas L'orange
>>>
>>> -- 
>>> -- 
>>> 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/groups/opt_out.
>>>  
>>>  
>>>
>>
>>  -- 
>> -- 
>> 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/groups/opt_out.
>>  
>>  
>>
>
>
>
> -- 
> “One of the main causes of the fall of the Roman Empire was that–lacking 
> zero–they had no way to indicate successful termination of their C 
> programs.”
> (Robert Firth) 
>

-- 
-- 
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/groups/opt_out.


Reply via email to