X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperltodo.pod;h=a16cf0d604adff14905f09dfc0f43ed39d2aacd2;hb=e706c0cd31a70bd2c97d4510f261613278a7e1f5;hp=6698b8da971e9292e426b16572683087636bead2;hpb=0c13e809ed4d404a11e0397efa6d6cb6bbb30d3e;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perltodo.pod b/pod/perltodo.pod index 6698b8d..a16cf0d 100644 --- a/pod/perltodo.pod +++ b/pod/perltodo.pod @@ -4,79 +4,786 @@ perltodo - Perl TO-DO List =head1 DESCRIPTION -This is a list of wishes for Perl. Send updates to -I. If you want to work on any of these -projects, be sure to check the perl5-porters archives for past ideas, -flames, and propaganda. This will save you time and also prevent you -from implementing something that Larry has already vetoed. One set -of archives may be found at: +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 +ideas, and any discussion about them. One set of archives may be found at: http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/ -=head1 assertions +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? -Clean up and finish support for assertions. See L. +=head1 Tasks that only need Perl knowledge -=head1 iCOW +=head2 Improve Porting/cmpVERSION.pl to work from git tags -Sarathy and Arthur have a proposal for an improved Copy On Write which -specifically will be able to COW new ithreads. If this can be implemented -it would be a good thing. +See F for a bit more detail. -=head1 (?{...}) closures in regexps +=head2 Migrate t/ from custom TAP generation -Fix (or rewrite) the implementation of the C closures. +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. -=head1 pragmata +The subdirectories F, F and F, that contain the most +basic tests, should be excluded from this task. -=head2 lexical pragmas +=head2 Test that regen.pl was run -Reimplement the mechanism of lexical pragmas to be more extensible. Fix -current pragmas that don't work well (or at all) with lexical scopes or in -run-time eval(STRING) (C, C, C for example). MJD has a -preliminary patch that implements this. +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 use less 'memory' +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. -Investigate trade offs to switch out perl's choices on memory usage. -Particularly perl should be able to give memory back. +=head2 Automate perldelta generation + +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 +flexibility POD allows for C<=item>, but it would be good to improve the +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 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. + +=head2 Improve the coverage of the core tests + +Use Devel::Cover to ascertain the core modules' test coverage, then add +tests that are currently missing. + +=head2 test B + +A full test suite for the B module would be nice. + +=head2 A decent benchmark + +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 +guide people attempting to optimise the guts of perl. Gisle would welcome +new tests for perlbench. + +=head2 fix tainting bugs + +Fix the bugs revealed by running the test suite with the C<-t> switch (via +C). + +=head2 Dual life everything + +As part of the "dists" plan, anything that doesn't belong in the smallest perl +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. + +To make a minimal perl distribution, it's useful to look at +F. + +=head2 Move dual-life pod/*.PL into ext + +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 + +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 + +Or if you prefer, tasks that you would learn from, and broaden your skills +base... + +=head2 make HTML install work + +There is an C target in the Makefile. It's marked as +"experimental". It would be good to get this tested, make it work reliably, and +remove the "experimental" tag. This would include + +=over 4 + +=item 1 + +Checking that cross linking between various parts of the documentation works. +In particular that links work between the modules (files with POD in F) +and the core documentation (files in F) + +=item 2 + +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