On Mar 12, 11:15 pm, Howard Lewis Ship <hls...@gmail.com> wrote:
> I have to wonder a bit about the ability to optimize.  Everything
> boils down to one of the seven or so basic forms.  That's a lot of
> function calls to do even small things, like adding numbers. You might
> think that simple math would be optimized and inlined, but it isn't:
>
> Clojure
> user=> (doc +)
> -------------------------
> clojure.core/+
> ([] [x] [x y] [x y & more])
>   Returns the sum of nums. (+) returns 0.
> nil
> user=> (ns clojure.core)
> #<Namespace clojure.core>
> clojure.core=> (defn + [x y] (* x y))
> #'clojure.core/+
> clojure.core=> (+ 3 5)
> 15
> clojure.core=>
>
> This implies, to me, that Clojure is doing a full functional call,
> with dynamic lookup via the namespace, even for +.

I think this is mistaken. Sure, for (+ foo bar) calls in the repl
Clojure will do a full lookup,  but if you have  addition in a tight
loop, the JVM should notice this and optimise it further. (I think
Clojure also does some kind of caching.) You can also use type casts
to make clojure use primitive instead of boxed math, bringing
performance very close to Java.

Now, it's probably true that the most straightforward Clojure
implementation of an algorithm is likely not quite as fast as the Java
equivalent, with a few tricks, you can often get pretty close.

I don't have very in-depth knowledge of how Clojure handles these
performance issues, but I believe your assumption is overly
pessimistic. :)

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

Reply via email to