2014.30 & 2014.31: A release, upcoming Star, optimizations, v5 refactor, …

Hey there,

last week I didn’t find enough exciting stuff to talk about and there was a release due for the middle of the week, so I decided to just skip a week. Here’s what happened in both weeks combined:

  • There was a Rakudo release and avuserow is currently quite close to finishing up a Rakudo Star release as well. Since Rakudo Star was supposed to be a quarterly release anyway, we’re still on track :P
  • on the JIT side of things, thanks to brrt MoarVM got the following stuff improved:
    • ops that want to invoke can now be handled, including the smart_stringify and smart_numify ops, which were very common in our test code (we’ve been using the CORE.setting to get “real-world” code.)
    • the jit learned how to cope with On-Stack-Replaced frames.
  • thanks to a test case by TimToady, jnthn was able to fix a couple of memory leaks in MoarVM’s spesh framework (found with valgrind).
  • jnthn also came up with a bunch of optimizations that benefit regex/grammar matching, start-up time, and junctions with certain operators.
  • Inlining, which is a major source of speed improvements on MoarVM, has been bailing out if it saw the lexotic op in a frame (which is used for example for returning, but also for exceptions) or when a frame had handlers (exceptions handlers for example). Those occur very often in code generated by Rakudo, so Perl 6 code didn’t benefit from inlining as much. Both of these have been made to cooperate with inlining now, though.
  • extops, meaning ops that are loaded into the VM from a dynamic library rather than being built into it, can now participate in the facts discovery and bytecode specialization phases of spesh. This is especially nice for Perl 6’s containers, as the decont operation can now be as efficient as a simple pointer indirection.
  • Froggs has reached the point where a v5 implemented in Perl 6 code (rather than NQP code as it used to be) runs again.
  • Froggs also made warnings print line numbers and file names again on JVM and MoarVM.
  • Froggs implemented the “charrange” method for our regex compiler, which I helpfully stubbed in about 9 months ago …
  • Coke spent a lot of time making sure non-passing tests were properly fudged and had tickets in our RT.
  • dwarring has made a bunch more tests corresponding to advent calendar posts and created at least one RT ticket for those, leading to (actually: following) a discussion about how junctions should interact with smart matching.
  • pmurias has started working on NQP-Js again, our javascript backend for NQP (and rakudo in the future). There’s a todo file to which low hanging fruit will be added for people who are interested in getting into this project.
  • Mouq has been working on support for semilists (“semicolon-separated lists”) in hash and list subscripts, which are going to help a lot with multi-dimensional arrays and such.
  • hoelzro improved our test running of rakudo a bunch, among other things to make output more useful
  • japhb built even more improvements to perl6-bench!
  • Froggs made it finally possible to use variables and code-blocks as quantifiers in regexes, i.E. / foo ** $a /. This is probably a feature many people have missed so far! It works on all our backends, as well!
  • Froggs also improved a bunch of other things, like how words are split inside our quotewords (which we spell < >).
  • Instead of writing this post, I spent some time implementing more and more ops for moar-jit, following a very helpful bail report by moritz.
  • Another thing I implemented (after jnthn assured me it would be simple) is less conservative marking of which guards we end up relying on when specializing code; 15 guards removed for the core setting may not be terribly much, but each of these may correspond to any amount of unnecessary bail-outs from specialized bytecode back to unoptimized bytecode.

Right now, some more bugs in the jit and spesh are being ironed out. After that I’ll get to find out what happened to the about 500 frames that used to run into some unimplemented operation I implemented in the mean time; Each of those can either run straight into a different unimplemented op, or get compiled successfully. Either case is interesting and they are easy to distinguish by just looking at the overall numbers of bails.

Anyway, it’s nearing midnight and I still want to get this post out the door on monday local-time. So here you go, an unpolished blog post :)

Hope your week’s going to be good; I’m sure it’ll be a nice week for us Sixers :)

3 thoughts on “2014.30 & 2014.31: A release, upcoming Star, optimizations, v5 refactor, …

    • Thank you, but it’s nothing really :)

      Only picking up what’s easy to do and taking the boring work off of brrt’s back. brrt not only got the jit started, but also did all the more interesting ops: things that branch off, things that invoke other code (which means we have to drop down into the interpreter and back into the jitted code), deoptimization (which means we have to drop down into the interpreter and make sure all frames are the way they have to be as well as all local variables etc etc)… i could go on :)

Got something to note?

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s