Wow, it’s gotten pretty late in the day by now; I’ve kind of been digging some more into MoarVM’s profiler (specifically the allocation logging part) and trying to use the gained knowledge to improve performance problems highlighted by our benchmarks …

It occurs to me, that a list of changes is kind of like a montage. And every hero needs a montage! This one is covering two weeks:

jnthn started implementing parameterized types, which is an important step towards having Native Shaped Arrays. The branches p6e in MoarVM and NQP contain that work. You can find the overview document on github in the MVM repository.

jnthn also improved things on Windows: failing tests and a gigantic performance hit from checking if a debug flag is set in the environment too damn often.

also, jnthn fixed floor and ceil on MoarVM giving bogus results when they get big numbers.

TimToady has found four distinct ways to not properly implement the second tiebreaker for longest token matching (“longest literal string wins”). He’s now working on the fifth way.

baby-gnu made MoarVM more suited for distributions to package it (don’t install MAST::Ops in /lib/MAST, for example)

FROGGS got the “reporter” branch of panda merged into master, so you can now upload testing reports by setting the environment variable PANDA_SUBMIT_TESTREPORTS

Another thing FROGGS did was make lists of adverbs without commas between them work properly in many more situations.

I implemented an optimization that flattens METAOP_ASSIGN into the calling code, thus getting rid of an invocation and taking a closure. This makes things like += noticably faster. METAOP_REVERSE (the R metaop) and METAOP_NEGATE (like in !==) got a similar treatment.

I also made DIVIDE_NUMBERS (which is used in the majority of rational number arithmetic operations) a tiny bit better by making its contents completely inlined on all backends.

Thanks to the profiler and spesh log output, I found that &prefix:<!> and &prefix:<not> were being treated very poorly by our code-gen; micro-optimizing it made these operators faster.

Other optimizations I’ve built didn’t have such a big impact: getting rid of some superfluous “set” instructions in MoarVM (equivalent to the simplest case of “mov” on x86), turning “indirect” operations into “direct” operations if the indirectness is actually known at spesh time, directly using the source of a boxing operation instead of unboxing directly afterwards, …

Also, I let the spesh log dumper also output the name of a lexical variable that’s accessed.

lizmat fixed a gigantic amount of warnings for clang – now actual problems should stand out much more readily even on Mac OS X.

lizmat optimized first-index, last-index and grep-index a bunch faster.

with some helpful nudging by lizmat, TimToady made the errors you get for trying to use negative indices in postcircumfix:<[ ]>. If it’s clear at compile-time, you can get a helpful error as soon as that.

JimmyZ added jit compilation support for some more ops: cmp_i, isnanorinf and cmp_n.

Mouq worked towards making slangs more easily usable from Perl 6 code, among others by introducing the ~ twigil.

usev6 did a whole lot of triage on our bug tracker and created a whole bunch of tests for bugs in RT.

smls made our documentation a bunch more helpful by giving each class or role a short description in the types list and Mouq added documentation for @(), %() and the type smileys.

nine has been working a whole bunch on Inline::Python for our lovely rakudo.

And here’s a few new modules that were added to the ecosystem:

On top of all that, lizmat did the 2014.11 rakudo compiler release last week! Thanks a bunch! 🙂