The 2019 Perl Toolchain Summit

The 2019 Perl Toolchain Summit has come to a close. This annual gathering brings toolchain developers of both Perl and Perl6 together to work on the types of problems that are much easier with in-person collaboration. Attendees arrive with a list of things to work on, and depart with an even bigger list -- this year was no different for me.

There was one pressing zef issue that needed to be resolved: how to gracefully handle infrastructure failures that hosted the module indexes. Basically the server that was listed as the first mirror for a certain ecosystem died. zef was capable of eventually falling back to a different mirror, but the processes was slow. I used a two part solution: change the primary mirror to be an index hosted on github.com, and then add a cli api for disabling/enable auto update for any/all repository plugins. This was a good opportunity to make use of a little perl6 argument handling trick --/foo=1 which is 1 but False:

# Update all module indexes
--update

# Do not update any module indexes
--/update

# Only update the cpan module index
--update=cpan

# Do not update the cpan module index
--/update=cpan

The rest of the PTS was primarily spent tacking a much more difficult issue: having rakudo precompile installed scripts. Currently if you want to improve the startup speed of a script you have to put the code into a module and then use Module::Script inside the actual script file. Because each installed script also gets a wrapper script installed (that launches the actual script) we don't have to worry about the issue of providing a perl6 entry point. The proof of concept was pretty simple to implement: add the appropriate short-name lookup data (sha1s!) to the file system, and then tweak the way the wrapper script launches its matching script to work something like use bin/my-script.p6. This allowed all the machinery for loading module source vs bytecode + auto precompilation to Just Work (for lack of a better phrase) like it does for modules. This remains an unfinished venture though -- precompilation of basic scripts works, but precompilation of &MAIN has proven to be particularly difficult. jnthn and nine have provided some insights, but there is much more thinking to be done.

It should go without saying that nine and lizmat got to be at the receiving end of a few of my s22 brain dumps. Over the years it has taken a lot of energy to digest s22 to the point where I understand the remaining implementation possibilities. I haven't yet had the time/patience for explaining most of these things online -- the questions usually involve a lack of foundational understanding such that any explanation turns into the equivalent of yak shaving. So I'm always glad when PTS comes around and I get a chance to clarify, in person, how these things should work.

Last but not least I got to have a wide range of conversations that involved Perl6:

  • lizmat and skaji discussed what, if any, best practices should be used when generating distribution data with e.g. App::Mi6. In particular was the name, and how that should map to the file name used for the generated tar file.

  • Some Windows expertise in the form of Mithaldu provided convincing arguments against abusing the DOS subsystem as a valid strategy to avoid certain file naming issues.

  • Ingy informed us he was implementing tab completion on all shells for perl, cpanm, perl6, zef.

  • charsbar talked to me a little but about PAUSE, and offered his support to improve the CPAN ecosystem for Perl6 users. I'll need to further reflect how to merge the Perl6 concept of auth with PAUSE namespace ownership, but this should prove a promising avenue for a future PTS.


The sponsors and organizers for the Perl Toolchain Summit 2019 help to get the right people in the right place at the right time. Without them I'd just be yelling at people in IRC.

Booking.com, cPanel, MaxMind, FastMail, ZipRecruiter, Cogendo, Elastic, OpenCage Data, Perl Services, Zoopla, Archer Education, OpusVL, Oetiker+Partner, SureVoIP, YEF