On Sunday, 2 March 2014 05:32:00 UTC+5:30, bob wrote:
>
>
> Good point, Thanks a lot.
>
> Shall we improve the str fn in the core lib? From my point of view, the
> core fns should be performance sensitive.
>
If string formation is the bottleneck in your app and if you can come up
with a version of `str` function that works in all use-cases, then you can
probably `alter-var-root` the str fn with yours as long as you own the
responsibility.
I noticed the following macro (ignore the reflection warnings) can help
shave some nanoseconds in a large tight loop, but I leave to you to decide
how much worth it really is:
(defmacro sb-str
[& args]
(cond (empty? args) ""
(= 1 (count args)) (let [x (first args)]
`(let [y# ~x]
(cond (nil? y#) ""
(instance? Boolean y#) (.toString
(Boolean. y#))
(instance? Byte y#) (.toString
(Byte. y#))
(instance? Character y#) (.toString
(Character. y#))
(instance? Double y#) (.toString
(Double. y#))
(instance? Float y#) (.toString
(Float. y#))
(instance? Integer y#) (.toString
(Integer. y#))
(instance? Long y#) (.toString
(Long. y#))
(instance? Short y#) (.toString
(Short. y#))
:otherwise (.toString
y#))))
:otherwise (let [sb (gensym)
each-append #(list '.append sb %)
all-appends (map each-append args)]
`(let [~sb (StringBuilder.)]
~@all-appends
(.toString ~sb)))))
Note that it is not a function, so you cannot use it with high order
functions. You can possibly use `definline` instead of a macro but you lose
varargs then.
Shantanu
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.