X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperltodo.pod;h=a16cf0d604adff14905f09dfc0f43ed39d2aacd2;hb=e706c0cd31a70bd2c97d4510f261613278a7e1f5;hp=a4e655cdcbba2b181e35d89989b877842e5ccdb6;hpb=46925299862a0e463c499a99799cb56d12e9b3a9;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perltodo.pod b/pod/perltodo.pod index a4e655c..a16cf0d 100644 --- a/pod/perltodo.pod +++ b/pod/perltodo.pod @@ -4,10 +4,14 @@ 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 most up to date version of this file +is at 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 +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 @@ -15,19 +19,74 @@ 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 file, which ships in the official distribution. How many other +programming languages offer you 1 line of immortality? + +=head1 Tasks that only need Perl knowledge +=head2 Improve Porting/cmpVERSION.pl to work from git tags +See F for a bit more detail. +=head2 Migrate t/ from custom TAP generation -=head1 Tasks that only need Perl knowledge +Many tests below F still generate TAP by "hand", rather than using library +functions. As explained in L, tests in F are +written in a particular way to test that more complex constructions actually +work before using them routinely. Hence they don't use C, but +instead there is an intentionally simpler library, F. However, +quite a few tests in F have not been refactored to use it. Refactoring +any of these tests, one at a time, is a useful thing TODO. + +The subdirectories F, F and F, 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. 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, because changing files underneath F 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. -=head2 common test code for timed bail out +If someone changes the data, but forgets to re-run F then the +generated files are out of sync. It would be good to have a test in +F 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 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. -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. +=head2 Automate perldelta generation -=head2 POD -> HTML conversion in the core still sucks +The perldelta file accompanying each release summaries the major changes. +It's mostly manually generated currently, but some of that could be +automated with a bit of perl, specifically the generation of + +=over + +=item Modules and Pragmata + +=item New Documentation + +=item New Tests + +=back + +See F for details. + +=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 @@ -36,19 +95,32 @@ visual appeal of the HTML generated, and to avoid it having any validation errors. See also L, as the layout of installation tree is needed to improve the cross-linking. +The addition of C and its related modules may make this task +easier to complete. + +=head2 Make ExtUtils::ParseXS use strict; + +F 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 for everything. When all the core's modules are tested, +We should have tests for everything. When all the core's modules are tested, Schwern has promised to donate to $500 to TPF. We may need volunteers to hold him upside down and shake vigorously in order to actually extract the cash. -See F for the 3 remaining modules that need tests. - =head2 Improve the coverage of the core tests -Use Devel::Cover to ascertain the core's test coverage, then add tests that -are currently missing. +Use Devel::Cover to ascertain the core modules' test coverage, then add +tests that are currently missing. =head2 test B @@ -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 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 @@ -75,10 +147,16 @@ distribution needs to be dual lifed. Anything else can be too. Figure out what changes would be needed to package that module and its tests up for CPAN, and do so. Test it with older perl releases, and fix the problems you find. -=head2 Improving C +To make a minimal perl distribution, it's useful to look at +F. + +=head2 Move dual-life pod/*.PL into ext -Investigate whether C could share aggregates properly with -only Perl level changes to shared.pm +Nearly all the dual-life modules have been moved to F. However, we +still need to move F into their respective directories +in F. They're referenced by (at least) C in F +and C in F and F, and listed +explicitly in F, F and F =head2 POSIX memory footprint @@ -86,11 +164,48 @@ Ilya observed that use POSIX; eats memory like there's no tomorrow, and at various times worked to cut it down. There is probably still fat to cut out - for example POSIX passes Exporter some very memory hungry data structures. +=head2 embed.pl/makedef.pl +There is a script F that generates several header files to prefix +all of Perl's symbols in a consistent way, to provide some semblance of +namespace support in C. Functions are declared in F, variables +in F. Quite a few of the functions and variables +are conditionally declared there, using C<#ifdef>. However, F +doesn't understand the C macros, so the rules about which symbols are present +when is duplicated in F. Writing things twice is bad, m'kay. +It would be good to teach C to understand the conditional +compilation, and hence remove the duplication, and the mistakes it has caused. +=head2 use strict; and AutoLoad +Currently if you write + package Whack; + use AutoLoader 'AUTOLOAD'; + use strict; + 1; + __END__ + sub bloop { + print join (' ', No, strict, here), "!\n"; + } +then C isn't in force within the autoloaded subroutines. It would +be more consistent (and less surprising) to arrange for all lexical pragmas +in force at the __END__ block to be in force within each autoloaded subroutine. + +There's a similar problem with SelfLoader. + +=head2 profile installman + +The F script is slow. All it is doing text processing, which we're +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 + +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. =head1 Tasks that need a little sysadmin-type knowledge @@ -113,17 +228,16 @@ and the core documentation (files in F) =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 to C, two or -more C<=items> giving the different parameter lists, such as +Work out how to split C 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 to +C, two or more C<=items> giving the different parameter lists, such +as =item substr EXPR,OFFSET,LENGTH,REPLACEMENT - =item substr EXPR,OFFSET,LENGTH - =item substr EXPR,OFFSET and different parameter lists having different meanings. (eg C