My bad - I assumed this didn't work anyway for non-dynamic vars, but it
does indeed work. So the only difference with dynamic vars is that you can
use thread-local bindings?


On 17 June 2013 16:25, Cedric Greevey <cgree...@gmail.com> wrote:

> Hot function replace by redefn'ing it at the REPL wouldn't work anymore.
> Such an optimization would have to be a deployment-time option rather than
> forced.
>
>
> On Mon, Jun 17, 2013 at 12:05 AM, Colin Fleming <
> colin.mailingl...@gmail.com> wrote:
>
>> Interesting, thanks for the pointer. I'll read up a little more on the
>> technicalities of invokedynamic. Can anyone answer the other question about
>> why, in the 95% case of non-dynamic vars we still need the var indirection?
>> It seems like caching the IFn (or even the concrete derived class, since
>> we're assuming it won't change) would be a huge performance win.
>>
>> Cheers,
>> Colin
>>
>>
>> On 17 June 2013 14:38, Ben Mabey <b...@benmabey.com> wrote:
>>
>>> On Sun Jun 16 16:51:41 2013, Colin Fleming wrote:
>>>
>>>> Hi all,
>>>>
>>>> This is slightly tangential to the current discussion on unnecessary
>>>> type checks - does anyone have any good links to information about the
>>>> JIT optimisations performed by Hotspot? One question I've been
>>>> interested in recently is how well it can optimise Clojure function
>>>> calls. The compiled classes of Clojure fns cache references to the
>>>> vars of functions that they call with the bytecode equivalent of:
>>>>
>>>> private static Var const__0 = RT.var("namespace", "var")
>>>>
>>>> and the calls are like:
>>>>
>>>> ((IFn) const__0.getRawRoot()).invoke(**args)
>>>>
>>>> for non-dynamic bindings (the default from 1.3+ IIRC), and
>>>>
>>>> ((IFn) const__0.get()).invoke(args)
>>>>
>>>> Does anyone know if Hotspot is capable of optimising these calls?
>>>> Another question would be why in the non-dynamic case the IFn
>>>> contained in the var is not cached since the root binding should never
>>>> be modified. Is this just to support alter-var-root, or is it to
>>>> support declare'd vars which may not contain an IFn at compilation
>>>> time? I would imagine that Hotspot would optimise this case much
>>>> better since this mimics what objects in Java tend to do.
>>>>
>>>> Cheers,
>>>> Colin
>>>>
>>>> --
>>>> --
>>>> 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+unsubscribe@**googlegroups.com<clojure%2bunsubscr...@googlegroups.com>
>>>> For more options, visit this group at
>>>> http://groups.google.com/**group/clojure?hl=en<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+unsubscribe@**googlegroups.com<clojure%2bunsubscr...@googlegroups.com>
>>>> .
>>>> For more options, visit 
>>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out>
>>>> .
>>>>
>>>>
>>>>
>>> Fogus touched on this issue in this post about invoke dynamic:
>>>
>>> http://blog.fogus.me/2011/10/**14/why-clojure-doesnt-need-**
>>> invokedynamic-but-it-might-be-**nice/<http://blog.fogus.me/2011/10/14/why-clojure-doesnt-need-invokedynamic-but-it-might-be-nice/>
>>>
>>> From the post:
>>>
>>> "To provide this level of flexibility Clojure establishes a level of
>>> indirection.3 Specifically, all function lookups through a Var occur, at
>>> the lowest level, through an atomic volatile.4 This happens every time that
>>> a function bound using the def/defn special forms is called. This
>>> indirection is not amenable to HotSpot optimizations.
>>>
>>> This is a great place for invokedynamic, especially during production
>>> scenarios where the root value of Vars remain stable. That is,
>>> invokedynamic would eliminate the volatile lookup on every call and likely
>>> lead to HotSpot inlining."
>>>
>>>
>>> -Ben
>>>
>>>
>>> --
>>> --
>>> 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+unsubscribe@**googlegroups.com<clojure%2bunsubscr...@googlegroups.com>
>>> For more options, visit this group at
>>> http://groups.google.com/**group/clojure?hl=en<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+unsubscribe@**googlegroups.com<clojure%2bunsubscr...@googlegroups.com>
>>> .
>>> For more options, visit 
>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out>
>>> .
>>>
>>>
>>>
>>  --
>> --
>> 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/groups/opt_out.
>>
>>
>>
>
>  --
> --
> 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/groups/opt_out.
>
>
>

-- 
-- 
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/groups/opt_out.


Reply via email to