I'm not familiar with declaring inline functions, though I've seen
(definline) in the docs (I think it's still marked experimental).  If
it does what I think it does, it's still not going to solve the
problem, though.  It looks like all defined methods are just stubs
that delegate to functions held by Vars.  LIke I said, I think the
idea is clever and probably works in most situations but in the case
of primitives, it's going to incur a lot of overhead.
On Jul 27, 5:12 pm, John Harrop <jharrop...@gmail.com> wrote:
> On Mon, Jul 27, 2009 at 3:37 PM, Mark Addleman 
> <mark_addle...@bigfoot.com>wrote:
>
>
>
>
>
> > I have written some Clojure code to implement java.lang.CharSequence
> > that is constructed with a length and an ISeq of strings.  I need this
> > because I want to pass the resulting CharSequence into Java's regex
> > library.  I got the thing working (thanks to the docs and some good
> > examples that I found in the discussion group) and I'm trying to
> > optimize it now.  I'm willing to accept the Clojure code being ~2x
> > slower than the Java equivalent, but the best I can do is 10x slower.
>
> > The code is below.  After examining the resulting bytecode, it looks
> > to me that the problem is that the Clojure compiler dispatches every
> > method to an IFn that is bound as part of the class initialization.
> > It's a cool idea that probably saved implementation effort but I'm
> > pretty sure all the boxing/unboxing of primitives is what's killing
> > the performance.
>
> > My question is:  Can someone come up with a better way of implementing
> > this to avoid the performance problems?
>
> The only way to avoid boxing and unboxing of primitives is to avoid passing
> them as arguments or returning them. It *may* work if you declare the
> functions inline that need to do so, but you may need to rewrite it in a
> less functional style using loop/recur.
>
> Clojure is capable of the speed you want, though; indeed, even of the speed
> of hand-tuned assembly, when done right.
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to