in my microbenchmarks I've found it to be consistently faster to unroll a fixed number of elements rather than iterate over them. The difference might not be large enough to matter for many people's use cases, but the stated goal is to make a fast collection, so it's worthwhile to use the best known approach.
Currently tuples mimic lists, so conj adds onto the beginning, and does not return another tuple. 'rest', however, does return a tuple. Also, since my intent wasn't to emulate vectors, 'get', 'assoc', and calling as function don't work with tuples. This could obviously change, but I'd be curious to know why it makes a difference in someone's code. Also, I played around with returning both a list or a vector in the unbounded case, but the performance is too different in each of these cases. As I point out in the readme, vectors are *significantly* slower to create, which would make the performance of 'tuple' too inconsistent for my liking. The TupleN solution I came up with was the best compromise I could think of. Zach On Saturday, August 24, 2013 10:47:11 PM UTC-7, Jozef Wagner wrote: > > Hi, > > I've did something similar for CLJS, see > http://dev.clojure.org/jira/browse/CLJS-453 and > https://groups.google.com/forum/#!searchin/clojure/arrayvector/clojure/yDvTRP0gYLA/Tb5MJC8Z0K8J > > In CLJS, it is comparable in performance to use array instead of > specialized type for each arity. Did you check if it is not the same in > Clojure? > > If I conjoin to the tuple, does it return a tuple too? Also instead of > tupleN, you could fall back to the PersistentVector. > > JW > > > On Sun, Aug 25, 2013 at 4:38 AM, Zach Tellman <ztel...@gmail.com<javascript:> > > wrote: > >> I just pulled some code I wrote while trying to optimize 'memoize' into >> its own library: https://github.com/ztellman/clj-tuple. It only has the >> one function, so I assume no one will need too much explanation. However, >> there may still be room for performance improvements, so if anyone wants to >> take a stab, pull requests are welcome. >> >> Zach >> >> -- >> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to clo...@googlegroups.com<javascript:> >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+u...@googlegroups.com <javascript:> >> 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+u...@googlegroups.com <javascript:>. >> For more options, visit https://groups.google.com/groups/opt_out. >> > > -- -- 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.