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

Last updated: 2010-08-09

This document identifies the major tasks planned for Rakudo
development as of August 2010.

The items below are given a 1-3 priority indicator for the
item, 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 **    speed issues and profiling (C, all)
1 **    core code review and refactoring (pmichaud)
1 ?     module installer
1 ?     documentation tools / S26 (A, masak)

Ought to have items
2 ?     'constant' declarator
2 ?     operator precedence traits (pmichaud)
2 **    basic Buf implementation (A, masak)
2 **    regex modifiers (B, moritz, pmichaud)
2 ***   installation standards (A)
2 ***   heredocs (B)
2 **    Rat, BigNum, numification improvements (C, colomon)
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 ****  ports to other virtual machines
3 ***   WHENCE (pmichaud, 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, pmichaud)
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 **    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
  - clean up subtypes in multi-dispatch
  - maintain candidate lists in lexicals
  - overloadable postcircumfix:<[ ]> and postcircumfix:<{ }>
  - proper trait definition and usage (need to fix edge cases)
  - binding named arguments to positional parameters
  - using STD.pm (or close analog) for parsing
  - lexicals refactor
  - embedded closures in regexes
  - declare contextual and lexical vars in regexes
  - return multiple values from a sub
  - unpacking arguments
  - nested signatures
  - captures in signatures and return values
  - array/hash element vivification via Proxy
  - better gather/take handling of arguments
  - lazy gather/take
  - basic s///
  - protoregexes in grammars
  - item assignment
  - lexical classes and roles
  - lexical variables in regexes
  - REPL actually prints
  - import module symbols into current lexical scope
  - complete lazy lists in Seq and Array
  - working closures
  - array/hash vivification
  - REPL remembers the variable from the last line
  - operator overloading -- infix:, prefix:, postfix:
  - custom operators for circumfix:, postcircumfix:
  - true hyper/cross/reverse/other metaoperators
  - synopsis 19 handling
  - other REPL improvements
