On Aug 10, 2:19 pm, Jonathan Smith <jonathansmith...@gmail.com> wrote: > 1.) use something mutable > 2.) unroll all the loops (mapping is a loop) > 3.) try not to coerce between seq/vec/hash-map too much. > > in real world, stuff like the shootout is pretty useless, as generally > you'd reach for a better algorithm rather than implementing the > shackled, crippled, naive algorithms that the benchmark forces you to > implement. > > (Not that they aren't useful to some extent, just that language > productivity and how fast you can iterate your software design in the > language is, IMO, a much better indicator of a good language than > micro benchmarking).
I agree that they are useful to some extent. In the real world, you would use a better algorithm, but those better algorithms can be implemented in any language, too. As you say, a higher level language that lets you iterate more quickly on multiple implementations of different algorithms has advantages. At the end of the day, there is something in the language implementations that can enable faster execution times than others. A micro-benchmark can be useful to tell you that if your application needs to do lots of double number crunching, you definitely shouldn't be implementing it in Perl, for example -- at least not that part of your application. By the way, fft1976, this Clojure version of the n-body benchmark takes about half the time of your code on my machine (for a shorter test than the one for the benchmark web site -- I haven't compared yet on the full length test since it takes about an hour for my version). http://github.com/jafingerhut/clojure-benchmarks/blob/3e45bd8f6c3eba47f982a0f6083493a9f076d0e9/n-body/nbody.clj-5.clj It doesn't use any mutable data structures, but it does use vectors, has some double declarations, and avoids using map for operations on pairs of 3d vectors, so it has some optimizations. Using the new transient vectors recently added by Rich, and also either using transient maps, or changing the implementation of planet data to use vectors instead of the maps that I use, would probably speed things up some more. I also still have a fair number of uses of map that would probably be faster with loop/recur. Andy --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---