Interesting point about the performance of JIT and GC on JVM. I didn't realize that they could be so highly performant.
Also, I had thought "Metal Clojure" would have been a good name for this project, but you went ahead and stole it before I even thought of it! On Monday, 25 April 2016 14:49:25 UTC-7, tbc++ wrote: > > I wrote Pixie and did a fair amount of benchmarking on it. As it stands > tracing JITs work well on tight loops. That means in a perfect world you > would only have one hot trace through a given set of functions. That's > actually harder to pull off than it sounds. > > Take for instance the PersistentHashMap. If you dig into that > implementation you'll see dozens of if statements that are hit in different > conditions. If you're adding a new branch, adding a new leaf, copying nodes > of different types (there are three node types). So simply adding to a > hashmap requires dozens of conditional branches and the result of those > branches changes every time you add a new item. > > So what I ended up doing for Pixie is disabling the JIT when digging into > the hashmap implementations. The PHM was implemented in RPython directly > and the JIT wouldn't try to optimize it. However, sometimes the JIT calls > back into user code (equals comparisons, and hashcode calculations), so > then you have to re-enable the JIT in a place where there isn't much of a > loop context. > > There's many other locations like that. You may think you have a simple > loop, but then somewhere deep in your code you have a call to update-in, > which creates a lazy seq for the path, then iterates on that while digging > into several hashmaps and boom, the JIT just bails out. > > > The more I read up on it though, the more I see examples of tracing JITs > working poorly for "application code". That is, normal code you'd run in a > webserver. That sort of stuff just has so many if statements that the JIT > almost always optimizes the wrong thing. > > On Mon, Apr 25, 2016 at 3:12 PM, lvh <_...@lvh.io <javascript:>> wrote: > >> Hi Tim, >> >> On Apr 25, 2016, at 3:50 PM, Timothy Baldridge <tbald...@gmail.com >> <javascript:>> wrote: >> >> A LLVM/C++/RPython based version of Clojure would on a good day come in >> at about 1/10 the speed of Clojure on the JVM for general use cases. >> >> >> Whoa! The RPython one is particularly interesting; are those the figures >> you saw out of your efforts in porting Clojure to PyPy? Did you ever get a >> chance to interact with the PyPy folks when you saw such (IMHO) >> pathological performance figures? (No blame; a genuine question!) >> >> >> lvh >> >> >> On Mon, Apr 25, 2016 at 2:18 PM, Raoul Duke <rao...@gmail.com >> <javascript:>> wrote: >> >>> > The main motivation would be performance gains. >>> >>> blah? so many impedance mismatches and layers of indirection that i >>> don't think it will gain much? i mean, it would probably be better to >>> spend time tuning gc parameters or something. just a rant / guess. >>> e.g. robovm is for some use cases perfectly fine performance wise >>> believe it or not. >>> >>> -- >>> 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. >>> >> >> >> >> -- >> “One of the main causes of the fall of the Roman Empire was that–lacking >> zero–they had no way to indicate successful termination of their C >> programs.” >> (Robert Firth) >> >> -- >> 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 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. >> > > > > -- > “One of the main causes of the fall of the Roman Empire was that–lacking > zero–they had no way to indicate successful termination of their C > programs.” > (Robert Firth) > -- 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.