* docs/pmc/subs.pod:
[parrot.git] / docs / ROADMAP.pod
blob44c1a91357bf08a03046352006b110f97f5a24bb
1 # Copyright (C) 2005-2007, The Perl Foundation.
2 # $Id$
4 =head1 NAME
6 ROADMAP - A plan for parrot 1.0 and beyond.
8 =head1 PURPOSE
10 A high level overview of the work that is remaining to release parrot 1.0,
11 including both user-visibile features and internals.
13 For detailed information regarding specific tasks, we will refer to
14 L<https://rt.perl.org/rt3>.
16 For a high level overview of funded parrot milestones for 1.0, please see:
17 L<http://www.perlfoundation.org/parrot_grant_from_nlnet>
19 This document also contains information about future direction after 1.0.
21 =head1 LAYOUT
23 Each task is associated with a B<major> release of parrot. Additionally,
24 each task will refer to its current state, and a link to any documentation
25 regarding the task (i.e. something on Launchpad, RT, or in the repository,
26 or on the wiki). Tasks with no supporting documentation will be marked
27 [Unspecifed].
29 =head1 1.0
31 =head2 Features
33 I<TBD>
35 =head2 Quality
37 While the 1.0 release must pass all of these quality goals, future releases
38 will of course adhere to these standards as well.
40 =over 4
42 =item * All known GC bugs must be resolved
44 =item * All known segfaults must be resolved
46 =item * All features must have comprehensive tests
48 =item * All features must have comprehensive documentation
50 =item * All tests must pass on all core platforms
52 =item * Remove obsolete code/documentation.
54 Eliminate dead documentation.  Let historians dig through our subversion
55 history.  We look forward toward successful deployment. -Chip
57 =back
59 =head1 2.0
61 =head2 Build System
63 =over 4
65 =item * Eliminate perl5 build requirement. [Unspecified]
67 Parrot currently requires perl5 to build. Eventually we wish to
68 eliminate this requirement.
70 =back
72 =head1 UNREVIEWED CONTENT
74 The contents of this file are outdated and must be reviewed.
75 See RT #48611.  All content beyond this point needs to be validated.
77 =head1 OVERVIEW
79 The remaining tasks are broken down into the following categories, roughly
80 listed in the order through which a task might progress.
82 =head2 DOCUMENTATION
84 =over 4
86 =item *
88 When docs and code disagree, they must be brought into agreement immediately.
89 At the I<very> least, appropriately mark docs that are apparently wrong but may
90 eventually become right, e.g.: "C<[NOTE: this does not currently work.  Why?
91 --committer]>".
93 PDDs are not exceptions to this rule!  Fix them when they're wrong.  Delete
94 them when they're obsolete.  (Never delete docs lightly, though.  Check first
95 with someone who should know.)
97 =item *
99 Document project goals and priorities.
101 =back
103 =head2 DESIGN
105 =over 4
107 =item *
109 MMD Roundup 2, from the mailing list:
111 L<http://xrl.us/gvfw> (Link to groups-beta.google.com)
113 Section 1 of that email needs a decision from the Architect.
115 =item *
117 Design the standard library to replace all those opcodes that should never have
118 been opcodes in the first place, e.g. the IO and transcendental math features.
120 (Note: Whatever tech we use to implement transcendental math should at *worst*
121 compile to function calls under JIT.  And I'll consider making exceptions for
122 the transcendantal math if someone can show me why.)
124 I expect PIR will still let you pretend they're opcodes, though, to avoid
125 immediate howls of outrage.  (But only silicon-based life forms write PASM, so
126 we're not worried about that.)
128 =item *
130 Finish event and IO specification.
132 =item *
134 Finish specification of return continuation and sub being called slots in
135 interpreter, with introspection
137 =item *
139 Spec out bytecode metadata system and introspection/modification system
141 =item *
143 Specify what we need to serialize continuations
145 =item *
147 Solidify design for Truly Evil speed hack for fast regex/string matching
149 =item *
151 Describe the behavior of the serialization functions. (freeze, thaw,
152 thawfinish, visit). L<PDD02>
154 =item *
156 Describe the behavior of C<share>. L<PDD02>
158 =item *
160 Describe the components of a C<struct PMC_EXT>. L<PDD04>
162 =item *
164 Define what bits of the Parrot internals should be exposed as part of the
165 Parrot API for extension writers.
167 =back
169 =head2 TODO
171 =over 4
173 =item *
175 IO: Add IO tables, right now IO's just float around.
177 =item *
179 Finish PMC for IO object
181 =item *
183 IO's "stdio" layer: buffering, seek/random access, shared streams, thread safe
185 =item *
187 Copy-on-write IO stacks
189 =item *
191 Make IO layer cache the vtable calls to the next layer.
193 =item *
195 IO Filters
197 =item *
199 IO mmap support
201 =item *
203 Bottom level socket/pipe/process support in API
205 =item *
207 UTF layers (or should we not bother and do as a filter?)
209 =item *
211 Sample programs and test suite
213 =item *
215 AIO - On many platforms we must fake async IO, are we doing a background
216 thread/interp or an inline event queue function that is called every N ops?
218 =item *
220 Get digest (probably SHA1) added to bytecode segments
222 =item *
224 Speed up the OrderedHash implementation
226 =item *
228 Rearchitect internals for the string specifications.
230 =item *
232 To PerlClass or not to PerlClass, that is the question. The class hierarchy
233 should be reworked (e.g. Boolean->PerlInt->Scalar).
235 =item *
237 Configuration - missing tests for processor features
239 =item *
241 Configuration - duplication, e.g. nvsize/numvalsize
243 =item *
245 IO - Async core isn't there yet, even though it is rumoured to be.
247 =item *
249 Overflow detection/promotion to bigint/float types.
251 =item *
253 Fill in the remaining functions from the EDA, verify that the test suite still
254 passes, integrate the library into the rest of Parrot, provide PMC types and
255 suitable opcodes.  Conversion to and from Parrot strings, conversion to and
256 from floating point types, sprintf output of bignumbers. L<PDD14>
258 [[What's an EDA? --Coke]]
260 =item *
262 TODO - rewrite debugger.
264 =back
266 =head2 BUGFIX
268 =over 4
270 =item *
272 You can add parents to a class with children and objects, and attributes to a
273 class with children or objects. This is silently allowed and quietly corrupts
274 the child classes and instantiated objects.
276 =item *
278 building miniparrot is broken
280 =item *
282 GC issue (copying collector) - immobile strings/buffers get freed during GC.
284 =item *
286 Memory leak - PIO subsystem leaks file handles (ParrotIO structures)
288 =item *
290 Memory leak - string_to_cstring returns a malloced string, which isn't freed
291 everywhere
293 =item *
295 Memory Leaks - imcc is currently leaking Unit structures and possibly more
297 =item *
299 JIT - 64 bit integers on 32 bit machines don't work
301 =item *
303 JIT - parrot register inspection is incomplete (P-regs)
305 =item *
307 This sequence:
309    loop: dec I0
310          inc I1       # or add, sub, ...
311          if I0, loop
313 isn't handled correctly on JIT/i386.
315 =item *
317 C<Parrot_destroy> currently leaks most of the memory that it is supposed to
318 free. L<embed.pod>
320 =back
322 =head2 PORTABILITY
324 =over 4
326 =item *
328 Portable fcntl() replacement for platforms without it
330 =item *
332 See F<pdds/draft/pdd01_overview.pod>. Test suite should have no
333 failure on supported platforms.
335 =item *
337 Tests - src/tests are not supported on all platforms
339 =item *
341 ParrotIO uses integral file descriptors, which may not be portable.
342 F<src/ops/io.ops>
344 =item *
346 conversion ops for machines without 1/2/4 byte integer data types
348 =item *
350 32 bit pointer/64 bit integer and vv.
352 =item *
354 dynamic library loading
356 =back
358 =cut