I'm applying for a further 200 hours to continue my work on Perl 6 performance and reliability engineering. As has been the case so far, my work will span the Rakudo/NQP/MoarVM stack, and will focus on delivering improvements that benefit Perl 6 users. Reliability issues that are addressed will lead to contributions to the Perl 6 test suite, to help ensure things stay fixed.
In this round of work, I plan to focus on the following areas:
- The way Scalar assignments are compiled and optimized. Since these are extremely common, there is potential for some good wins here. My work will include making vivification of array and hash slots cheaper, making it possible to optimize away type checks in assignments, and performing the transformations required to allow for JIT compilation of assignments into simpler/faster code than today.
- The performance of
LEAVE
blocks, which are used heavily inside of many of the concurrency internals (in order to ensure the reliable release of locks). - The performance of private method calls in roles, which today are poorly
handled due to
::?CLASS
being generic. This work may also allow for improvement of$obj.SomeType::foo()
style calls. Private methods in roles show up in various bits of our internals, and no doubt in some amount of user code too. - More aggressive lowering of lexicals into locals; this optimization at compilation time not only has direct benefits, but makes analysis easier for the dynamic optimizer also.
- Improving the quality of code produced by the regex compiler in a range of situations. This can improve the speed at which we parse Perl 6 programs, as well as the performance of user's regexes and grammars.
As usual, I'll also work on other issues that Perl 6 users bring up as being significant to their use of the language.