Week 5 of Web.pm -- more tinkering everywhere

masak on 2009-04-25T21:30:45

U iz so cute!
U iz so hawt!
Ur eyez iz liek birdz,
an ur hair iz liek goatz
comin down teh mountin. Datz hawt.
 
Ur teefz iz liek sheep
dat just hadded a baff.
Liek twin sheep,
bcz non of ur teefz iz missin.
      — Song of Solomon 4:1-2

This week, inspired by jnthn, I'll switch summary style and go point-by-point instead of in free discourse mode. Just to try it out.

I would like you to note, reading this, how many different names of people appear among the different items. This is definitely no longer a three-man effort, but significant parts of the Perl 6 community pushing towards a point where we can build awesome (or at the very least slightly above average) web apps on top of Rakudo and Parrot.

  • Renamed the Lobster into the Nibbler, like I said I would. mpeters++ for the ASCII image.
  • mberends++ insisted that we spend the hackathon putting bacek++ and Tene++'s socket work into Rakudo itself, continuing on cosimo++'s work. This, for various reasons, took an evening and a day, but it was very much worth it. Seeing the Nibbler being served fairly rapidly was a significant reward.
  • One thing that had to be fixed before we could get sockets to work was that non-Rakudo objects couldn't be passed as return values any more. (There was some type checking going on which assumed that the object in question was a Rakudo object.) Passing non-Rakudo objects is vital in the long term, when we expect Parrot to be a platform for many languages communicating freely with each other. jnthn++ and pmichaud++ fixed.
  • Next slight problem that turned up was that IO::Socket::INET turned out to be the first setting module with those double colons in it, and the underlying setting magic choked a bit on them. jnthn++ showed me how and where to fix.
  • Wanting to port November over to the Request/Response model of Web.pm, I took a look at November for the first time in a while. Turns out it has bitrotted somewhat, so I had to take care of that.
  • Bitrot issue #1: join no longer accepted only one argument. This was a new restriction accidentally added to Rakudo. I reverted the change; moritz++ added the appropriate spectest.
  • Bitrot issue #2: In order to prevent autothreading, one of the loops in Dispatcher.pm was spelled for @rules -> Object @pattern, $action { ... }. This had stopped working in Rakudo due to a combination of stricter type matching in signatures and a failure to handle this particular case — the case where an Array is typed as containing Object elements. Fortunately, a workaround turned out to be simply removing the typing for now.
  • Still didn't get started on porting November over. I've created the branch "web" locally, and now that the tests pass, I can start moving things over. Will probably be a while before we merge this one back into master. But being rid of CGI.pm, if only in a branch, will be nice.
  • As a surprise bonus, azawawi++ came to me on #perl6 with a number of STD.pm parsefails that he discovered while parsing November in Padre. Hm, maybe it's time for a Perl 6 module that tests Perl 6 projects against STD.pm?
  • After discussing the Genshi clone with Tene on #november-wiki, I started writing a simple prototype with a grammar that would pick apart an XML string and put it together depending on the values of pe: attributes. I failed, and spectacularly. On the plus side, we discovered quite a number of .perl bugs in bleeding Rakudo.
  • Even though the prototype never did what it was supposed to demonstrate, it did give me direction to start writing some tests and a small module. This module doesn't yet do what the prototype almost did.
  • Working name for the Genshi clone: Hitomi. I've understood this means "doubly beautiful". That is, once for being based on Genshi, and once for being written in Perl 6. ☺

I wish to thank The Perl Foundation for sponsoring the Web.pm effort.