get*
delegates to clojure.core/get
or clojure.core/nth
as appropriate, so its performance ought to be similar,
aside from some minimal overhead for dispatching.
See the overall summary for benchmarking details. The benchmarks displayed in this document are defined here.
Version 5 get*
for a hashmap is very similar, even replicating the anomalous dip at 100
.
arg, n | |||||||
---|---|---|---|---|---|---|---|
version | 1 | 10 | 100 | 1000 | 10000 | 100000 | 1000000 |
4 | 5.3e-08±6.0e-10 | 9.2e-08±1.8e-10 | 1.1e-07±2.0e-09 | 1.3e-07±2.6e-09 | 1.4e-07±1.4e-09 | 1.7e-07±3.6e-09 | 1.9e-07±3.0e-09 |
5 | 5.2e-08±3.0e-10 | 8.1e-08±3.3e-10 | 9.3e-08±3.6e-10 | 1.4e-07±2.1e-09 | 1.5e-07±1.4e-09 | 1.6e-07±9.8e-10 | 1.8e-07±7.2e-10 |
arg, n | |||||||
---|---|---|---|---|---|---|---|
version | 1 | 10 | 100 | 1000 | 10000 | 100000 | 1000000 |
4 | 1.0e-07±1.2e-09 | 2.2e-07±2.1e-09 | 2.4e-07±1.1e-09 | 2.6e-07±1.5e-09 | 2.7e-07±2.8e-09 | 2.9e-07±2.2e-09 | 3.2e-07±3.6e-09 |
5 | 5.7e-08±2.7e-10 | 8.5e-08±1.5e-09 | 9.6e-08±6.4e-10 | 1.4e-07±5.4e-10 | 1.5e-07±7.1e-10 | 1.7e-07±1.0e-09 | 1.8e-07±8.3e-10 |
This benchmark is unfair to get*
: clojure.core/get
always returns nil
when given a list, whereas
get*
actually retrieves the nth element. The logarithmic behavior is expected for linked lists constructed from the head.
arg, n | |||||
---|---|---|---|---|---|
version | 1 | 10 | 100 | 1000 | 10000 |
4 | 1.2e-07±8.0e-10 | 1.4e-07±5.0e-10 | 1.5e-07±3.5e-10 | 1.7e-07±2.5e-09 | 1.8e-07±1.7e-09 |
5 | 1.2e-07±4.5e-10 | 1.4e-07±3.5e-09 | 1.5e-07±5.0e-10 | 1.7e-07±1.2e-09 | 1.8e-07±9.3e-10 |
arg, n | |||||
---|---|---|---|---|---|
version | 1 | 10 | 100 | 1000 | 10000 |
4 | 2.5e-07±8.3e-10 | 3.1e-07±2.2e-09 | 6.8e-07±1.1e-09 | 4.2e-06±2.5e-08 | 3.9e-05±2.2e-07 |
5 | 1.4e-07±1.9e-09 | 1.9e-07±6.0e-10 | 5.8e-07±3.2e-09 | 4.3e-06±2.4e-08 | 4.2e-05±2.6e-07 |
Version 5 get*
very closely provides the performance of clojure.core/nth
, a notable improvement from version 4.
arg, n | |||||||
---|---|---|---|---|---|---|---|
version | 1 | 10 | 100 | 1000 | 10000 | 100000 | 1000000 |
4 | 3.4e-08±1.8e-10 | 4.7e-08±2.4e-10 | 6.2e-08±2.7e-10 | 7.6e-08±2.7e-10 | 9.1e-08±7.5e-10 | 1.0e-07±1.1e-09 | 1.2e-07±2.3e-09 |
5 | 3.6e-08±1.3e-10 | 5.1e-08±5.0e-10 | 6.3e-08±1.0e-09 | 7.6e-08±4.4e-10 | 8.9e-08±1.5e-09 | 1.0e-07±5.5e-10 | 1.1e-07±3.8e-10 |
arg, n | |||||||
---|---|---|---|---|---|---|---|
version | 1 | 10 | 100 | 1000 | 10000 | 100000 | 1000000 |
4 | 1.7e-07±4.4e-10 | 1.9e-07±8.9e-10 | 2.1e-07±9.6e-10 | 2.2e-07±1.2e-09 | 2.3e-07±7.2e-10 | 2.4e-07±2.1e-09 | 2.5e-07±7.3e-10 |
5 | 3.5e-08±1.6e-10 | 4.6e-08±9.8e-11 | 5.9e-08±1.3e-10 | 7.4e-08±1.4e-10 | 8.6e-08±4.6e-10 | 9.9e-08±5.1e-10 | 1.1e-07±5.1e-10 |
Version 5
get*
approaches clojure.core/get
, being 19% slower for one-element vectors and linearly improving to matching the
performance for one-million-element vectors.
arg, n | |||||||
---|---|---|---|---|---|---|---|
version | 1 | 10 | 100 | 1000 | 10000 | 100000 | 1000000 |
4 | 3.6e-08±1.1e-10 | 5.0e-08±7.1e-10 | 6.4e-08±4.9e-10 | 7.9e-08±5.1e-10 | 9.2e-08±2.4e-10 | 1.1e-07±7.4e-10 | 1.2e-07±1.5e-09 |
5 | 3.6e-08±1.9e-10 | 4.9e-08±1.4e-10 | 6.2e-08±2.2e-10 | 7.5e-08±3.1e-10 | 8.8e-08±5.6e-10 | 1.0e-07±7.4e-10 | 1.2e-07±2.8e-09 |
arg, n | |||||||
---|---|---|---|---|---|---|---|
version | 1 | 10 | 100 | 1000 | 10000 | 100000 | 1000000 |
4 | 2.0e-07±3.1e-09 | 2.1e-07±1.4e-09 | 2.3e-07±1.2e-09 | 2.5e-07±4.1e-09 | 2.6e-07±9.3e-10 | 2.7e-07±3.0e-09 | 2.9e-07±1.2e-09 |
5 | 4.3e-08±2.4e-10 | 5.7e-08±3.4e-10 | 6.9e-08±7.7e-10 | 8.3e-08±2.2e-10 | 9.5e-08±5.8e-10 | 1.1e-07±2.4e-10 | 1.2e-07±8.8e-10 |
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 |