Strangely Consistent

Theory, practice, and languages, braided together

Yapsi 2010.12 Released!

It is with a boisterous belly laugh that I announce on behalf of the Yapsi development team that the December 2010 release of Yapsi, a Perl 6 compiler made of Perl 6, by Perl 6, for Perl 6, shall not perish from the earth.

You can download it here.

Yapsi is implemented in Perl 6. It thus requires a Perl 6 implementation to build and run. This release of Yapsi has been confirmed to work on all releases of Rakudo Star to date.

Yapsi is an "official and complete" implementation of Perl 6. Usually in the rest of this paragraph I perform some obscure hand-waving or ill-formed logic to pretend that the terms "official" and "complete" apply to Yapsi... but today I'd like to break from that norm and simply proceed by structural meta-circular induction on this paragraph, which in itself happens to be official and complete. QED.

This month's release sets the stage for subroutines (and takes a bold step towards Turing-completeness) by allowing programs that put blocks of code into variables:

$ bin/yapsi -e 'my $a; my $b = { say $a }; $a = 42; $b()'
42

For a complete list of changes, see doc/ChangeLog.

Quite a lot of features are within reach of people who are interested in hacking on Yapsi. See the doc/LOLHALP file for a list of 'em. Or see here for a list of English words containing the letter Q not followed by the letter U.

Yapsi consists of a compiler and a runtime. The compiler generates instruction code which the runtime then interprets. Cool, huh? Actually, that's quite standard. What's not standard is calling the instruction format SIC, and then not really having a good idea what it stands for. But never mind; you can either produce SIC code or plug it right into the runtime -- of which, by the way, famous Perl 6 implementor Jonathan Worthington after learning about its inner workings is known to have said "Wow! I don't think I could design something that slow even if I tried!" Though not very fast at all, the runtime is very easy to modify, which has the effect that we modify it quite a lot. We also modify SIC quite a bit; if you expect it not to change, expect that expectation to come back and bite you.

An overarching goal for making a Perl 6 compiler-and-runtime is to use it as a server for various other projects, which hook in at different steps:

Another overarching goal is to optimize for fun while learning about parsers, compilers, and runtimes. \o/

Have the appropriate amount of fun!