I'm trying to optimize zippers for clojurescript. My benchmark is
implementing the combinator systems from

https://www.wolframscience.com/nksonline/page-102

which heavily stress both navigating and modifying the tree.

A major hotspot seems to be data structure creation time, which can be
between 10 and 200x slower than jvm. I'm using Chrome 30.0.1599.101 .

Vectors:
(time (dotimes [x 1000000]  ( vector x)))
cljs: 2175 msecs
clj: 11.414 msecs

strangely, apply is faster for cljs :
(time (dotimes [x 1000000]  (apply vector [x])))
cljs: 1175 msecs
clj: 64.919 msecs

into gives about the same result for cljs.

Creating a datastructure literal (eg [x]) is about 5x slower in cljs
over clj, which I would take, however in the zipper case the number of
children can vary dynamically.

Lists:
(apply list [x]) is about 2x faster than the vector case in cljs, and
within about 5x of the jvm speed. Unless there is a better idea, I may
try a specialized list-oriented zipper and see how it performs.

Records:
Creation is about ~10x slower than in clj. What's weird is that
creating hashmaps is actually marginally faster than creating records
(however, records still have much faster field access, so I'm using a
record-based zipper implementation)

(defrecord Test [a])
(time (dotimes [x 1000000] (Test. x)))
cljs: 60 msecs
clj: 7.00 msecs

Is there a trick to speed up vector and/or record creation? Should I
look into a custom datastructure?

Any ideas welcome.

Thanks!

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
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 clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to