Day 166 (r5706): Mandel.p6 on Javascript.

autrijus on 2005-07-19T19:16:08

After working out the way to implement &last and &return using exceptions, iblech succeeded in getting mandel.p6 compiled to JS. It now works across Gecko, Opera and Internet Explorer, thanks to feedback from Arathorn and castaway,

Currently, it is likely to trigger a script running for too long warning, but Alias from #jsan suggested that we can use a trick employed by jsan:Test.Builder, namely using setTimeOut to fork off a separate thread and handle output by modifying the DOM instead of document.write.

iblech also hacked in support for array dereferencing and named parameters for PIL/JS. I think soon it will make sense to have a make jstest, using SpiderMonkey's bin/js as the runtime.

Continuing the metamodel work, stevan implemented C3 as the canonical method resolution order, and tweaked the constructor/destructor to use it. leo burned it into the Parrot ROM -- I mean VM -- for maximal performance.

Stevan is working on bootstrapping the metamodel, i.e. defining the Perl6::Object class itself as a Perl6::Object. This is analogous to our Prelude.pm work of defining as many Perl 6 builtins in Perl 6 as possible; ultimately, there will only be a handful of true primitives that absolutely has to be provided by the runtime. This ensures an identical semantics on Haskell, Perl5, Parrot and JavaScript backends, and is ultimately what the 6.28.0 milestone is about.

Two common Makefile.PL gotchas got remedied today: rkhill made sure that VC++ on Win32 would not try to build with PUGS_EMBED=perl5, and kolibrie added detection for missing libperl-dev on Debian systems.

After some handholding on p6c, our new committer philcrow added a test for a surprising behaviour: sub foo (?$x = expr) {...} did not execute expr in the subroutine's scope, but rather in caller's scope. I fixed it promptly, so philcrow can commit his newton's method root finder into the examples directory.

Arathorn and I discussed the various confusing semantics of qualified variable names on #perl6, culminating in a p6l post. I didn't realized that the main package is renamed to Main now (in S10). The Synopses indeed have a fractal structure; the more you read into them, the more there is to read...

fglock fixed the misuse of $^x inside Prelude.pm's &ceil and &floor -- implicit variables is only allowed in bare blocks now. He also made Span::Code pass all its tests in span-code.t.

kolibrie added some new test for the not-yet-supported \x{ABCD} notation; eric256 helpfully moved out fixed tests in t/pugsbugs/ into more sensible subdirectories, and tested for misparses in nested hash literals; tobez added a test for "string".reverse misbehaving under list context.

The wizard.p6 RPG was briefly broken by the new namespace handling code. eric256 and I repaired it today, so epic battles with the army of frogs can go on as usual...