Fork me on GitHub
#clojure-dev
<
2016-10-11
>
ghadi15:10:08

https://github.com/ghadishayban/clojure/tree/invokedynamic A branch with some usages of invokedynamic in the compiler. all tests pass and is binary compatible with current release

ghadi15:10:46

vars used as expressions are indified, so are keywords, and keyword invoke sites (:foo thing)

ghadi15:10:06

bytecode is >=1.8 only

ghadi15:10:40

Still need to do protocol invokes (relatively straightforward) and lazy var loading (hard)

ghadi15:10:41

performance should be identical to current release

seancorfield17:10:06

@ghadi If performance is "identical", could you summarize the other benefits for this, in a sentence or two?

ghadi17:10:19

It's setting the stage for improvements

ghadi17:10:45

At least there are no regressions... I suspect keyword invokes are a lot faster

ghadi18:10:17

But haven't measured them specifically

ghadi18:10:26

I'm solving for startup time

seancorfield20:10:40

Ah, cool. Thanks.

ghadi20:10:37

You should run your production API with that branch 😃

ghadi20:10:43

I have more interesting things locally, but the above changes are what I'll show to Rich, probably after the 1.9 cycle

seancorfield20:10:35

Heh, I’m happy to have 1.9.0 Alpha 13 in production but I’ll stick to official Clojure/core builds 🙂

ghadi20:10:16

(I kid. But in all honesty I did stick to very conservative changes. If you had a handy benchmark harness by all means...)

Alex Miller (Clojure team)22:10:34

To be clear, will mostly affect startup time of aot code (so not your typical repl)