Do you have any measurements, results, or conclusions to report?

On Tuesday, April 16, 2013 12:12:15 PM UTC-4, Ghadi Shayban wrote:
>
> I've added a very minimal usage of invokedynamic to the compiler.  
> Basically the smallest delta without having to change internals of ObjExpr 
> or break ABI compatibility.  This is minimal and raw.  There are many many 
> usages of indy that will really help the Clojure runtime, this ain't one of 
> them.  No benchmarks here, it's probably slower.
>
> In current Clojure mainline, a Fn has reference slots to any vars it needs 
> in its constant pool, like a cache. Anytime a non-dynamic Var's value needs 
> to be accessed, the Var goes from the constant pool to the stack, and 
> getRawRoot() is invoked on it.
>
> With this change, an invokedynamic instruction instead creates a 
> ConstantCallSite, which closes over a looked-up Var, and then binds the 
> call site to invoke getRawRoot() on it directly.  This is only for 
> non-dynamic Vars.
>
> Simple todos:
> cache the CallSite as a member on the Var itself so that all identical 
> indy lookup instructions have fast bootstrapping.
> emit a similar call for dynamic vars
> remove the emission of Vars into the constant pool of a class
>
> Lots of really interesting use cases for invokedynamic and all the 
> associated combinators in java.lang.invoke:
>
> Better protocol callsite caching
> CallSite "middleware" for things like CLJ specific instrumentation
> equality could be a special instruction
> KeywordCallSite could be its own instruction as well
> (apply) argument "spreading"/varargs array collection (through the 
> combinators)
> potentially removing IFn.invoke(*) and using MethodHandle invocation 
> instead (fat chance)
>
> You can pull down the changes at github.com/ghadishayban/clojure.
> mvn clean package, tested on OpenJDK 1.7
>

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