Performance improvements on vector/map parsing #28
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Hey there --
I'm using clojure-msgpack with parsing a lot of vectors in a performance critical path of my application. Profiling revealed that the seq overhead involved with both the
(for ...)
and the(range ...)
sequences is significant.This diff eliminates the unnecessary allocation by:
1/ unrolling them into explicit loops w/ transients
2/ using unchecked math to avoid boxing the counter
One change to call out: unpack-n now returns a vector instead of a sequence. Happy to wrap in a call to
sequence
if that's something you're interested in maintaining (e.g. a real sequence instead of something sequential)Tested by invoking
lein test