August 2008

Sun Mon Tue Wed Thu Fri Sat
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
Recently on this blog
Recently on other blogs

Map

Audrey

My Photo

License

2008.08.01

Pugs now builds again from SVN.

Thanks to testing efforts from kolibrie++, masak++, moritz++ and xinming++, Pugs has migrated back to the public repository from my local hard disk.

Now all you need is GHC 6.8 on your system, and "perl Makefile.PL ; make ; make install" should take care of everything.

Note that the refactored-out parts like MetaObject and HsPerl5 are not committed back yet, so you'd need a working network connection during the build.

However, I'm glad to report that dcoutts++ is working on adding local repository support to cabal-install, and once it's ready, we'd simply commit a MiniHackage containing Pugs dependencies, and bundle them into something installable offline (and uploadable to CPAN).

2006.11.04

OOPSLA/DLS and the upcoming POPL 2007.

The Belknap Jifty Hackathoners left Portland right after the Pugs talk, so my attendance in this year's OOPSLA/DLS lasted for exactly one hour. However, that was one of the most intense hours in my life, and I'm glad that I emerged alive (and happy).

As is customary by now, before the talk went live, I put the Irssi window to #perl6 on the projector, showing the continuous works from the lambdacamels. Since both Vim and Irssi windows were maximized, and MiniBufExpl's color theme matched that of Irssi's, it apparently created the impression that Vim is my IRC client of choice... :-)

The talk itself went very well. With 240 slides (designed as 12 lightning talks of 5 minutes each), for the first time I've delivered them in just under 50 minutes, leaving plenty of time for questions.  Those were substantial questions that challenged almost all parts of Perl 6 and Pugs... Unlike any other Q&A session in my talks before, this one strongly resembled a thesis defense.

I'll post a separate blog entry, perhaps in the form of a Perl6::FAQ document, to address those questions about our type system, module system, introspection, parallelism, and other high-level design issues.

It was a lot of fun to talk with the researchers whose papers made Pugs possible: Philip Wadler (Monads, Featherweight Java, Links), Matthias Felleisen (Continuations on ordinary VMs, PLT Scheme), William Cook (Mixin-based inheritance), Jeremy Siek (Gradual Typing), and many others whose name sadly escaped me.

After the talk, Felleisen asked me if I'd like to present Pugs at POPL'07, and I said I'd be interested, as it's the conference where most lambdafolks unleash the latest language-design hackerys.  A few days later, I was extremely surprised (and honored) when he informed me that Perl 6 will be the invited opening talk (!).

Last year, that place was held by Odersky's great Scala talk, which influenced the design of Pugs in many ways. So I'll be very, very happy if our unorthodox ideas in Perl 6 can also inspire POPL folks as much as they have inspired us.  See you at the Nice hackathon in January! :-)

2006.11.01

JITing slides.

I've safely landed to Brazil, ready for tomorrow's hackathon with fglock++.  On Thursday cmarcelo++ will join us, so it'll be an excellent chance to get the new generations of Perl 5 and Haskell runtimes rolling again.

Another good news is that I've finally recovered a bit from rapidly shifting time zones, so I'll start retro-journaling about the U.S. part of this strange and wonderful journey.

However, the sad news is TimToady++ will not join the hackathoners as expected -- he was feeling a bit under the weather, and had to cancel the Brazil trip. :-/

As an unexpected consequence, I'm now charged, as the TimToady++ surrogate, to give the opening talk on Optimizing for Fun, which put me immediately into omg-I-have-no-slides-must-JIT mode.

Fortunately, geoffb++ had summarized the fun-for-Hackers side pretty well, and the fun-for-Users side is also well covered by kathysierra++ (Creating Passionate Users) and raphpkoster++ (The Theory of Fun); all I need to do is threading them under a metaphoric theme, as TimToady++ did in his previous State of the Onion talks, namely Evolution, Semiotics, Chemistry, Music, Perl 6 (ok, that one wasn't metaphoric), Scientific American, Impossible Objects, Screen Savers, Espionage, and Families.

As my mind was recently filled with São Paulo's beautiful restaurants, I decided to free-associate on Gastronomy. We'll see how far that'll take me in the next 48 hours...

2006.10.28

Pugs and Jifty slides.

Sorry for the lack of update; I was whisked away by Best Practical folks into hacking a PubSub / Asynchronous Event system for Jifty, initially prototyped in Perl 6, then ported to Perl 5.  It now works really well -- a multiplayer Chat server in less than 50 lines of code, including web templates. More about that later...

I just gave two talks at Amazon.com; they seem to be quite well received.  The Pugs one is the same as I gave in OOPSLA/DLS, and here are the slides in the usual formats:

Thanks again to William Cook for inviting me to DLS and to Trey Harris for inviting me to Amazon. It was a lot of fun! :-)

