On Tue, Dec 8, 2009 at 3:51 PM, Krukow <karl.kru...@gmail.com> wrote: > I am writing a function that has to wrap other code. One simple > approach is to do > > user> (defn wrap-fun [f] > (fn [& args] > (println "pre-processing") > (let [res (apply f args)] > (println "post-processing") > res))) > #'user/wrap-fun > user> (def w (wrap-fun (fn [x y] (println "calling") (+ x y)))) > #'user/w > user> (w 2 2) > pre-processing > calling > post-processing > 4 > user> > > I was wondering what is the cost of using apply vs calling the wrapped > function directly. So my first question is: what is the performance > cost of using apply vs calling a function ;-) Can the compiler inline > a call to apply so there is no difference, or is there a real cost? > > An alternative is to use a macro to inline an expression corresponding > to the function f in wrap-fun above, e.g., > > user> (defmacro wrap-fn [params exp] > `(fn ~params > (println "pre-processing") > (let [res# ~exp] > (println "post-processing") > res#))) > #'user/wrap-fn > user> (def w (wrap-fn [x y] (do (println "calling") (+ x y)))) > #'user/w > user> (w 2 2) > pre-processing > calling > post-processing > 4 > user> > > This avoid calling apply. To answer my own question, I wanted to test > the performance difference between the inlined and the apply-based > approach. But given that micro-performance test are known to be hard^1 > I wanted to make sure I was running the -server VM and that the code > was getting JIT'ed. > > I tried starting a clojure REPL with the option -XX:- > PrintCompilation, but I never see any prints. > > java -server -XX:-PrintCompilation -cp $CLOJURE_JRE_LIBS: > $USER_CLASSPATH clojure.main > > I've done a dotimes where I call a wrapped function many times. > > Now my question, is the code not JIT'ing or am I providing the wrong > JVM options? > > /Karl >
I think you want: -XX:+PrintCompilation Rich -- 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