Lots of good things result from having a real compile phase. For example:
$ ./pugs -CPIR -e '1 = 2' pugs: Invalid LValue: Val (VInt 1)
It also opens up possibility for whole-program analysis and other nifty things. Currently there is only a parse phase and a eval phase, so whatever nonlocal, nonBEGIN knowledge is forever gone, with no possibility of warnings/strictitude, and most errors delayed until runtime. A compile phase fixes all these problems.
I've also started thinking about retargetting the PAST -- that is the "essence" of Perl 6 evaluation -- to Javascript or Perl 5. We'll see if it actually comes to pass. :-)
Also I implemented the strategy for piecemeal migration from the current Pugs.Compile.* and Pugs.Eval -- that means anything not handled by the current compiler can simply be delegated to the old runloop. Because of this, mandel.p6 now runs again on the PIR backend, with no noticeable speed differences.
There is a lot of more exciting things going on, but I need to sleep and can't journal up anymore. Sorry. :)