Perfect explination, thanks!

kl. 20:41:56 UTC+2 onsdag 6. august 2014 skrev Reid McKenzie følgende:
>
>  Functions are objects implementing the IFn interface. This interface 
> defines a set of methods named "invoke" which return an object given up to 
> 21 arguments.  Once the compiler is done emitting any given function, an 
> IFn object has been created. Def is a general operation which creates a 
> value and binds it to a var named by the current (*ns*, symbol) pair. So 
> for defn and an instance of this IFn object is what the bound var points 
> to. So as an example,
>
> user=> (defn foo [x y] (+ x y 1))
> ; macroexpanded (def foo (fn* ([x y] (+ x y 1))))
> #'user/foo
>
> If you inspect the user namespace, you will find that the symbol foo now 
> maps to the var #'user/foo. Subsequent textual occurrences of the symbol 
> foo in this namespace will at compile time be mapped to the var #'user/foo, 
> and the emitted code will take the var #'user/foo and dereference it to get 
> an IFn object implementing the foo function which can be invoked.
>
> As there is overhead associated with dereferencing a var and some code 
> such as clojure.core/* is expected not to be redefined by users, the 
> ^:static annotation in Clojure 1.3 directed the compiler to emit `public 
> static invokeStatic` methods in addition to the normal `public invoke` 
> methods. This allowed potentially hot path functions to statically invoke 
> each other rather than using var indirection. This static linking of 
> function calls is how Oxcart achieves the reported 24% speedup, and the 
> linked direct branch is Rich implementing invokeStatic again, presumably 
> for Clojure 1.7.
>
> This static linking feature was introduced in Clojure 1.3 and removed in 
> Clojure 1.4 because as I mentioned in my linked blog post the downside of 
> static linking is that live development and code redefinition become harder 
> or impossible. My expectation is that, as 1.7 is projected to introduce 
> compilation profiles, this problem will be mitigated by different builds or 
> profiles of Clojure which may enable or disable static linking in a user 
> visible manner. So for an application deployment build you may choose 
> [org.clojure/clojure "1.7.0-static"] which can use ^:static annotations for 
> a speedup while for development you may use [org.clojure/clojure "1.7.0"] 
> which may ignore ^:static in exchange for a better REPL experience as 
> Clojure 1.6 and 1.5 do.
>
> Hope this helps,
> Reid
>
> On 08/06/2014 11:22 AM, Robin Heggelund Hansen wrote:
>  
> Don't understand the compiler that well. Could you provide a short 
> description of what is being done?
>
> kl. 13:05:40 UTC+2 onsdag 6. august 2014 skrev Jozef Wagner følgende: 
>>
>> See this WIP branch https://github.com/clojure/clojure/tree/direct
>>
>> On Wednesday, August 6, 2014 12:54:32 PM UTC+2, Robin Heggelund Hansen 
>> wrote: 
>>>
>>> Just read this blog post about Oxen (
>>> http://arrdem.com/2014/08/05/of_oxen,_carts_and_ordering/?utm_source=dlvr.it&utm_medium=twitter).
>>>  
>>> In it is mentioned that Rich is re-introducing invokeStatic to achieve a 
>>> possible 10% performance increase for Clojure 1.7.
>>>
>>> I couldn't find any information about this. Anyone know where I can find 
>>> out more?
>>>
>>   -- 
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clo...@googlegroups.com <javascript:>
> Note that posts from new members are moderated - please be patient with 
> your first post.
> To unsubscribe from this group, send email to
> clojure+u...@googlegroups.com <javascript:>
> 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+u...@googlegroups.com <javascript:>.
> For more options, visit https://groups.google.com/d/optout.
>
>
> 

-- 
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