This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add pointer to Pod::Simple for the Pod -> HTML task.
[perl5.git] / pod / perltodo.pod
index 6fe7a67..59b186a 100644 (file)
@@ -15,9 +15,50 @@ ideas, and any discussion about them. One set of archives may be found at:
 
     http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/
 
+What can we offer you in return? Fame, fortune, and everlasting glory? Maybe
+not, but if your patch is incorporated, then we'll add your name to the
+F<AUTHORS> file, which ships in the official distribution. How many other
+programming languages offer you 1 line of immortality?
 
+=head1 The roadmap to 5.10
 
+The roadmap to 5.10 envisages feature based releases, as various items in this
+TODO are completed.
 
+=head2 Needed for a 5.9.3 release
+
+=over
+
+=item *
+Implement L</lexical pragmas>
+
+=back
+
+=head2 Needed for a 5.9.4 release
+
+=over
+
+=item *
+Review assertions. Review syntax to combine assertions. Can assertions  take
+advantage of the lexical pragams work? L</What hooks would assertions need?>
+
+=back
+
+=head2 Needed for a 5.9.5 release
+
+=over
+
+=item *
+Implement L</_ prototype character>
+
+=item *
+Implement L</state variables>
+
+=back
+
+=head2 Needed for a 5.9.6 release
+
+Stabilisation. If all goes well, this will be the equivalent of a 5.10-beta.
 
 =head1 Tasks that only need Perl knowledge
 
@@ -36,6 +77,37 @@ visual appeal of the HTML generated, and to avoid it having any validation
 errors. See also L</make HTML install work>, as the layout of installation tree
 is needed to improve the cross-linking.
 
