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 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.

We have received the following grant application from Ricardo Signes. Before we vote on this proposal we would like to have a period of community consultation that will last seven days. Please leave feedback in the comments or if you prefer send email with your comments to karen at perlfoundation.org.

Name: Ricardo Signes

Project Title: Perl QA Hackathon 2016

Amount Requested: $1200

Synopsis:

This grant will be used to pay for travel for Ricardo Signes to and from the Perl QA Hackathon held in Rugby, UK in Q1 2016.

Benefits to Perl 5:

I have attended six of the seven Perl QA Hackathons (Oslo, Birmingham, Amsterdam, Paris, Lancaster, and Lyon) and have, at each of them, been able to contribute several solid work days of very productive work to the infrastructure behind the CPAN and related tools. Specifically, I was one of the chief implementors of the new CPAN Testers platform (Metabase) and built the Fake CPAN system for testing CPAN tools, and several reusable software libraries that are used to power both Metabase and Fake CPAN. In 2012, I worked on refactoring PAUSE, adding tests and improving maintainability. PAUSE, the system which processes contributor uploads to the CPAN, manages CPAN contributor identity, and builds the CPAN indexes used by CPAN clients to locate libraries for installation.

In previous years, I also spent a significant amount of time working with other attendees on their contributions, and plan to do the same this year. This is one of the several reasons that attendance in person is incomparably superior to "virtual attendance."

Deliverable Elements:

The QA Hackathon does not have a set agenda, so promising specific work product from it up front seems unwise. I have detailed, above, the sort of work that I am almost certain to do, however. Further, I will provide a public, written report of my activities at the Hackathon.

I hope, in particular, to work on the web code of PAUSE and to discuss mechanisms for improving collaborative code review within the community of toolchain maintainers.

The hackathon takes place over the course of four days, with eight to ten hour workdays. I'll probably also be working on the travel and in the evenings.

Any software that I produce will be released under the Perl 5 standard license terms, or possibly even less restrictive terms.

Applicant Biography:

I have been building software in Perl professionally for about fifteen years. I am a frequent contributor of original software to the CPAN and a frequent contributor to, or maintainer of, other popular CPAN libraries. I am also a contributor to the core Perl 5 project, and its current project lead.

I have been the recipient of TPF grants five times before, all of which were successful.

We have received the following Perl 6 Ian Hague Grant Application. Before we vote on this proposal we would like to have a period of community consultation for 10 days. Please leave feedback in the comments or if you prefer send email with your comments to karen at perlfoundation.org.

Name: Paweł Murias

Project Title: JavaScript backend for Rakudo

Synopsis:

Improve the JavaScript backend from handling NQP (Not Quite Perl) to full Perl 6.

Benefits to to Perl 6 Development:

A JavaScript backend for Rakudo will allow the use of Perl 6 in many new niches. The main focus of the grant is to allow Perl 6 to be used for writing the frontend part of single page applications (for the backend part we can use MoarVM).

A side benefit of the grant is that I intend to create a web-based REPL that should allow users to play around with Perl 6 without installing it. The goal of the grant is provide a JavaScript backend with enough features that the community can start experimenting with what running inside the browser will allow us to accomplish.

While working on the JavaScript backend I write test for the things I'm implementing. Expanding the test suite will directly help future backend authors. It also helps anyone doing non trivial changes to the existing backends. I have found MoarVM and JVM bugs in the past doing that.

Deliverables:

  • Upload rakudo-js to npm and CPAN.
  • Have this rakudo-js be able compile our chosen subset of the 6.c roast (official Perl 6 test suit) to JavaScript and pass them in a modern browser.
  • Write a simple REPL in Perl 6 that will run in a modern browser.
  • Write a tutorial showing how to use the JavaScript backend.

Project Details:

Rakudo compiles Perl 6 and NQP (a subset of Perl 6 that Rakudo itself is written in) to an abstract syntax tree form called QAST. QAST is then passed to either the MoarVM, JVM or JavaScript backends. Currently the JavaScript backend can only handle AST that is produced from NQP. The goal of this project is to improve the JavaScript backend to handle the QAST produced from full Perl 6.

I started the original work on the JavaScript backend while Rakudo was transitioning from being a Parrot targeting compiler to a multi-platform one. Parts of the work on the backend was done as parts of a GSoC project. After the GSoC projects I undertook a rewrite of the backend. The rewrite allowed me to add source maps support and use more type information to generate better code. The JavaScript backend is now merged in the the master branch of the NQP repo.

After reviewing the initial draft of this grant proposal Jonathan Worthington pointed out that implementing gather/take proved to be tricky on other backends. To reduce this risk I added basic continuations support to the backend. This was enough to run a basic form of gather/take: https://github.com/perl6/nqp/blob/master/t/js/continuations.t#L76 . I implemented this using a CPS transform with a trampoline (to work around the lack of tail call optimization).

Most of Perl 6 is built from smaller building blocks. This will mean that a large part of the effort will be needed before I get to the point where the test module compiles and the first test passes. On the other hand when the needed building blocks are implemented correctly I will be able to reuse the quality work that went into Rakudo and the setting.

