Perl 6 Release Goals: Final Grant Report
Thu, 04-Feb-2016 by
*Jonathan Worthington writes:*
I applied for a third and final extension of my Perl 6 Release Goals grant, which was published for [comments in December](http://news.perlfoundation.org/2015/12/perl-6-release-goals-first-gra.html) and subsequently approved. The final extension granted a further 110 hours of work, which I completed prior to the Christmas release of Perl 6. This report covers the work that was done under this extension, and concludes with some final comments on the grant as a whole.
I'd like to start with a small note on timing. In November, I worked almost exclusively on Perl 6. Around the middle of the month, I had exhausted all of the hours that had been assigned in the previous grant extension. The general understanding on Perl 6 Core Development Fund grants is that I may - at my own risk - go ahead and continue with work that needs doing, in hope that a grant extension application will be approved. I did this, concurrent with writing up a report on what was achieved and requesting the extension. Thus, I didn't actually endure a sleepless week or two in December completing the hours in the final grant extension - as was speculated in one comment! Rather, the extension covered all of my December work, as well work in the later parts of November.
Numerous issues were resolved during the hours provided by this final grant extension:
- Supplies, the Perl 6 API for asynchronous streams of data, got a design cleanup. The API was good overall, but several corners of it were suboptimal both from a language design and safety point of view, as well as from an optimizability perspective.
- Some API design issues around async sockets and processes, as well as with Promise combinators, were resolved. The CLOSE phaser was added to supply blocks to facilitate resource management, and the whenever syntax came to support channels as well as promises and supplies. This meant that the earliest block syntax, which I've never been entirely happy with, could go away. Finally, a couple of other concurrency bugs were resolved.
- A number of important I/O issues were dealt with, the most notable of which involved dealing with various complaints about Windows newline handling. The native file descriptor behind a handle was also exposed, for use in conjunction with native calling, and UDP support was added to IO::Socket::Async.
- The semantics of multi methods stubbed in roles, as well as composition of multi methods in roles, were reviewed and modified to be more useful.
- Sized native lexical variables got a good looking over, as well as unsigned native integers. Numerous issues around them were addressed.
- A few control flow related semantic issues were ironed out, generally involving the interaction of phasers and control flow operations (such as next and last).
- Nearly 20 other smaller semantic bugs were resolved in a range of areas: list flattening edge cases, role punning, .?/.+/.* behavior with multis, multi-dispatch with optional parameters, shadowing of built-in types, return constraints on blocks, and sigilless variables in list assignments.
- A couple of nasty bugs were fixed (a GC hang, a pre-compilation bug, and a meta-object mixins problem).
I also contributed in various ways to preparing for the release itself. Of note, I added the experimental pragma and moved a number of things we were not happy with including in Perl 6 Christmas behind it. I also clarified version reporting to reflect the language/compiler version distinction more cleanly. Finally, I was there on Christmas day itself to lend a hand with the release.
With the Perl 6 Christmas release now made, this Perl 6 Release Goals grant has reached its natural conclusion. I would like to thank all those who have contributed funds to make the initial grant and its two extensions possible. For me, 2015 was a year with various happy distractions, but also in the latter parts of the year suboptimal health. Together, these notably reduced my usual levels of "free time" for participating in Perl 6. So, rather than simply enabling me to do a bit more, this grant was critical to my continued substantial involvement in the Perl 6 project during this important year. I would also like to thank TPF for administering this grant, my grant manager, and last - but certainly not least - the Perl 6 community, who I count among the best folks I've worked with on anything, ever.