Today dduncan rewrote File::Spec to work with the new lexical import semantics, so many module tests that uses File::Spec now passes. He and putter also triaged readline brokenness on OSX 10.4 introduced yesterday, which was due to an old NetBSD version of readline without signal handling support.
Meanwhile, I TODOized all the the non-regression failures; most of them are OO-related, and a switch to the 6.28.0 runcore in the next release should make them pass. A comprehensive regression test suite is lovely -- I accidentally broke whitespace handling around "$foo .= chomp" parsing, and it's the test for "pugs -n -e ..." that caught this problem, because "-n" desugars into a while loop that does an in-place chomping.
In the background, I spent a few hours with Bestian to grok Haskell is not not ML, the newest paper from the relentless paper-producing machine known as SPJ (the next-newest paper, lock free data structure with STM, is also worth a look). The not-not-ML paper reconciles the gap between lazily-evaluated and eagerly-evaluated languages, a gap previously considered irreconcilable (i.e. a language has to pick one side and emulate the other side at a space/speed penalty).
The paper introduces an intermediate language (IL), that allows a surface language (say Perl 6) to annotate individual expressions as lazy or strict, translate them into the IL, and compile them efficiently to an abstract register-based virtual machine, using various clever thunking tricks.
Thanks to the Curry-Howard isomorphism (types are formula and programs are proofs), Bestian was able to grok the para-consistent logic system side of the paper, and merge them with my operational understanding. Now that I have a much clearer understanding of how to mix lazy and strict evaluations in the same program, a lot of useful optimizations for the Parrot backend just follows from it. Stay tuned... :-)
Comments
You can follow this conversation by subscribing to the comment feed for this post.