Here's the benchmark numbers:
Pugs Interpreted: 77.29 seconds 477k memory
PugsCC Unoptimized: 01.35 seconds 476k memory
PugsCC Optimized: 00.39 seconds 455k memory
Perl 5: 00.14 seconds 362k memory
Note that the
mandel.hs above is still using the doubly-boxed
Val type, and the ultra-slow
op1/op2 dispatch, just so we can reuse all
Prim.hs code and guarantee to have the same semantics. Hence, there is a large room of improvement. But I think it's good for a two-hour hack.
For the next step, I'm hanging out in irc.perl.org #parrot now, learning from Coke, Nicholas, chip, bernhard and other helpful people about how to model a Parrot AST in Haskell, as
Compile/Parrot.hs in Pugs. The plan is to use Template Haskell to compile Pugs AST into a Haskell program that, when executed, produces PIR code. See One-Day Compilers for the general technique.
So I plan to start from Python and Cola's AST->PIR translators and work from there; we'll see if I can get one working this week before YAPC::Taipei.
In other news, nothingmuch hacked a whole day on the currying
.assuming() code, radically refactoring the underlying
VSub structure to contain prebound parameters, as well as refactoring bindings to use
Val instead of
Exp, to allow both lazy and strict evaluation modes. His enthusiasm and the amazing ability to grok the non-commented evaluator core is really, really moving to see. Way to go, יובל!
Stevan, the test squad leader and another tirelessly helpful soul, listed a large set of TODOs for us to work on before we reach 6.2.0. Development has never been so joyful for me, with this thourough test-driven plans, clear implementable goals, so I can code with abandon without fearing regressions. Soon, with the test cataloger and backlinker, we'll have a nice HTML page for interested people to see our status at a glance. Wonderful.
On the documentation front, ingy and mugwump has finished most of Kwid to DOM to HTML formatting stuff, and got lots of DOM semantics done. I am really looking forward to their arrival on 23th, so we can get Pugs's object metamodel going and start moving toward 6.2.0.
Randal Schwartz reported that
CPANPLUS could not detect that there is a newer version of Pugs on CPAN. The reason turns out to be that MakeMaker and CPAN::Version has different ideas about v-string versions, so I whipped up some Module::Install magic to compensate the MakeMaker bug. So Pugs 6.0.13 should be appropriately upgradable.
I think that's about it for today. Soon I'd need to work on my YAPC::Taipei talk. Hopefully I will have a Perl 6 -> Parrot compiler for the audience to see...