X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperltodo.pod;h=30f17b04cbc8ad30d90482654ac035b0deed2e84;hb=98af1e142028dcf116f32636ea54f4c3e9494651;hp=f7782c7e05d335f8da178f7959d82cb1495f9072;hpb=1f2e791661e807f561a2d5dd8f2b6a4e339e444e;p=p5sagit%2Fp5-mst-13.2.git
diff --git a/pod/perltodo.pod b/pod/perltodo.pod
index f7782c7..30f17b0 100644
--- a/pod/perltodo.pod
+++ b/pod/perltodo.pod
@@ -4,10 +4,11 @@ perltodo - Perl TO-DO List
=head1 DESCRIPTION
-This is a list of wishes for Perl. The tasks we think are smaller or easier
-are listed first. Anyone is welcome to work on any of these, but it's a good
-idea to first contact I to avoid duplication of
-effort. By all means contact a pumpking privately first if you prefer.
+This is a list of wishes for Perl. The tasks we think are smaller or
+easier are listed first. Anyone is welcome to work on any of these,
+but it's a good idea to first contact I to
+avoid duplication of effort, and to learn from any previous attempts.
+By all means contact a pumpking privately first if you prefer.
Whilst patches to make the list shorter are most welcome, ideas to add to
the list are also encouraged. Check the perl5-porters archives for past
@@ -20,25 +21,65 @@ not, but if your patch is incorporated, then we'll add your name to the
F file, which ships in the official distribution. How many other
programming languages offer you 1 line of immortality?
-=head1 The roadmap to 5.10
+=head1 Tasks that only need Perl knowledge
-The roadmap to 5.10 envisages feature based releases, as various items in this
-TODO are completed.
+=head2 Smartmatch design issues
-=head2 Needed for the final 5.10.0 release
+In 5.10.0 the smartmatch operator C<~~> isn't working quite "right". But
+before we can fix the implementation, we need to define what "right" is.
+The first problem is that Robin Houston implemented the Perl 6 smart match
+spec as of February 2006, when smart match was axiomatically symmetrical:
+L
-Review perlguts. Significant changes have occured since 5.8, and we can't
-release a new version without making sure these are covered.
+Since then the Perl 6 target moved, but the Perl 5 implementation did not.
-=head1 Tasks that only need Perl knowledge
+So it would be useful for someone to compare the Perl 6 smartmatch table
+as of February 2006 L
+and the current table L
+and tabulate the differences in Perl 6. The annotated view of changes is
+L and the diff is
+C
+-- search for C<=head1 Smart matching>. (In theory F can generate that,
+but in practice when I tried it hung forever, I assume "thinking")
+
+With that done and published, someone (else) can then map any changed Perl 6
+semantics back to Perl 5, based on how the existing semantics map to Perl 5:
+L
+
+
+There are also some questions that need answering:
+
+=over 4
+
+=item *
+
+How do you negate one? (documentation issue)
+http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2008-01/msg00071.html
+
+=item *
+
+Array behaviors
+http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-12/msg00799.html
-=head2 common test code for timed bail out
+* Should smart matches be symmetrical? (Perl 6 says no)
-Write portable self destruct code for tests to stop them burning CPU in
-infinite loops. This needs to avoid using alarm, as some of the tests are
-testing alarm/sleep or timers.
+* Other differences between Perl 5 and Perl 6 smart match?
-=head2 POD -> HTML conversion in the core still sucks
+=item *
+
+Objects and smart match
+http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-12/msg00865.html
+
+=back
+
+=head2 Remove duplication of test setup.
+
+Schwern notes, that there's duplication of code - lots and lots of tests have
+some variation on the big block of C<$Is_Foo> checks. We can safely put this
+into a file, change it to build an C<%Is> hash and require it. Maybe just put
+it into F. Throw in the handy tainting subroutines.
+
+=head2 POD -E HTML conversion in the core still sucks
Which is crazy given just how simple POD purports to be, and how simple HTML
can be. It's not actually I simple as it sounds, particularly with the
@@ -50,36 +91,24 @@ is needed to improve the cross-linking.
The addition of C and its related modules may make this task
easier to complete.
+=head2 merge checkpods and podchecker
+
+F (and C in the F subdirectory)
+implements a very basic check for pod files, but the errors it discovers
+aren't found by podchecker. Add this check to podchecker, get rid of
+checkpods and have C use podchecker.
+
=head2 Parallel testing
(This probably impacts much more than the core: also the Test::Harness
and TAP::* modules on CPAN.)
-The core regression test suite is getting ever more comprehensive, which has
-the side effect that it takes longer to run. This isn't so good. Investigate
-whether it would be feasible to give the harness script the B
would be roughly equivalent to:
+
+ do { local $"='|'; /\b(?:P)\b/ }
+
+See L
+for the discussion.
+
=head2 optional optimizer
Make the peephole optimizer optional. Currently it performs two tasks as
@@ -592,37 +975,171 @@ perl and XS subroutines. Subroutine implementations rarely change between
perl and XS at run time, so investigate using 2 ops to enter subs (one for
XS, one for perl) and swap between if a sub is redefined.
-=head2 Self ties
+=head2 Self-ties
-self ties are currently illegal because they caused too many segfaults. Maybe
-the causes of these could be tracked down and self-ties on all types re-
-instated.
+Self-ties are currently illegal because they caused too many segfaults. Maybe
+the causes of these could be tracked down and self-ties on all types
+reinstated.
=head2 Optimize away @_
The old perltodo notes "Look at the "reification" code in C".
-=head2 What hooks would assertions need?
-
-Assertions are in the core, and work. However, assertions needed to be added
-as a core patch, rather than an XS module in ext, or a CPAN module, because
-the core has no hooks in the necessary places. It would be useful to
-investigate what hooks would need to be added to make it possible to provide
-the full assertion support from a CPAN module, so that we aren't constraining
-the imagination of future CPAN authors.
+=head2 Virtualize operating system access
+
+Implement a set of "vtables" that virtualizes operating system access
+(open(), mkdir(), unlink(), readdir(), getenv(), etc.) At the very
+least these interfaces should take SVs as "name" arguments instead of
+bare char pointers; probably the most flexible and extensible way
+would be for the Perl-facing interfaces to accept HVs. The system
+needs to be per-operating-system and per-file-system
+hookable/filterable, preferably both from XS and Perl level
+(L is good reading at this point,
+in fact, all of L is.)
+
+This has actually already been implemented (but only for Win32),
+take a look at F and F. While all Win32
+variants go through a set of "vtables" for operating system access,
+non-Win32 systems currently go straight for the POSIX/UNIX-style
+system/library call. Similar system as for Win32 should be
+implemented for all platforms. The existing Win32 implementation
+probably does not need to survive alongside this proposed new
+implementation, the approaches could be merged.
+
+What would this give us? One often-asked-for feature this would
+enable is using Unicode for filenames, and other "names" like %ENV,
+usernames, hostnames, and so forth.
+(See L.)
+
+But this kind of virtualization would also allow for things like
+virtual filesystems, virtual networks, and "sandboxes" (though as long
+as dynamic loading of random object code is allowed, not very safe
+sandboxes since external code of course know not of Perl's vtables).
+An example of a smaller "sandbox" is that this feature can be used to
+implement per-thread working directories: Win32 already does this.
+
+See also L"Extend PerlIO and PerlIO::Scalar">.
+
+=head2 Investigate PADTMP hash pessimisation
+
+The peephole optimier converts constants used for hash key lookups to shared
+hash key scalars. Under ithreads, something is undoing this work.
+See http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-09/msg00793.html
+
+=head2 Store the current pad in the OP slab allocator
+
+=for clarification
+I hope that I got that "current pad" part correct
+
+Currently we leak ops in various cases of parse failure. I suggested that we
+could solve this by always using the op slab allocator, and walking it to
+free ops. Dave comments that as some ops are already freed during optree
+creation one would have to mark which ops are freed, and not double free them
+when walking the slab. He notes that one problem with this is that for some ops
+you have to know which pad was current at the time of allocation, which does
+change. I suggested storing a pointer to the current pad in the memory allocated
+for the slab, and swapping to a new slab each time the pad changes. Dave thinks
+that this would work.
+
+=head2 repack the optree
+
+Repacking the optree after execution order is determined could allow
+removal of NULL ops, and optimal ordering of OPs with respect to cache-line
+filling. The slab allocator could be reused for this purpose. I think that
+the best way to do this is to make it an optional step just before the
+completed optree is attached to anything else, and to use the slab allocator
+unchanged, so that freeing ops is identical whether or not this step runs.
+Note that the slab allocator allocates ops downwards in memory, so one would
+have to actually "allocate" the ops in reverse-execution order to get them
+contiguous in memory in execution order.
+
+See http://www.nntp.perl.org/group/perl.perl5.porters/2007/12/msg131975.html
+
+Note that running this copy, and then freeing all the old location ops would
+cause their slabs to be freed, which would eliminate possible memory wastage if
+the previous suggestion is implemented, and we swap slabs more frequently.
+
+=head2 eliminate incorrect line numbers in warnings
+
+This code
+
+ use warnings;
+ my $undef;
+
+ if ($undef == 3) {
+ } elsif ($undef == 0) {
+ }
-=head2 Properly Unicode safe tokeniser and pads.
-
-The tokeniser isn't actually very UTF-8 clean. C