=head1 DESCRIPTION
This is a list of wishes for Perl. The most up to date version of this file
-is at http://perl5.git.perl.org/perl.git/blob_plain/HEAD:/pod/perltodo.pod
+is at L<http://perl5.git.perl.org/perl.git/blob_plain/HEAD:/pod/perltodo.pod>
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
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
-ideas, and any discussion about them. One set of archives may be found at:
-
- http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/
+ideas, and any discussion about them. One set of archives may be found at
+L<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
=head2 Migrate t/ from custom TAP generation
Many tests below F<t/> still generate TAP by "hand", rather than using library
-functions. As explained in L<perlhack/Writing a test>, tests in F<t/> are
+functions. As explained in L<perlhack/TESTING>, tests in F<t/> are
written in a particular way to test that more complex constructions actually
work before using them routinely. Hence they don't use C<Test::More>, but
instead there is an intentionally simpler library, F<t/test.pl>. However,
The subdirectories F<base>, F<cmd> and F<comp>, that contain the most
basic tests, should be excluded from this task.
-=head2 Test that regen.pl was run
-
-There are various generated files shipped with the perl distribution, for
-things like header files generate from data. The generation scripts are
-written in perl, and all can be run by F<regen.pl>. However, because they're
-written in perl, we can't run them before we've built perl. We can't run them
-as part of the F<Makefile>, because changing files underneath F<make> confuses
-it completely, and we don't want to run them automatically anyway, as they
-change files shipped by the distribution, something we seek not do to.
-
-If someone changes the data, but forgets to re-run F<regen.pl> then the
-generated files are out of sync. It would be good to have a test in
-F<t/porting> that checks that the generated files are in sync, and fails
-otherwise, to alert someone before they make a poor commit. I suspect that this
-would require adapting the scripts run from F<regen.pl> to have dry-run
-options, and invoking them with these, or by refactoring them into a library
-that does the generation, which can be called by the scripts, and by the test.
-
=head2 Automate perldelta generation
The perldelta file accompanying each release summaries the major changes.
The addition of C<Pod::Simple> and its related modules may make this task
easier to complete.
-=head2 Make ExtUtils::ParseXS use strict;
-
-F<lib/ExtUtils/ParseXS.pm> contains this line
-
- # use strict; # One of these days...
-
-Simply uncomment it, and fix all the resulting issues :-)
-
-The more practical approach, to break the task down into manageable chunks, is
-to work your way though the code from bottom to top, or if necessary adding
-extra C<{ ... }> blocks, and turning on strict within them.
-
=head2 Make Schwern poorer
We should have tests for everything. When all the core's modules are tested,
told is something Perl is good at. So it would be nice to know what it is doing
that is taking so much CPU, and where possible address it.
-=head2 enable lexical enabling/disabling of inidvidual warnings
+=head2 enable lexical enabling/disabling of individual warnings
Currently, warnings can only be enabled or disabled by category. There
are times when it would be useful to quash a single warning, not a
whole category.
+=head2 document diagnostics
+
+Many diagnostic messages are not currently documented. The list is at the end
+of t/porting/diag.t.
+
=head1 Tasks that need a little sysadmin-type knowledge
Or if you prefer, tasks that you would learn from, and broaden your skills
Windows Perl or whether we go in a separate direction and make it so. Of
course, we all know what step 3 is.
-=head2 decouple -g and -DDEBUGGING
-
-Currently F<Configure> automatically adds C<-DDEBUGGING> to the C compiler
-flags if it spots C<-g> in the optimiser flags. The pre-processor directive
-C<DEBUGGING> enables F<perl>'s command line C<-D> options, but in the process
-makes F<perl> slower. It would be good to disentangle this logic, so that
-C-level debugging with C<-g> and Perl level debugging with C<-D> can easily
-be enabled independently.
-
=head1 Tasks that need a little C knowledge
These tasks would need a little C knowledge, but don't need any specific
modules without overwriting files. This causes problems for binary
package builders. One possible proposal is laid out in this
message:
-L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2002-04/msg02380.html>.
+L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2002-04/msg02380.html>
=head2 -Duse32bit*
On these systems, it might be the default compilation mode, and there
is currently no guarantee that passing no use64bitall option to the
Configure process will build a 32bit perl. Implementing -Duse32bit*
-options would be nice for perl 5.12.
+options would be nice for perl 5.14.
=head2 Profile Perl - am I hot or not?
=head2 Improve win32/wince.c
Currently, numerous functions look virtually, if not completely,
-identical in both C<win32/wince.c> and C<win32/win32.c> files, which can't
+identical in both F<win32/wince.c> and F<win32/win32.c> files, which can't
be good.
=head2 Use secure CRT functions when building with VC8 on Win32
not actually be writable if access is indeed denied by DACLs).
For the chdir() issue, see ActiveState bug #74552:
-http://bugs.activestate.com/show_bug.cgi?id=74552
+L<http://bugs.activestate.com/show_bug.cgi?id=74552>
Therefore, DACLs should be checked both for consistency across CRTs and for
the correct answer.
of things like C<malloc> corruption that that currently offers us)
For more information see the thread starting with this message:
-http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2008-03/msg00305.html
+L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2008-03/msg00305.html>
=head2 autovivification
Currently C<$foo ~~ $object> will die with the message "Smart matching a
non-overloaded object breaks encapsulation". It would be nice to allow
-to bypass this by using explictly the syntax C<$foo ~~ %$object> or
+to bypass this by using explicitly the syntax C<$foo ~~ %$object> or
C<$foo ~~ @$object>.
=head2 error reporting of [$a ; $b]
C<{}> used as a hashref, C<[]> or C<()>) it issues an error something like
I<';' isn't legal inside an expression - if you need multiple statements use a
do {...} block>. See the thread starting at
-http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2008-09/msg00573.html
+L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2008-09/msg00573.html>
=head2 lexicals used only once
=head2 UTF-8 revamp
-The handling of Unicode is unclean in many places. For example, the regexp
-engine matches in Unicode semantics whenever the string or the pattern is
-flagged as UTF-8, but that should not be dependent on an internal storage
-detail of the string.
+The handling of Unicode is unclean in many places. In the regex engine
+there are especially many problems. The swash data structure could be
+replaced my something better. Inversion lists and maps are likely
+candidates. The whole Unicode database could be placed in-core for a
+huge speed-up. Only minimal work was done on the optimizer when utf8
+was added, with the result that the synthetic start class often will
+fail to narrow down the possible choices when given non-Latin1 input.
=head2 Properly Unicode safe tokeniser and pads.
do { local $"='|'; /\b(?:P)\b/ }
-See L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-01/msg00400.html>
+See
+L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-01/msg00400.html>
for the discussion.
=head2 optional optimizer
The peephole optimiser 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
+See
+L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-09/msg00793.html>
=head2 Store the current pad in the OP slab allocator
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
+See
+L<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
=head1 Big projects
Tasks that will get your name mentioned in the description of the "Highlights
-of 5.12"
+of 5.14"
=head2 make ithreads more robust