Day 211 (r6722): OO in JS, subclassing ::Class, mass expandtabs.

autrijus on 2005-09-05T13:11:13

dankogai's LLDN talk on Pugs was apparently very successful; I tracked the various blog coverages on technorati with much delight. Today dankogai posted on p6l on how concise it is to represent Lambda Calculus in Perl 6, noting that it's even more intuitive than in Scheme. He then wondered why Pugs does not include this kidn of sample scripts -- I promptly remedied this by handing him a committer bit. :)

acme reported that in the YAPC::Europe auction, the final special item is a T-Shirt of muttley's creation, featuring the Iraqi Information Minister proclaiming that Pugs has always been in the Perl 6 Roadmap. Oh yes. The Python infidels are already surrendering. Hilarious.

Based on putter's previous work in generating namespace declarations in PIL1, today iblech started hacking class A { method b {...} } into JavaScript runtime's object model. He also started working on proper multi-dispatch in PIL2JS.

Stevan introduced subclassable ::Class to MetaModel 2.0, by converting new, bless and CREATE from being ::Object's class methods to ::Class's instance methods. This means it's now trivial to add tracing and hooks over all internal creation and dispatching logics -- they were largely a black box in the perl5 runtime. See 09_subclassing_Class.t for some concrete examples. Note how easy it is to expose Baz.meta.count to the user space, that tracks over the numbers of Baz objects ever created with new:

class CountedClass {
    is Class;
    has $.count;
    method new { $.count++; next; }
}
class Baz {
    is Object;
    metaclass CountedClass; # speculative syntax
    method foo { ... }
}

The usual treatments in Perl5 would make Baz objects inherit from CountedClass. In contrast, the .meta treatment does not confuse inheritance with class's implementation, resulting in much better separation of concerns.

luqui tweaked Parser's heredoc support to always terminate properly, instead of using an arbitrary "hopefully this won't match qz87jh##" delimiter token.

dduncan commited sweeping changes to the entire source tree, expanding all literal tabs to spaces. New commits are encouraged to continue this tab-free style.

putter added the make smoke-pugs target to explicitly run smoke tests using the default Haskell runtime. rafl then made it into the Debian package's default test target.

That's it for today. The ADSL technician didn't show up today, so I'm still using crappy 33.6k dialup. There's $work tomorrow, so I need to sleep early. See you!