Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 172 lines (145 sloc) 7.039 kb
e6b4630 @pmichaud Update ROADMAP.
pmichaud authored
1 Rakudo Roadmap
2 --------------
3
7c5be8b @pmichaud Minor ROADMAP improvement.
pmichaud authored
4 Last updated: 2009-05-21
5
e6b4630 @pmichaud Update ROADMAP.
pmichaud authored
6 This document identifies the current major milestones and tasks
7 planned for Rakudo development as of May 2009. The first
8 section identifies (in no particular order) large-scale and/or
9 significant development tasks that are currently being planned
10 or worked on by the development team. The second section
11 then identifies specific Perl 6 features and capabilities,
12 and maps each to the large-scale tasks on which the feature
13 currently depends. Overall we hope this gives a feel for
14 where current efforts are being placed and what we intend to
15 accomplish during the next 4-6 months.
16
17 In general we haven't identified specific timelines or
18 priorities for the tasks; one of our goals for early Summer 2009
19 will be to develop an expected timeline for each item to make
20 it easier to evaluate our rate of progress.
21
22 Patches to this document are welcome.
23
24
25 Large-scale tasks
26 -----------------
27
28 A. PGE refactors: The Parrot Grammar Engine (PGE) will be
29 undergoing some significant refactoring in summer 2009; these
30 refactors will provide the ability to implement protoregexes
31 and longest token matching. The goal is to get something that
32 is much closer to what is being used to develop STD.pm .
33 Internally these refactors will likely involve a new operator
34 precedence parser and grafting DFA capabilities to the existing
35 regex engine. Patrick Michaud is leading this development.
36
37 B. Parrot calling conventions: As of May 2009, Parrot's
38 calling conventions do not facilitate all of the dispatch
39 mechanisms needed for Perl 6; in particular, Parrot does
40 not cleanly support "named-only" parameters, binding named
41 arguments to positional parameters, or collecting arguments
42 into "captures". These features are currently scheduled
43 to be implemented by the July 2009 Parrot release.
44
45 C. Rakudo method and sub dispatch: As the Parrot calling
46 conventions evolve, Rakudo's existing dispatch (largely
47 written in a mixture of PIR and C) can be replaced by
48 much more efficient dispatch algorithms. This may also
49 involve significant refactors of the base Object class
50 and Parrot's P6object implementation. Jonathan Worthington
51 is heading up this effort.
52
53 D. Parrot context and return continuation handling: Ideally
54 we'd like Parrot to directly support "leave" semantics -- i.e.,
55 forcing a sub (other than the current one) to return
56 and rolling up the dynamic stack as appropriate.
57 In addition, we'd like to be able to tag subs with
58 "exit handlers" -- code to be automatically invoked
59 on subroutine exit. Parrot has some (limited?) support
60 for these features; we need to investigate what exists
61 now and determine what needs to be added.
62
63 In particular, it's conjectured that "leave" and roll-up
64 capabilities should I<not> be implemented using exceptions
65 and exception handlers.
66
67 E. Lexical symbol management: Much of Rakudo and Parrot is
68 designed on a Perl 5 "package-based" model; by contrast,
69 most of Perl 6 is based purely on lexical scoping rules.
70 Rakudo will need some significant refactoring to change its
71 various package-based views of name lookups into equivalent
72 lexically-scoped ones.
73
74 F. Laziness: Many operations in Rakudo are currently "eager";
75 these need to be into lazy equivalents. The first step of
76 this will be a substantial refactor of List, Array, and
77 Positional roles to avoid inheriting from Parrot's
78 ResizablePMCArray; afterwards we'll update these roles
79 to incorporate laziness. This task will also require
80 exploration of the Iterator role and specification.
81
82 G. Native types and compact structs: Currently we don't
83 have a detailed plan for handling "native types" (int, str,
84 num) or compact arrays and structs in Parrot, nor do we
85 have a definite timeline for creating a plan. Essentially
86 we're waiting for someone to step up to work on this task.
87 It will require some knowledge of PIR, C, and Parrot internals.
88
89 H. Perl 6 specification: Some items to be completed
90 really want/need spec clarification before a great detail
91 of progress can be made. Sometimes this is a catch-22,
92 in that the spec sometimes wants implementations to try
93 a variety of designs before settling on a specific design.
94 Either way, there's still a fair bit of spec work to be done,
95 especially for I/O, modules, language interoperability, and
96 STD.pm itself.
97
98 I. Parrot and other installation issues: As of this writing,
99 Rakudo still has minor issues working against an installed
100 Parrot; we also need to work out library storage and
101 resolution issues at each of the Parrot, Rakudo, and Perl 6
102 levels.
103
104 Z. Explicitly postponed items: Some items we explicitly
105 postpone until later in Rakudo development. There are generally
106 a variety of reasons we might do this:
107 (Z1) it's not an immediately pressing issue and there's
108 little penalty or some benefit from delaying work on it
109 (Z2) the spec is vague or non-existent on the topic
7c5be8b @pmichaud Minor ROADMAP improvement.
pmichaud authored
110 (Z3) we expect the spec or STD.pm to change or evolve substantially
e6b4630 @pmichaud Update ROADMAP.
pmichaud authored
111 (Z4) we expect Parrot or the compiler environment to change substantially
112 (Z5) the item appears to be Really Hard "right now"
113 (Z6) other blockers
114
115
116 Specific Perl 6 features and development tasks
117 ----------------------------------------------
118
119 * protoregexes (A)
120 * longest token matching semantics in regexes (A)
121 * operator adverbs (A)
122 * quoting adverbs (A)
123 * regex modifiers (A)
124 * domain-specific languages (A)
125 * item assignment (A)
126 * embedded closures in regexes (A)
127 * declare contextual and lexical vars in regexes (A)
128 * lexical variable lookups in regexes (A)
129 * cleanly add circumfix:, postcircumfix:, other custom tokens (A)
130 * true hyper/cross/reverse/other metaoperators (A)
131
132 * binding named arguments to positional parameters (B)
133 * nested signatures (B)
134 * captures in signatures and return values (B)
135 * unpacking arguments (B,C)
136 * clean up subtypes in multi-dispatch (?)
137 * better gather/take handling of arguments (H)
138
139 * better return value checking (D)
140 * ENTER/LEAVE/LAST/NEXT/FIRST/REDO control blocks (D)
141 * return multiple values from a sub (B,D)
142 * temp variables (D)
143
144 * maintain candidate lists in lexicals (C, E)
145 * lexical classes and roles (E)
146 * importing module symbols into the current lexical scope (E)
147 * develop installation standards (E, F, I)
148 * Pseudo-packages MY, CONTEXT, OUTER, $?LINE, etc. (D, E)
149
150 * lazy lists (F)
151 * array/hash element vivification (F)
152 * array/hash vivification (F)
153 * overloadable postcircumfix:<[ ]> and postcircumfix:<{ }> (F)
154 * lazy gather/take (F)
155 * feed operators (F)
156 * slice context (B, F, H, C?)
157 * proper trait definition and usage (H)
158
159 * Buf (G)
160 * Native typed scalars (G)
161 * Packed arrays (G)
162 * Compact structures (G)
163 * Rat, BigNum, numification improvements (G, H)
164 * Other S02 data types -- KeySet, KeyBag (G, H)
165 * Sized types -- int32, int8 (G)
166 * Specialized Unicode bits -- .codes, .graphs, .bytes (G, H)
167
168 * heredocs (H, Z3)
169 * pod heredocs (H, Z3)
170 * macros (H, Z)
171 * module versioning and download (I, Z)
Something went wrong with that request. Please try again.