WARNING - This file has been out of date for more than a year. This document contains terse status information on major portions of Pugs. Because development is rapid and anarchistic, details are omitted. If you would like current details, please ask on irc.freenode.net #perl6. = Backends [correct as of: 2005-10-24] - Haskell-Old Working (delta general pugs bugs) - Haskell-PIL Restarted 2005-10-03 - Java Nonexistant; partial metamodel implementation nonetheless - JavaScript Passes >90% of main tests (no ext/); missing P6 rules, some builtins, state (needs PIL1 fixes), full OO (needs PIL2) - Perl 5 Broken; once passed <50% of main tests (no ext/); inactive; will probably be rewritten around PIL2. [2006-01-30] - PIR Restarted 2005-10-04 = PIL Transition [correct as of: 2005-10-05] * autrijus redesigned PIL format (now 'PIL2') in late 2005-07 through 2005-08, but has decided on further improvements after ICFP (beginning of 2005-10) * PIL2 infrastructure code restarted as of 2005-10-03 * PIL2 includes full typing, and is required for full OO, including packages, class declarations, and full use of metamodel * Old PIL used by JavaScript and Perl 5 backends, as PIL2 not yet ready = Perl 6 Object Metamodel [correct as of: 2005-10-05] * stevan working on MetalModel 2.0, based on MiniMetaModel, as of 2005-08-22 * MM2 designed to be cleaner, and as minimalist as possible internally, without significant changes to user-facing MM1 API * Completion level varies by backend -- each requires its own variant of the metamodel implemented in the backend language: -- Haskell MM2 development and integration to begin after 6.2.10 release -- Java MM1 in early stages and stalled -- JavaScript MM1 integrated into JS backend, but not bootstrapped like Perl 5 version; needs PIL2 for full OO -- Perl 5 MM2 fully integrated; also needs PIL2 for full OO -- Perl 6 MM2 rewrite started as of 2005-10-02 = Embedding [correct as of: 2005-10-05] - Parrot Works with Parrot 0.3.0 [correct as of: 2005-08-10] - Perl 5 Works, except that it leaks heavily (refcounts inc but never dec), and exports don't happen -- workaround for latter is to use our &method1 := Perl5::Module::Name.can('method1') or our &method2 := eval('\&Perl5::Module::Name::method', :lang) = Laziness [correct as of: 2005-10-05] * Laziness doesn't currently work for some (most?) backends * Some lazy functions do exist (e.g. gather/take), but are actually non-lazy * Perl 5 backend (PIL-Run) supports laziness very well = Rules Multiple rules implementations exist. - On Perl 5: [correct as of 2007-01-28] Pugs::Compiler::Rule http://search.cpan.org/search?query=Pugs%3A%3ACompiler%3A%3ARule&mode=all - On Parrot: [correct as of 2007-01-28] PGE http://svn.perl.org/parrot/trunk/compilers/pge/STATUS http://svn.perl.org/parrot/trunk/compilers/pge/README.pod - Perl 5 regexen [correct as of: 2006-01-30] ** Work well in default backend, handled by PCRE ** Mostly working in JS ** Specified via perl5 modifier, as in rx:perl5/\Afoo/ - Perl 6 rules [correct as of: 2006-01-30] ** Current handled by parrot's PGE, under development; much works, but: *** Rule names are global *** No support for aliases *** No support for embedded closures *** Rules do not always behave correctly ** Other implementations have been started, but are currently inactive. = Test Suite [correct as of: 2006-08-20] * Currently about 15000 tests, including module tests * This is known to be only a small percentage of the total needed to cover the currently available Perl 6 design * Automated posting to smoke server (http://smoke.pugscode.org/) now possible ** Many test reports seem to be very old or out of date.