Rakudo Roadmap
--------------

Last updated: 2010-05-05

This document identifies the major tasks planned for Rakudo
development as of May 2010.  Most of these tasks are
oriented around the Rakudo Star distribution, currently targeted
for June, 2010.

The items below are given a 1-3 priority indicator for the
Rakudo Star release, where 1 is "really important", 2 is
"ought to have", and 3 is "nice to have".  Each item also
has from one to five asterisks indicating the estimated
"degree of effort" required for the item.  Some items also
have additional notes (A-Z) of larger-scale issues or
considerations for the item.  Finally, we've also provided
an indication of the person(s) most likely to be working
on the item; this is not intended to preclude or discourage
others from doing so.

Patches to this document are welcome.

Really important items
1 **    complete lazy lists in Seq and Array (colomon, bkeeler, jnthn, pmichaud, others)
1 *     array/hash vivification (masak, jnthn, pmichaud)
1 ***   REPL remembers the variable from the last line (D, jnthn)
1 **    operator overloading -- infix:, prefix:, postfix: (almost there, problems with pre-comp)
1 **    improved error messages and failure modes (B, all)
1 *     attention-grabbing examples (all)
1 **    release announcement draft (pmichaud, all)
1 ***   get the Advent examples running again (all)

Ought to have items
2 **    basic Buf implementation (A, masak)
2 **    speed issues and profiling (C, all)
2 **    regex modifiers (B, pmichaud)
2 ***   installation standards (A)
2 **    custom operators for circumfix:, postcircumfix: (B, pmichaud)
2 ***   heredocs (B)
2 **    Rat, BigNum, numification improvements (C, colomon)
2 **    true hyper/cross/reverse/other metaoperators (colomon, jnthn, pmichaud)
        (seems to be mostly there -- what's missing?)
2 **    synopsis 19 handling (A, D, pmichaud, particle, others)
2 ***   temp variables (C)
2 ****  better longest token matching in regexes (A, D, pmichaud)
2 ?     other S02 data types -- KeySet, KeyBag (A)
2 ?     specialized Unicode bits -- .codes, .graphs, .bytes (A, C)

Nice to have items
3 ***   array/hash element vivification via WHENCE (jnthn)
3 ****  module versioning and download (A, jnthn, mberends, masak, others)
3 ****  ENTER/LEAVE/LAST/NEXT/FIRST/REDO control blocks (C, Z4)
3 ****  Perl 5 interop (Z5, sorear)
3 ***   Pseudo-packages MY, CONTEXT, OUTER, $?LINE, etc. (jnthn)
3 ?     feed operators (jnthn)
3 ****  macros (B, Z, sorear)
3 ***   pod heredocs (B)
3 ***   complete Buf implementation (C)
3 ***   slice context (A, B, Z3)
3 **    native calling interface (A, C, Z4)
3 ***   domain specific languages -- slang and grammar tweaks (A, B, D)
3 ?     sized types -- int32, int8 (C)
3 ?     native typed scalars (C)
3 ?     packed arrays (C)
3 ?     compact structures (C)
3 ****  full s/// including s[\d+] += 42 (B) (basic version is there; needs
        attributes and making $/ available on the RHS)
3 *     other REPL improvements (D)
3 **    operator adverbs (B, pmichaud)

Notes:
A.  Involves Perl 6 spec updates/revisions:  Some items 
involve or require substantial updates or revisions to 
the synopses in order to progress.  

B.  Requires some improvements to the grammar or grammar engine.

C.  Some Parrot-level support and/or development needed.

D.  Some NQP-level support and/or development needed.

Z.  Explicitly postponed items:  Some items we explicitly
postpone until later in Rakudo development.  There are generally
a variety of reasons we might do this:
  (Z1) it's not an immediately pressing issue and there's
       little penalty or some benefit from delaying work on it
  (Z2) the spec is vague or non-existent on the topic
  (Z3) we expect the spec or STD.pm to change or evolve substantially
  (Z4) we expect Parrot or the compiler environment to change substantially
  (Z5) the item appears to be Really Hard "right now"
  (Z6) other blockers

Completed ROADMAP items:
  - better return value checking (done)
  - clean up subtypes in multi-dispatch (done)
  - maintain candidate lists in lexicals (done)
  - overloadable postcircumfix:<[ ]> and postcircumfix:<{ }> (done)
  - proper trait definition and usage (need to fix edge cases)
  - binding named arguments to positional parameters (done)
  - using STD.pm (or close analog) for parsing (done)
  - lexicals refactor (done)
  - embedded closures in regexes (done)
  - declare contextual and lexical vars in regexes (done)
  - return multiple values from a sub (done)
  - unpacking arguments (done)
  - nested signatures (done)
  - captures in signatures and return values (done)
  - array/hash element vivification via Proxy (done)
  - better gather/take handling of arguments (done)
  - lazy gather/take (done)
  - basic s/// (done)
  - protoregexes in grammars (done)
  - item assignment (done)
  - lexical classes and roles (done)
  - lexical variables in regexes (done)
  - REPL actually prints (done)
  - import module symbols into current lexical scope (done)
