4 ms·
How does this compare to https://github.com/arximboldi/immer https://github.com/arximboldi/immer (other than the C/C++ difference)? Also, it's my understanding
by erichocean 3y ago
How does this compare to https://github.com/arximboldi/immer https://github.com/arximboldi/immer (other than the C/C++ difference)?
Also, it's my understanding that, in practice, persistent data structures require a garbage collector in order to handle deallocation when used in a general-purpose way. How does your implementation handle that?
Also, have you seen https://github.com/cnuernber/ham-fisted https://github.com/cnuernber/ham-fisted ? I think there are a few other Java-based persistent collections as well in the overall Clojure ecosystem that also improve on Hickey's original implementation, but I can't recall them now…
- magicalhippo 3y ago> How does your implementation handle that? This is explained in the readme[1]. You can pass custom allocation functions (mallic, realloc, free), so you can plug in Boehm fex. [1]: https://github.com/mkirchner/hamt#memory-management https://github.com/mkirchner/hamt#memory-management
- dumdumchan 3y agoSo refcounting?
- aidenn0 3y agoBeohm is not refcounting, it's a tracing GC.
- vkazanov 3y agoBoehm is not tracing, it's a conservative GC. PS admittedly, terminology is not precise enough in this space.
- aidenn0 3y agoI would say that the terminology is pretty good in this space, and BDWGC is a conservative tracing GC. A tracing GC determines reachability by following (i.e. tracing) chains of references. A precise GC will retain exactly the set of reachable objects, a conservative GC will retain potentially more. Tracing GCs might be precise (or not), they might handle internal-pointers (or not), they might move the data (or not), they might handle variable sized allocations (or not).
- deleted 3y ago[deleted]