In the last month, Chad has been working with Ricardo Signes (rjbs) doing final tweaking of Test2. For that, some new versions of Test2 and related modules have been published for testing and review purposes.

For those who are lazy, some pointers here for Test2, Test2::Suite, Test2::Workflow and dev release of Test::Builder.

Tony Cook writes:

Approximately 54 tickets were reviewed, and 12 patches were applied.

[perl #126593] illustrates how some of perl's internal tools need to be careful of which parts of the language they use.

The tr/// operator can do its job in one of two ways, if all the code points are between 0 and 255 with a 256 entry table of shorts, otherwise using a swash, which is created by SWASHNEW in lib/utf8_heavy.pl.

tr/// uses the UTF-8 flag on the search and replacement strings to decide whether to use the look-up table or the swash, so it's possible for the swash to be used even when the search and replacement strings are representable as bytes.

aa8f6cef changed a s/// operator in lib/utf8_heavy.pl to a tr/// operator. All of the characters in the search and replacement strings can be represented as bytes - they're all ASCII range, so at first sight the implementation should be using the lookup table rather than the swash.

The problem is code that uses the deprecated ${^ENCODING} variable, in this case the encoding::warnings module. encoding::warnings sets ${^ENCODING} to a filter that warns (or croaks) when a non-UTF-8 marked PV with non-ASCII is used with UTF-8 marked PVs.1

When parsing string literals, including tr/// operators, S_scan_str() in toke.c always returns UTF-8 marked strings when ${^ENCODING} is true

The module that started [perl #125693] loads encoding::warnings, so ${^ENCODING} is now set, then Fatal, which loads Carp which includes the line:

$VERSION =~ tr/_//d;

so both the search and replacement strings are passed to S_pmtrans() (op.c) as UTF-8 marked strings.

S_pmtrans() attempts to create a swash, which starts to load utf8_heavy.pl, until we get to the line:

(my $loose = $_[0]) =~ tr/-_ \t//d;

where things break.

[1] the current recommended practice is that the UTF-8 flag controls internal representation only and combining two such strings isn't an issue. Don't use encoding::warnings.

Evozon have been busy working on their grant to improve blogs.perl.org.

Since our first progress report they have worked hard analysing the project's requirements and implementing them in Jeff's public GitHub repository.

The project runs PearlBee using Docker and Carton.

So far, the new system supports the following:

  • RSS export
  • Markdown editing
  • Data migration from the old site
  • ElasticSearch
  • An inproved user interface
  • Home page posts
  • Per-user posts
  • User profile page
  • Permissions
  • Associating assets with blog posts
  • Comments

The project has a private staging server to demonstrate the new system: soon we will open it up to the wider community for testing.

I am pleased to be able to bring you the news we have all been waiting for! We know the wait hasn't been easy, and so the YAPC::NA 2016 organizing committee would like to take this opportunity to thank you for your patience. It's been a long road getting to this point, but thankfully we have finally secured a location that best fits all of our needs.

Throughout our search we considered and visited venues in Maryland, Pennsylvania, Michigan, Kansas, Florida, and Washington D.C.. Many people spent countless hours putting out feelers and soliciting bids. In particular, we would like to give a huge thanks to the DC/Baltimore Perl Mongers and the Detroit Perl Mongers: their efforts were invaluable in this process, and we hope that we can eventually bring YAPC::NA to their fantastic cities.

It is with great enthusiasm that we happily announce YAPC::NA 2016 will be held Sunday, June 19th through Friday, June 24th at the Downtown Doubletree Hotel in Orlando, Florida!

The main event will run from Monday, June 20th through Wednesday, June 22nd. Master Classes, training, and other activities will be held on the 19th, 23rd, and 24th. We highly encourage you to attend all days, but especially look forward to seeing you at the Main Event.

We'll be opening up the new website, registration, call for talks, etc over the next month or so. Please continue to watch your email for future updates.

About TPF

The Perl Foundation - supporting the Perl community since 2000. Find out more at www.perlfoundation.org.

Find recent content on the main index or look in the archives to find all content.

Pages

Recent Comments

  • Ranguard: +1 read more
  • Neil Bowers: I think this grant is a no-brainer to support. Having read more
  • David Golden: I strongly support this grant. Having Rik's input (and output) read more
  • Samuel Kaufman : Sounds like a great idea, qa hackathon could I'm sure read more
  • Philip Mabon: +1, pmurias is the best choice for this grant to read more
  • Tobias Leich: +1, pmurias is the perfect fit for this task. read more
  • Brian Julin: +1 browser-side Perl 6 would provide huge boost to the read more
  • JimmyZ: +1. read more
  • Ngangsi Richard: @Ben Tilly This is a report about Cameroon. http://tech.co/top-15-entrepreneurial-countries-world-2015-06 read more
  • Mitch McCracken: Indianapolis has plenty of conference space O:) read more
OpenID accepted here Learn more about OpenID
Powered by Movable Type 6.2.2