ROADMAP
As of this writing, there is no one place in which all remaining parrot work is documented. There are various TODO files, the RT queue, comments in the source code and the documentation. This document is a first pass at unifying this information and providing a single point of reference for anyone interested in the current state of the parrot, whether they are developers looking for items to work on, or external users looking for an idea of when they can expect a release.
This document is not meant to contain all the metadata regarding particular tasks, but merely provide a summary of the tasks.
Strictly speaking, this document is not a roadmap - that requires input from the Architect and the Pumpking. However, its goal is to help improve project management for parrot, and enable an actual roadmap.
This release has a ticket opened as [perl #33916].
https://rt.perl.org/rt3/Ticket/ModifyLinks.html?id=33916
has a list of all the open issues which must be completed for this release.
The tasks that are remaining are broken down into the following categories, roughly listed in the order through which a task might progress.
Each task has certain metadata associated with it which must be tracked. Eventually all metadata should be stored in RT at http://rt.perl.org/rt3/
These are pending design decisions which must be made before any code can be written to implement them. Note - DESIGN is a special kind of documenation task. Due to the nature of this kind of documentation, it deserves to be broken out into its own category.
Any item, whether visible to parrot users or hidden behind an API, that has already been designed (but not implemented) belongs here.
Any items which have been implemented but don't work as expected.
Any items which are specific to a particular platform or require special attention for cross-platform compatibilty.
Any items pertaining to source, API, or user level documentation.
Parrot currently ships with several partial language implementations. Any tasks which are specific to those languages, or affect cross-language compatibility will be listed here.
To be included: docs/pmc, docs/resources, docs/*.pod, anything in CVS not in docs, RT. (That is, quite a bit.)
Finish event and IO specification
Finish specification of return continuation and sub being called slots in interpreter, with introspection
Spec out bytecode metadata system and introspection/modification system
Specify what we need to serialize continuations
Spec out threading system.
Final namespace spec
Final lexical pad spec
Solidify design for Truly Evil speed hack for fast regex/string matching
multi key opcodes
Describe the behavior of init_pmc_props. PDD02
Describe the behavior of the serialization functions. (freeze, thaw, thawfinish, visit). PDD02
Describe the behavior of share. PDD02
share
Describe the components of a struct PMC_EXT. PDD04
struct PMC_EXT
requestor: leo
Ok. In the long run I expect a multi-stage config system. First is to get miniparrot built and running, then Parrot core. Extensions like gdbm could be configured at that point or even in a third step.
IO: Add IO tables, right now IO's just float around.
Finish PMC for IO object
IO's "stdio" layer: buffering, seek/random access, shared streams, thread safe
Copy-on-write IO stacks
Make IO layer cache the vtable calls to the next layer.
IO Filters
IO mmap support
Bottom level socket/pipe/process support in API
UTF layers (or should we not bother and do as a filter?)
Sample programs and test suite
AIO - On many platforms we must fake async IO, are we doing a background thread/interp or an inline event queue function that is called every N ops?
Get digest (probably SHA1) added to bytecode segments
Speed up the OrderedHash implementation
Rearchitect internals for the string specifications.
To PerlClass or not to PerlClass, that is the question. The class hierarchy should be reworked (e.g. Boolean->PerlInt->Scalar).
lib/Parrot/PackFile* is outdated and unused
Configuration - missing tests for processor features
Configuration - duplication, e.g. nvsize/numvalsize
Tests - ~1/3 of opcodes are uncovered by tests
IO - Async core isn't there yet, even though it is rumoured to be.
Overflow detection/promotion to bigint/float types.
Create opcode_process.pl PDD05
Fill in the remaining functions from the EDA, verify that the test suite still passes, integrate the library into the rest of Parrot, provide PMC types and suitable opcodes. Conversion to and from Parrot strings, conversion to and from floating point types, sprintf output of bignumbers. PDD14
Implement the parrot equivalent of perl5's $0, based on recent (January 2005) mailing list activity.
$0
load_bytecode does not search the library path to load the file. "core.ops" in ops
load_bytecode
The debugger needs to clone the interpreter to "allow people to play into the debugger and then continue the normal execution of the program." "debug.ops" in ops
parrot doesn't catch the exception thrown by the op cmod. "math.ops" in ops
cmod
rx_compile op is documented but unimplemented. "rx.ops" in ops
rx_compile
There is no way to do a case insenstive match. "rx.ops" in ops
You can add parents to a class with children and objects, and attributes to a class with children or objects. This is silently allowed and quietly corrupts the child classes and instantiated objects.
building miniparrot is broken
GC issue (copying collector) - immobile strings/buffers get freed during GC.
Memory leak - PIO subsystem leaks file handles (ParrotIO structures)
Memory leak - regexen leak bitmaps
Memory leak - string_to_cstring returns a malloced string, which isn't freed everywhere
Memory Leaks - imcc is currently leaking Unit structures and possibly more
Regular Expressions - are non reentrant due to interpreter global intstack
JIT - 64 bit integers on 32 bit machines don't work
JIT - parrot register inspection is incomplete (P-regs)
This sequence:
loop: dec I0 inc I1 # or add, sub, ... if I0, loop
isn't handled correctly on JIT/i386.
Parrot_destroy currently leaks most of the memory that it is supposed to free. embed.pod
Parrot_destroy
Portable fcntl() replacement for platforms without it
See PORTABILITY. Test suite should have no failure on supported platforms.
Tests - src/tests are not supported on all platforms
ParrotIO uses integral file descriptors, which may not be portable. "io.ops" in ops
conversion ops for machines without 1/2/4 byte integer data types
32 bit pointer/64 bit integer and vv.
dynamic library loading
memory_internals.pod has a question about whether or not string reuse is limited to a single user or multiple users.
Items in languages/tcl/TODO must be completed.
Get python bytecode translator done
Pass the pie-thon test suite.
This document should eventually be obsoleted by use of the RT ticketing system. Every task that is to be done should be documented in the system, and reports generated based on that information.
To install Ruby, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Ruby
CPAN shell
perl -MCPAN -e shell install Ruby
For more information on module installation, please visit the detailed CPAN module installation guide.