Affects Version/s: None
Fix Version/s: None
Patch:Code and Test
The conditional dispatch in clojure.walk is slow and not open to extension. It also doesn't support records; see
Current patch: 0001-CLJ-1239-protocol-dispatch-for-clojure.walk.patch reimplements clojure.walk using protocols.
The public API is unchanged, but walk gains support for records. Users can extend the walk protocol to other collection types if desired.
This patch supersedes
CLJ-1105 "clojure.walk should support records."
See https://github.com/stuartsierra/clojure.walk2 for benchmarks. My tests indicate it is roughly 2x the speed of the original clojure.walk.
This approach carries more risk of breaking user code than the patch in
CLJ-1105. When running the full Clojure test suite, I discovered (and fixed) some breakages that did not show up in clojure.walk's unit tests. See Extend to EmptyList - 730eb75 - stuartsierra/clojure.walk2