On Thursday, July 3, 2014 6:15:32 PM UTC+1, adrian...@mail.yu.edu wrote: > I'm not sure I understand what you're saying here. :( Your example is > simply benchmarking the same bit of code in each form. Why would evaluating > one explicitly affect that benchmark? Your original example called eval in > the body of the functions that you're benchmarking. That is where the > overhead comes from. >
No I'm benchmarking the functions returned by f1-4. They use different ways of generating their return function, i.e. by eval'ing the function constructor (fn [] ...) once before the benchmark -- the `let [f (f1 v)]` part. Of course the call to (eval) takes time, but my point is that a function that was generated using (eval) is exactly the same as one generated statically. Except somehow when unquoting the x-parameter to create the eval'ed form things are being cloned that shouldn't. That's what I'm measuring. Actually I just found a better example that doesn't need timing etc: (def x (Object.)) (str x) ; "java.lang.Object@..." `(str ~x) ; (clojure.core/str #<Object java.lang.Object@...>) (eval `(str ~x)) ; RuntimeException: Can't embed object in code, maybe print-dup not defined: java.lang.Object@... (eval `(str x)) ; "java.lang.Object@..." -- works through resolving user/x So it's not actually a problem with quoting, that returns a list with str and the object as expected. But eval'ing that list fails because it can't print-dup'ed?! I can't tell where that's happening, because it looks like clojure.lang.Parser.eval is actually processing the elements of the list as I expected… > -- 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/d/optout.