Well, ref-counting in C++ is used by something like smart-pointers, the implementation uses operator overloading to overload the pointer dereference operator *, and it manages an internal pointer to the actual value. Instantiating a smart-pointer increases the count for that object, and once that smart-pointer object goes out of scope (free/delete or popping off the stack), it'll automatically decrement the ref count again by action of its destructor.
The thing I'm proposing would use something like that, by my understanding, and data structures could either be implemented in native bits or further up once deftypes and protocols are defined on top of something like this. So, in order to actually read from a memory value and guarantee that the object still exists, you have to allocate a wrapper that manages these reference counts. HTH. On Thu, May 30, 2013 at 4:00 PM, atucker <agjf.tuc...@gmail.com> wrote: > 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>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> 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 >>>> >>>> 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 >>>> >>>> For more options, visit this group at >>>> http://groups.google.com/**group/clojure?hl=en<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. >>>> >>>> For more options, visit >>>> https://groups.google.com/**groups/opt_out<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 >>> >>> 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 >>> >>> For more options, visit this group at >>> http://groups.google.com/**group/clojure?hl=en<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. >>> >>> For more options, visit >>> https://groups.google.com/**groups/opt_out<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. > > > -- -- 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.