February report of the Perl 6 Development Grant of Jonathan Worthington
Tue, 10-Mar-2020 by
Matthias Bloch
edit post
Jonathan writes:
After a hiatus for a wide range of reasons, I'm back to work on the performance and reliability grant. Most of my work during February was on fixing bugs - more than 15 of them, ranging from relatively straightforward to multi-hour optimizer bug hunts.
I did, however, do something on the performance front too. I picked up my work on derived specializations, completed it, and merged it. This work addresses a problem with optimizing methods and subs like push, which in a larger application will have a huge range of types showing up in their second argument, but with a fairly constant type (probably just Array) in their first. Before now, we'd (up to a limit) use memory making many of specializations based on the observed type tuples, and beyond that point just fall back to "certain" optimizations, which provide relatively little improvement. Derived specializations let us find cases where something is quite stable in some of its argument types, but varies a lot in other argument types. We can then produce an optimization that uses the knowledge of those that are stable.
```
10:43 Bring the derived specializations work to completion
and merge it
0:26 Fix a miscompilation of signature like -> @a[3] {}
where the variable name got wrongly declared as
@a[3], so the value cannot be used
0:46 Fix auto-generated protos showing up with the name
AUTOGEN in backtraces and in introspection
0:56 Fix <.[\d]> triggering an internal compiler error
0:22 Correct non-sensical behavior when doing an iteration
over a single Junction
0:39 Fix miscompile of `M::foo if bar` that let to broken
code-gen
1:20 Fix wrong behavior when a placeholder parameter was
used in an S/// or s/// construct
0:27 Fix too-shallow cloning of shaped arrays
0:23 Fix a problem where Str($*USER) returned an internals
object rather than a Str
0:34 Make `is assoc` actually compile as a chaining
op, enabling this feature
0:32 Fix internal compiler error on redeclaration of a
parameter
0:23 Prevent uncaught thread exceptions from bringing down
the REPL
0:53 Hunt down and fix a SEGV in MoarVM in specific
interactions of deoptimization with uninlining and
follow-up OSR in an uninlined frame
2:45 Fix a couple of issues related to inlining and
deletion of basic blocks, uncovered by further
optimization possibilities created by derived
specializations
1:18 Fix a file descriptor leak involving connecting
async procs with pipes
5:41 Debug and fix a complex bug involving exception
handlers that that led to further throwing in
combination with inlining
0:16 Look into an unreliable spectest that occasionally
failed, and fix the races in it
2:45 Hunting blockers for the February release. Worked
out an errata test regression and delegated fixing
it. Fixed a MoarVM link issue on MacOS. Investigation
and feedback on another issue, and eventual fix after
further feedback from module author.
0:44 Assorted ticket triage, code review, and merging
Total reported time in this report: 31:53
Remaining approved hours on current grant period: 157:00
```
Comments (0)