ham-fisted
High performance HAMT (by cnuernber)
ham-fisted | icfpc2019 | |
---|---|---|
2 | 2 | |
147 | 17 | |
- | - | |
8.9 | 0.0 | |
2 months ago | almost 5 years ago | |
Clojure | Clojure | |
MIT License | - |
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
ham-fisted
Posts with mentions or reviews of ham-fisted.
We have used some of these posts to build our list of alternatives
and similar projects. The last one was on 2023-01-12.
-
Advent of Clojure - looking for feedback
3 - Similar to 2, the savings of mutably building the collection have to outweigh the cost of persisting it. Or if you are using the transient as a mutable container (e.g. held by an item) for limited random access and writes (as opposed to say a mutable arraylist or hashmap or hashset), performance should still be substantially better for writes over the persistent counterparts. The most gains come from building up large collections, using transients to mutably collect values and then persist at the end. Similar idea (but more general) in ham-fisted.
-
Ham-Fisted - A New High Performance Clojure Library
I have taken the time in between caring for my young son to write a new library that provides higher performance datastructures and algorithms for Clojure.
icfpc2019
Posts with mentions or reviews of icfpc2019.
We have used some of these posts to build our list of alternatives
and similar projects. The last one was on 2023-01-12.
-
Advent of Clojure - looking for feedback
Regarding hashing, custom hash functions even for records (if all fields are longs for example) can help substantially if you are hashing points some notes here. Even then, depending on what you are doing, you may be better off using a primitive numeric representation and a dense collection (e.g. a primitive array) since the mechanical sympathy may be substantial. It is also possible to do well using nested maps (particularly for memoization) when the pieces of a compound key are already trivially hashed. E.g. clojure.core/memoize just defines a varargs wrapper around a function and caches the sequence of args in a map. For earlier reasons, this is a poor strategy for many functions and performance can be substantially improved (e.g. for a 1 or 2 arg function of numbers or keys or strings even) if we defined fixed arity paths that store keys in nested maps instead of hashing complex collections.
-
Making the LinkedIn experimentation engine 20x faster
There's a worked example of optimizing an ICFPC2019 entry here where the readme goes through a bevy of techniques and observations.
What are some alternatives?
When comparing ham-fisted and icfpc2019 you can also consider the following projects:
clj-fast - Unpredictably faster Clojure
ultrarand - a demo of random number generation in java, and clojure via performance optimization
tech.ml.dataset - A Clojure high performance data processing system
performancepaper - A reproducible, open examination of the paper "A performance comparison of Clojure and Java" by Gustav Krantz
AdventOfCode2022 - My solutions for AoC 2022