+The addition of C<Pod::Simple> and its related modules may make this task
+easier to complete.
+
+=head2 Parallel testing
+
+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<option> of
+running sets of tests in parallel. This would be useful for tests in
+F<t/op/*.t> and F<t/uni/*.t> and maybe some sets of tests in F<lib/>.
+
+Questions to answer
+
+=over 4
+
+=item 1
+
+How does screen layout work when you're running more than one test?
+
+=item 2
+
+How does the caller of test specify how many tests to run in parallel?
+
+=item 3
+
+How do setup/teardown tests identify themselves?
+
+=back
+
+Pugs already does parallel testing - can their approach be re-used?
+
 =head2 Make Schwern poorer
 
 We should have for everything. When all the core's modules are tested,
@@ -56,7 +128,7 @@ A full test suite for the B module would be nice.
 
 =head2 A decent benchmark
 
-perlbench seems impervious to any recent changes made to the perl core. It
+C<perlbench> seems impervious to any recent changes made to the perl core. It
 would be useful to have a reasonable general benchmarking suite that roughly
 represented what current perl programs do, and measurably reported whether
 tweaks to the core improve, degrade or don't really affect performance, to
@@ -97,6 +169,12 @@ for example POSIX passes Exporter some very memory hungry data structures.
 Or if you prefer, tasks that you would learn from, and broaden your skills
 base...
 
+=head2 Relocatable perl
+
+The C level patches needed to create a relocatable perl binary are done, as
+is the work on F<Config.pm>. All that's left to do is the C<Configure> tweaking
+to let people specify how they want to do the install.
+
 =head2 make HTML install work
 
 There is an C<installhtml> target in the Makefile. It's marked as
@@ -113,12 +191,13 @@ and the core documentation (files in F<pod/>)
 
 =item 2
 
-Work out how to split perlfunc into chunks, preferably one per function group,
-preferably with general case code that could be used elsewhere. Challenges
-here are correctly identifying the groups of functions that go together, and
-making the right named external cross-links point to the right page. Things to
-be aware of are C<-X>, groups such as C<getpwnam> to C<endservent>, two or
-more C<=items> giving the different parameter lists, such as
+Work out how to split C<perlfunc> into chunks, preferably one per function
+group, preferably with general case code that could be used elsewhere.
+Challenges here are correctly identifying the groups of functions that go
+together, and making the right named external cross-links point to the right
+page. Things to be aware of are C<-X>, groups such as C<getpwnam> to
+C<endservent>, two or more C<=items> giving the different parameter lists, such
+as
 
     =item substr EXPR,OFFSET,LENGTH,REPLACEMENT
     
@@ -214,12 +293,6 @@ possibly involving probing at install time or later, so that the C<%Config> in
 a binary distribution better describes the installed machine, when the
 installed machine differs from the build machine in some significant way.
 
-=head2 Relocatable perl
-
-The C level patches needed to create a relocatable perl binary are done, as
-is the work on Config.pm. All that's left to do is the C<Configure> tweaking
-to let people specify how they want to do the install.
-
 =head2 make parallel builds work
 
 Currently parallel builds (such as C<make -j3>) don't work reliably. We believe
@@ -227,6 +300,19 @@ that this is due to incomplete dependency specification in the F<Makefile>.
 It would be good if someone were able to track down the causes of these
 problems, so that parallel builds worked properly.
 
+=head2 linker specification files
+
+Some platforms mandate that you provide a list of a shared library's external
+symbols to the linker, so the core already has the infrastructure in place to
+do this for generating shared perl libraries. My understanding is that the
+GNU toolchain can accept an optional linker specification file, and restrict
+visibility just to symbols declared in that file. It would be good to extend
+F<makedef.pl> to support this format, and to provide a means within
+C<Configure> to enable it. This would allow Unix users to test that the
+export list is correct, and to build a perl that does not pollute the global
+namespace with private symbols.
+
+
 
 
 =head1 Tasks that need a little C knowledge
@@ -236,9 +322,9 @@ background or experience with XS, or how the Perl interpreter works
 
 =head2 Make it clear from -v if this is the exact official release
 
-Currently perl from p4/rsync ships with a patchlevel.h file that usually
-defines one local patch, of the form "MAINT12345" or "RC1". The output of
-perl -v doesn't report that a perl isn't an official release, and this
+Currently perl from C<p4>/C<rsync> ships with a F<patchlevel.h> file that
+usually defines one local patch, of the form "MAINT12345" or "RC1". The output
+of perl -v doesn't report that a perl isn't an official release, and this
 information can get lost in bugs reports. Because of this, the minor version
 isn't bumped up until RC time, to minimise the possibility of versions of perl
 escaping that believe themselves to be newer than they actually are.
@@ -256,6 +342,18 @@ such that it's trivial for the Pumpking to flag "this is an official release"
 when making a tarball, yet leave the default source saying "I'm not the
 official release".
 
+=head2 Tidy up global variables
+
+There's a note in F<intrpvar.h>
+
+  /* These two variables are needed to preserve 5.8.x bincompat because
+     we can't change function prototypes of two exported functions.
+     Probably should be taken out of blead soon, and relevant prototypes
+     changed.  */
+
+So doing this, and removing any of the unused variables still present would
+be good.
+
 =head2 Ordering of "global" variables.
 
 F<thrdvar.h> and F<intrpvarh> define the "global" variables that need to be
@@ -490,6 +588,11 @@ would be good to fix.
 Study the possibility of adding a new prototype character, C<_>, meaning
 "this argument defaults to $_".
 
+=head2 state variables
+
+C<my $foo if 0;> is deprecated, and should be replaced with
+C<state $x = "initial value\n";> the syntax from Perl 6.
+
 =head2 @INC source filter to Filter::Simple
 
 The second return value from a sub in @INC can be a source filter. This isn't
@@ -571,7 +674,7 @@ of 5.10"
 
 =head2 make ithreads more robust
 
-Generally make ithreads more robust. See also L<iCOW>
+Generally make ithreads more robust. See also L</iCOW>
 
 This task is incremental - even a little bit of work on it will help, and
 will be greatly appreciated.