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-01-30]
* Currently about 11000 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