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.

Reply via email to