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<perl5>)


= 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

- 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.