2006.10.20

The night before the Intel talk.

Landed safely to Portland last night.  Predictably, I was hit hard by jet lag today, although I did manage to finish the slides for DLS, which will get a pre-run at Intel tomorrow:

As usual, feedback are most welcome!

Meanwhile in Pugsland:

  • seano++ implemented non-strict-vars for one liners: "pugs -e '$x = 1'" is no longer an error.  An impressive first commit for a new committer! :-)
  • raptor++, another new committer to Pugs, asked on #perl6 if there's a way to find out which parts of specs are not yet covered by tests.  Thanks to smartlinks, we now have a standard answer for that: spec.pugscode.org.  Shortly afterwards, raptor++ followed up with a test for "my $x = 1 if 1".
  • On the airplane, I implemented this recent  ruling from TimToady++: Closing curly of hash composers may not end a statement by itself:

    my $c = sub { say 123 }  # this is valid -- semicolon is optional
    my $f = sub foo { say 456 } # valid -- named subs are expressions
    my $h = {
        a => { x => 1, y => 2 }, # valid, with a comma
        b => { x => 1, y => 2 }  # ERROR, because it's ambiguous
    };

    The ambiguity arises on the "b=>" line, because if there's an implicit comma after it, then $h will be Hash; if there's an implicit semicolon, then $h will be Code. We can't intuit either way, so it's ruled into an error.
  • As usual, the ruling turns out to have interesting repercussions when actually implemented (e.g. statement-level blocks shouldn't compose as hashes at all), so xinming++, TimToady++ and me took some time to repair the build. It's all good now, though.

Oh, and I'd like to thank Schwern++ for being an extraordinary localhost, even offering to drive me to Intel tomorrow and attend my talk.  That's good, because the number of registrations for DLS apparently doubled the expectation, so walk-in may not be possible for that maxed-out room. :-)

2006.09.18

Check smoke results while reading Synopses

Our new smoke server now has some extra links with the name of SYN in the right margin of the page, where one SYN link corresponds to one smoke report:

http://m19s28.vlinux.de/cgi-bin/pugs-smokeserv.pl

Click on one of these links and you will be redirected to a list of Synopses. Enter one synopsis, say, ``02 Syntax'', and you will find out the magic.

As you can see, these synopses contain test passing/failing marks in the code snippets. (This feature was originally suggested by Christopher++ and Gaal++.) For example:

is($foo, "blah", "lone block actually executes it's content");
my $foo2;
{$foo2 = "blah"};
is($foo2, "blah", "lone block w/out a semicolon actually executes it's content");
my $foo3;
({$foo3 = "blah"});
× ok(!defined($foo3), "block enclosed by parentheses should not auto-execute (1)", :todo<bug>);

Note that TODO tests are marked as passing only if they're actually passing (i.e., unexpected passing from the perspective of implementers) and they're marked as failing only if they're actually failing (i.e. expected failing). I don't introduce special marks for these tests because added complexity will lead to unnecessary confusion.

Skipped tests have no marks at all and the intention is straightforward. Just don't mistake blank tests for smartlinks.pl's bugs or something like that. ;)

There's also brief stats info in the link name so that you can see how many sub-tests are failing and how many are not without actually expanding the code snippet. (Thanks Juerd++ for suggesting this one.) For instance:

   - Show the snippet from t/var/var.t (line 13 ~ line 132  —  30 √, 0 ×) -

On top of the web page, there's a header like this:

  This page was generated at 2006-09-17 05:58:59 GMT.
  (syn r12136, pugs r13398)

where the revision number for pugs is extracted from the corresponding smoker's report. Christopher has ensured the version of the Pugs test suite used by the smoke server matches exactly the smoker's local Pugs. The timestamp was proposed by Juerd while the revision numbers for both syn and pugs were proposed by [particle]++.

All the Synopses on the smoke server are updated periodically by cron, even including old smoke reports that had been processed. We're trying to offer you the latest Perl 6 Spec everywhere. :)

For more details on the original motivation and Christopher's design decisions, please read the p6c threads below:

Integrating the Pugs test suite into the Synopses

synopses on smoke server

Thanks Gaal and Larry's tests.yml while I was implementing smoke result rendering feature in smartlinks.pl many weeks ago. At last but not least, I really appreciate Christopher's work on the smoke server/client mechanism to make this feature truly useful. (We don't need auto-smoking on feather any more, whee!) And I also thank iblech++ (yes, iblech's alive!) for helping Christopher through the whole process.

