merge and merge-with?
Observations: Nope. Cleverness is over-rated.
We previously established that we could merge two hashmaps a bit faster than Clojure's own merge using
reduce-kv and transients. The experimental namespace provides merging implementations that attempt to be even faster by
walking only the shorter hashmap once and using set operations to touch only what's absolutely necessary. These benchmarks clearly show that
experiment is an utter failure.
Rob Pike, you win.
For hashmaps containing one to one-million key/value pairs, the experimental merge function is an order of magnitude slower than Smoosh's best merge.
| arg, n | |||||||
|---|---|---|---|---|---|---|---|
| version | 1 | 10 | 100 | 1000 | 10000 | 100000 | 1000000 |
| core-merge | 1.4e-04±2.5e-06 | 1.4e-04±9.9e-07 | 1.6e-04±3.0e-06 | 3.5e-04±9.3e-06 | 2.7e-03±1.4e-05 | 2.7e-02±2.6e-03 | 4.3e-01±6.1e-02 |
| experimental-merge | 1.5e-04±9.8e-07 | 1.7e-04±1.1e-06 | 3.2e-04±5.0e-06 | 2.2e-03±6.2e-05 | 1.9e-02±3.6e-04 | 2.2e-01±4.0e-03 | 3.0e+00±9.8e-02 |
| smerge | 1.3e-04±2.4e-06 | 1.3e-04±1.0e-06 | 1.6e-04±6.7e-06 | 2.6e-04±1.9e-06 | 1.4e-03±4.0e-05 | 1.5e-02±1.5e-04 | 2.2e-01±5.4e-03 |
For hashmaps containing one to sixteen key/value pairs, the experimental merge function is up to 30% slower than Smoosh's best merge.
Same problem.
| arg, n | |||||||
|---|---|---|---|---|---|---|---|
| version | 1 | 10 | 100 | 1000 | 10000 | 100000 | 1000000 |
| core-merge-with | 1.4e-04±4.1e-07 | 1.4e-04±8.1e-07 | 1.7e-04±1.2e-06 | 5.0e-04±7.9e-06 | 4.3e-03±8.8e-05 | 4.2e-02±4.8e-04 | 6.0e-01±8.3e-02 |
| experimental-merge-with | 1.5e-04±1.5e-06 | 1.6e-04±1.0e-06 | 3.2e-04±5.1e-06 | 2.0e-03±1.3e-05 | 1.8e-02±3.8e-04 | 2.2e-01±9.1e-04 | 2.8e+00±4.3e-02 |
| smerge-with | 1.4e-04±2.9e-06 | 1.5e-04±5.6e-06 | 1.7e-04±2.6e-06 | 4.2e-04±1.3e-05 | 3.3e-03±9.2e-05 | 3.6e-02±9.7e-04 | 4.9e-01±8.0e-02 |
And again.
Can you improve this documentation?Edit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |