Day 86: IRC bot, CGI game, Parrot compilation, Fortress.

autrijus on 2005-04-27T20:49:01

Today I read the Fortress spec (via λ the Ultimate) with great interest. Syntax differences aslide, it really reads like a tech spec for Perl 6, which makes my job as an implementor considerably easier. I liked it so much that I posted on p6l about the things we can possibly import to Perl 6.

On the code front, following yesterday's BEGIN block change, I moved the Compile subsystem and the Rule subsystem into the Eval monad, so we can freely share the execution context across the entire parse/compile/run cycle. Some new features fell cleanly from this change:

  • my $var ::= expression works.
  • The interactive shell now preserves both the lexical and the global pad.
  • pugscc now accepts nested BEGIN { eval " BEGIN { eval '...' } " }.
  • pugscc --parrot can compile most expressions, user-defined subroutines, as well as string interpolation.
Much thanks to jhorwitz, Coke, particle and other parrotfolks for helping me with the Parrot IMC backend. Hopefully this will make jhorwitz's work on mod_pugs much easier.

rgs's colleague misc contributed the first Perl 6 IRC bot:

16:27 -!- didie_p6 [~didie_p6@sisay.ephaone.org] has joined #perl6
16:27 < misc> didie_p6: !hello
16:27 < didie_p6> Hello from a perl 6 irc bot
Much coolness!

In related news, I expanded and fixed andras's addictive CGI memory game, and tweaked the session management library to write to its own temporary directory, with the new primitive File::Spec::tmpdir(). A week or so ago, when andras first submitted it, it took half a minute just to flip a square; now each flip takes less than a second.

Tracing the memory game and CGI.pm code, I have fixed some more things:

  • The dot in 123.ref is now parsed correctly as (123).ref.
  • $x = \$x no longer causes an infinite loop.
  • :todo(1) in tests are changed to :todo for greater clarity.
gaal introduced the VProcess type, then implemented the runInteractiveCommand and openFile primitives on it. It will be used to implement piped opens soon.

obra corrected my fix in util/run-smoke.pl to tell the user the smoke result is in smoke.html after make smoke finishes.

adehohum added some tests on lvalue subroutines, operator overloading, and parameter traits.

Corion was extremely productive today. He added many new tests, refactored old tests, and further improved the error handling code for numeric errors.

theorbtwo is working on making the Eval monad a newtype, so we can freely redefine our monadic behaviours. That will pave the way for more catchable errors, as well as for serialized continuations.

That's it for today. See you tomorrow!


misc

rafael on 2005-04-27T22:02:58

Well, misc is no longer my colleague, he was only an intern at Mandrakesoft... That said, writing a generic IRC module (à la Bot::BasicBot for example) would be a good idea.