ClojureScript gets PersistentVectors

2012-03-29 Thread David Nolen
Thanks to Laszlo Török, ClojureScript now has PersistentVectors,
https://github.com/clojure/clojurescript/commit/e615f4cd326e7c608050272c64c4dfaff9a34689
.

They are based on the Java implementations found in Clojure. I'm happy to
say they thoroughly trounce the old copy-on-write Vectors:

http://jsperf.com/persistentvector-norecur-js/11

Note how much room for improvement we have on JS engines like V8 :)

David

-- 
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

Re: ClojureScript gets PersistentVectors

2012-03-29 Thread Evan Mezeske
This is excellent.  Big thanks to Laszlo!  I've been working on 
a Raphaël-based interactive GUI app in ClojureScript that maintains a big 
vector of elements, and had just recently started to run into what seemed 
to be the performance limits of the copy-on-write approach.  I'm very 
optimistic that this feature will allow me to keep using vectors instead of 
dropping down to mutable host arrays, which is a big win.  I can't wait to 
try this.

-Evan

On Thursday, March 29, 2012 2:31:10 PM UTC-7, David Nolen wrote:

 Thanks to Laszlo Török, ClojureScript now has PersistentVectors, 
 https://github.com/clojure/clojurescript/commit/e615f4cd326e7c608050272c64c4dfaff9a34689
 . 

 They are based on the Java implementations found in Clojure. I'm happy to 
 say they thoroughly trounce the old copy-on-write Vectors:

 http://jsperf.com/persistentvector-norecur-js/11

 Note how much room for improvement we have on JS engines like V8 :)

 David 


-- 
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

Re: ClojureScript gets PersistentVectors

2012-03-29 Thread László Török
It has been a great learning experience on both Clojure internals and the
Clojurescript side.
One thing to note, that the handwritten JS (which also a straight port of
the java version and not optimized by the closure compiler) still
outperforms the Clojurescript version consistently by at least a factor of
3-3.5x on V8 and slightly on other engines.

It would be interesting to see why. I suspect that the code generated by
cljsc can be improved a lot and currently it does not always lend itself to
agressive inlining. (pure speculation, yet to be confirmed)
On the other hand, I understand that there are certain conventions that
have to be observed for CLJS abstractions like protocols etc. to work.

I'm interested to hear opinions and directions on where to go from hear:
chunked sequences and transient will certainly deliver a performance boost.
How about pods? Is there a design written up out there?

Is there a clojure experimental implementation on separate branch?

Las

2012/3/29 Evan Mezeske emeze...@gmail.com

 This is excellent.  Big thanks to Laszlo!  I've been working on
 a Raphaël-based interactive GUI app in ClojureScript that maintains a big
 vector of elements, and had just recently started to run into what seemed
 to be the performance limits of the copy-on-write approach.  I'm very
 optimistic that this feature will allow me to keep using vectors instead of
 dropping down to mutable host arrays, which is a big win.  I can't wait to
 try this.

 -Evan


 On Thursday, March 29, 2012 2:31:10 PM UTC-7, David Nolen wrote:

 Thanks to Laszlo Török, ClojureScript now has PersistentVectors,
 https://github.com/clojure/**clojurescript/commit/**
 e615f4cd326e7c608050272c64c4df**aff9a34689https://github.com/clojure/clojurescript/commit/e615f4cd326e7c608050272c64c4dfaff9a34689
 .

 They are based on the Java implementations found in Clojure. I'm happy to
 say they thoroughly trounce the old copy-on-write Vectors:

 http://jsperf.com/**persistentvector-norecur-js/11http://jsperf.com/persistentvector-norecur-js/11

 Note how much room for improvement we have on JS engines like V8 :)

 David

  --
 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




-- 
László Török

-- 
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