The Scala code is using immutable sets. On Wednesday, October 23, 2013, Timothy Baldridge wrote:
> From what I can tell, Clojure uses persistent hash sets inside of set. > This can be fixed by replacing set with (into #{} data). Into uses > transients internally and should be much faster. > > I don't know Scala, but from I can tell, Scala is using mutable > collections. I think the combination of these two things (immutable > collections plus lack of transients) could be causing some performance > impact. I wouldn't expect it to be 1000x but it's a starting place. > > Timothy > > > On Wed, Oct 23, 2013 at 6:36 AM, Paul Butcher > <p...@paulbutcher.com<javascript:_e({}, 'cvml', 'p...@paulbutcher.com');> > > wrote: > >> On 23 Oct 2013, at 13:18, Timothy Baldridge >> <tbaldri...@gmail.com<javascript:_e({}, 'cvml', 'tbaldri...@gmail.com');>> >> wrote: >> >> Great! you have a profiler, use that. Find the hotspots, use YourKit to >> find where the .cons is being called from, find things to optimize, and go >> from there. This is exactly the same process I would use any optimizations >> I attempted. >> >> >> I fear I may have failed to convey the question I'm trying to answer. >> >> I'm sure that I could create a faster solution in Clojure - that's not >> the question I'm trying to answer though. >> >> What I'm trying to answer is why the *exact same* algorithm implemented >> in Scala is 1000x faster. >> >> As far as I know, the Scala version of the algorithm creates exactly as >> many sets and performs exactly as many set operations as the Clojure does. >> But the Clojure version is 1000x slower. That strikes me as very strange >> and worth getting to the bottom of? >> >> I have, of course, looked at the result of the profiler. And what it >> seems to be saying is that set operations in Clojure are ruinously slow. >> I'm not sure that I believe that though - I can't think of any reason why >> Clojure's sets should be 1000x slower than Scala's? So I'm asking for the >> help of this list. >> >> Of course, I can't rule out the possibility that I've failed to convert >> the Scala version to Clojure and they're actually implementing very >> different algorithms - but I've had several people look at the >> implementations and confirm that they appear to be the same. Nevertheless, >> if there is a problem there, I'd also be interested to find it as I'm sure >> that it will teach me something. >> >> -- >> paul.butcher->msgCount++ >> >> Snetterton, Castle Combe, Cadwell Park... >> Who says I have a one track mind? >> >> http://www.paulbutcher.com/ >> LinkedIn: http://www.linkedin.com/in/paulbutcher >> MSN: p...@paulbutcher.com <javascript:_e({}, 'cvml', >> 'p...@paulbutcher.com');> >> AIM: paulrabutcher >> Skype: paulrabutcher >> >> -- >> -- >> 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<javascript:_e({}, 'cvml', >> '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 <javascript:_e({}, 'cvml', >> 'clojure%2bunsubscr...@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 <javascript:_e({}, 'cvml', >> 'clojure%2bunsubscr...@googlegroups.com');>. >> For more options, visit https://groups.google.com/groups/opt_out. >> > > > > -- > “One of the main causes of the fall of the Roman Empire was that–lacking > zero–they had no way to indicate successful termination of their C > programs.” > (Robert Firth) > > -- > -- > 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<javascript:_e({}, 'cvml', > '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 <javascript:_e({}, 'cvml', > 'clojure%2bunsubscr...@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 <javascript:_e({}, 'cvml', > 'clojure%2bunsubscr...@googlegroups.com');>. > 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.