This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2017-09-05
Channels
- # beginners (45)
- # boot (2)
- # cider (2)
- # cljs-experience (1)
- # cljsrn (6)
- # clojure (67)
- # clojure-brasil (1)
- # clojure-dusseldorf (47)
- # clojure-finland (7)
- # clojure-italy (81)
- # clojure-portugal (2)
- # clojure-russia (12)
- # clojure-sanfrancisco (1)
- # clojure-serbia (1)
- # clojure-spec (22)
- # clojure-uk (27)
- # clojurescript (49)
- # clojurewerkz (3)
- # code-reviews (3)
- # component (19)
- # core-async (3)
- # cursive (16)
- # events (7)
- # fulcro (20)
- # graphql (7)
- # immutant (1)
- # jobs (2)
- # juxt (44)
- # leiningen (7)
- # lumo (35)
- # onyx (31)
- # portkey (31)
- # portland-or (8)
- # random (1)
- # re-frame (82)
- # reagent (35)
- # sfcljs (1)
- # spacemacs (5)
- # specter (7)
- # unrepl (4)
- # yada (2)
How does Spectre compare in performance for recursively (and exhaustively) walking large trees (e.g., against clojure.walk/prewalk
)? Looked at posted benchmarks but didn't see any for walking trees
@dadair specter destroys the performance of anything in vanilla clojure for anything involving compound or recursive data structures
clojure.walk
is a very brute force approach forcing you to traverse parts of data structures you don't care about (like map keys, key/value pairs)
with specter you can make traversals that perform dramatically better
even just in replicating clojure.walk/postwalk
semantics specter is 40% better
Benchmark: walker vs. clojure.walk version (150000 iterations)
Avg(ms) vs best Code
959.39 1.00 (transform (walker number?) inc data)
1347.1 1.40 (transform (walker-old number?) inc data)
the implementation of walker
is instructive for making your own recursive paths
(def
^{:doc "Navigate the data structure until reaching
a value for which `afn` returns truthy. Has
same semantics as clojure.walk."}
walker
(recursive-path [afn] p
(cond-path (pred afn) STAY
coll? [ALL p]
)))