The Synopses on feather will still go without smoke results, since smoke results are always specific to a certain Perl 6 implementation or a Pugs backend. We hope you will still like it. :)

Audrey once said on #perl6 that she was biased to fix tests with smartlinks. And [particle] recently said that he had started a port of smartlinks.pl to PIR so as to cross-reference PGE's tests with the Synopses and parrot PDDs. Furthermore, I've seen more and more people are adding both tests and smartlinks to the Pugs test suite, which is really really wonderful. :D

2006.08.05

Back at home.

I'm happy to report that I survived jet lag, a couple days of $job catchup, and am now ready to push forward with the long overdue merge-6.28.0-AST-to-trunk change, updating the Haskell runtime of Pugs to support the new Capture/Signature/MOP based AST.

Mad props to gaal++ for getting the new code to compile -- it's not compiled with "make pugs" by default, but that'll change as soon as I wake up.

Oh, and I'm happy to report that Hiveminder, the 0th Jifty application and my todo-list-keeper of choice, went live today!  There's already a quick review for what it has to offer.

I'd very much like to use Hiveminder as Pugs's task tracker, as soon as the public group feature is implemented. Give it a try -- you might like it too. :-)

2006.07.26

The night before the "Jifty RHOX" talk.

I took the evening off from making slides, and went to see three great talks from Larry, Kathy and Damian. I very much did not regret going there, but that does mean I'm woefully behind on slides again:

Lastminutepanic

Be as it may, here is what little I have so far -- I'll try to sleep a bit and finish them in the morning.  Wish me luck! :-)

2006.07.23

Pre-OSCON intermission.

Still working on my slides (modulo the occasional perlmonks post), so updates in this space will be slower than usual.

Sadly, our IRC logger is currently down.  Here is a short recap from #perl6 logs:

  • Sage++ is using Parsec to parse the Perl 5 regex syntax and  got most of them translated to Perl 6 regex in his  P5toP6 translator,
  • scw++  meanwhile worked on translating Perl 6 regex and embedded MiniPerl6 into Haskell's Parsec syntax.  (Mmm circularity.)
  • gaal++ worked on getting the new AST to compile (as Haskell and emit as Perl6/Moose classes), cutting down hundreds of type errors  to a couple of them.
  • TimToady++ hacked the spec to introduce repeat while loops, resolving an issue raised by a recent p6l thread.  Then he hacked the test suite to reflect the new syntax so they fail. Then he hacked Pugs.Parser so it now supports the spec... and the tests pass again.  Yay!

Now I'll go back to make slides for the "Jifty RHOX my $Job" talk.  (i.e., "How Jifty tamed the Relational/Hypertext/Object/XML mismatch for my day job.")  See you at OSCON!

2006.07.20

Random recaps.

Quick lists of some things happened today:

  • Very productive afternoon Dockathon with Uri Guttman. We proof-edited S02 over two passes (#1, #2) to optimize for readability. Uri has moved to S06 after this, and we are also considering breaking up the specs by independent sections, to e.g. Perl6::Spec::Syntax::Quoting and put it on CPAN.
  • Stevan++ promptly integrated Object::Declare with Moose, which makes its class declaration syntax even neater than before.
  • fglock++ started the v6/ directory, the namespace designated for a Perl 6 compiler implemented in Perl 6, to maximize reuse from his, pmichaud++'s and my work. We also considered a plan to fly pmichaud++ to Brazil for YAPC::SA, so we can meet in person to make the p6-on-p6 "Christmas compiler" happen.
  • Thanks to cdpruden++'s prodding, I finally fixed the long-standing chained-method-call-fails-lookup bug. However, it revealed a dark corner of unspecified semantics, namely the weird interaction between the method-call-falls-back-to-sub rule and the invocant-is-always-in-scalar-context rule. The commit message for r11640 has a detailed writeup.
  • Scalar::Defer now works for objects as well, and fakes non-blessedness successfully by blessing values to package "0" with &0::AUTOLOAD and overloading. As seen on #perl6:
    <TimToady> or maybe it's overloaded somehow...
    <kolibrie> its overloaded
    <TimToady> which overloading, I wonder...all of them?
    <TimToady> seems like the only way it'd work.
    <kolibrie> use overload fallback => 1, map { $_ => \&force } qw( bool "" 0+ ${} @{} %{} &{} *{} ); sub force (&) { &{$_defer{ id $_[0] }} }
    <TimToady> Perl is a scary language.
Oh, and tsee++'s PAR::Dist::FromCPAN is really cute. Combined with Safe::World (the less-advertised but more-powerful Perl equivalent to Why's Ruby sandbox hack), this could make multiversioning and separate linking in Perl 5 happen without breaking everyone's existing code...