Day 102: Meta-Meta-Hackings.

autrijus on 2005-05-14T01:14:36

With Pugs 6.2.3 out of door, many lambdacamels turned their attention to the newly introduced OO implementation, committing lots of examples, documentations and tests:

  • Stevan neatly summarised the ongoing MetaModel work, a basis for the future (or imminent?) Perl6-compiler-in-Perl6 effort.
  • eric256, our new committer, implemented a RPG game (also see his Perlmonks writeup), which exercised many OO features and bugs.
  • ...those bugs, in turn, were made into unit tests by eric256. Yay!
  • Juerd started the quickref project to produce short summaries of Perl 6 syntax. The operator part is already quite complete; volunteers welcome!
  • mugwump and Stevan continued to work on Set.pm and Tree.pm, the first two Perl 6 OO modules.
  • Stevan noted that many of t/oo/ tests actually passes; iblech and he then proceeded to write some more.
These activities prompted various internal changes:
  • $.typed_attribute.method is now handled by MMD.
  • .method changed to mean $_.method; to call method on the current invocant, use ^method instead.
  • do { ... } block literal is now supported.
  • submethod is parsed.
  • Qualified type literals are now parsed correctly, e.g. in sub Baz returns Foo::Bar.
On the bot-writing front: right after 6.2.3's release, metaperl invited #perl6 to play hangman cooperatively, with him relaying between the channel and hangman.p6. I noted that a hangman bot is more suited for this task; minutes later, iblech produced hangmanbot.p6, and we played a couple round of games. Lots of fun!

Also as a result of hangmanbot.p6, people found the NOTICE messages used by bots annoying, so iblech turned them into regular PRIVMSGs. Hopefully my checkins won't disrupt people's sleep again...

 horray,.. openfoundry is back
 ~_~
 I forgot to turn off my speakers befire I went to sleep and my mIRC beeps on notice.
 It woke me up :/

clkao finally got the committer bit and wrote his first lines of Perl 6 code, to change the svnbot's announcement from committer -- to committer++. We also discussed various approaches to port svk to Perl 6.

On the perl6-language front, after some discussion with pmichaud, we suggested the $0 (that's $1 in Perl 5) produced in '123' ~~ /(\d+)/ should numify to 123, instead of the absurdly surprisingly 1 which tripped iblech, Stevan and me. Fortunately, sanity prevailed; Larry and Damian both OK'ed the suggestion, and it's been implemnted in both PGE and Pugs.

Also, per Larry's explanation, split with capturing rules now inserts the match objects of submatches into the resulting list, instead of their stringified forms.

Other commits of note:

  • bsmith added more export lists to .hs code, making refactoring easier.
  • bsmith, Forth (another new committer!) and I worked on getting pugs_version.h correctly generated from svk checkouts.
  • corion helpfully moved away passing tests from t/pugsbugs/ to other subdirectories where they belong.
  • ninereasons purged the remnants of old-style force_todo into per-test :todo<bug> forms.
  • jhorwitz and I made $! into the exit value after an unsuccessful system() that returns false.
  • iblech cleaned up Net::IRC a bit, adding even more commands to it.
  • gaal made the tests more robust when running in parallel, by using nonces as temporary file names and cleaning them up.
  • iblech noted with delight that s/./{ state $var; ++$var }/ works perfectly, and added a test for it.
  • scook0 inquired me about the design for various internal data types, then added them to the API documentation.

Last, but not the least, I've finally committed some non-broken C code into the Parrot tree! I separated the bogus mix of ASCII and ISO-8859-1, and made ASCII-to-Unicode transcoding an O(1) operation, as it should be. Following on my suggestion, Leo proceeded to implement utf8:unicode:"string" literals that plays well with the existing unescape code.

I also made ASCII and Unicode's validate detect noncharacters correctly, so there is less chance of accidental double-encoding now. The mistake of Perl 5's latin1-biased Unicode model must not be repeated in the new era! ;-)