Library for playing around with low level Clojure code for performance reasons given some assumptions. Inspired by Naked Performance (with Clojure) – Tommi Reiman.
Some of the code is based on implementations in metosin's projects. Credit in code.
Add in your
(require '[clj-fast.core :as fast])
Functions and Macros
fast-assoc: Used like
assocbut doesn't take variable key-values, only one pair.
fast-get: Wrappers for
fast-map-merge: Slightly faster version for
merge, takes only 2 maps.
Like regular core functions but sequence arguments must be written explicitly or
defed in advance:
(def ks [:a :b]) (fast/inline-get-in m ks) (fast/inline-get-in m [:c :d]) (fast/inline-get-some-in m [:c :d]) (fast/inline-assoc-in m [:c :d] foo) (fast/inline-update-in m [:c :d] inc) (fast/inline-select-keys m [:a :b :c]) (fast/inline-merge m1 m2 m3)
See results.md for experiments' benchmark results.
assocwhich expands the "rest" args. (not tested)
assoc-inwhich expands the keys sequence.
fast-map-merge: Metosin's implementation. Uses
fast-assocall of one map into another.
inline-merge: inlines core's
mergereduction over a sequence of maps with
conjto a nested
conjof all maps.
inline-fast-map-merge: same but with Metosin's
inline-get-in: given that all keys are written as explicit arguments and not a sequence,
get-incan be expanded into a series of
inline-get-some-in: same as above, but maps can be invoked on the keys. nil checks every iteration.
inline-assoc-in: same as
inline-update-in: same as
inline-select-keys: same case with
get-incan be done with
Copyright © 2019 firstname.lastname@example.org
This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0.
This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version, with the GNU Classpath Exception which is available at https://www.gnu.org/software/classpath/license.html.
Credit to Metosin wherever noted in the code.