=head1 NAME todo - Perl TO-DO list =head1 DESCRIPTION This is a list of wishes for Perl. The most up to date version of this file is at L. 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 the Steering Council 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 L 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 Label bug tickets by type Known bugs in Perl are tracked by L. It shows bugs and can be filtered by assigned labels. However, many are L or have the label L<"Needs Triage"|https://github.com/Perl/perl5/issues?q=is%3Aopen+is%3Aissue+label%3A%22Needs+Triage%22>. This greatly lowers the chances of them getting fixed, as the number of open bugs is overwhelming -- too many to wade through for someone to try to find the bugs in the parts of Perl that s/he knows well enough to try to fix. This task involves going through these bugs and assigning one or more labels, and removing the "Needs Triage" label if present. =head2 Ongoing: investigate new bug reports When a bug report is filed, it would be very helpful to have someone do a quick investigation to see if it is a real problem, and to reply to the poster about it, asking for example code that reproduces the problem. Such code should be added to the test suite as TODO tests, and the ticket should be classified by type. To get started on this task, look at the issues with no comments at L. =head2 Migrate t/ from custom TAP generation 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, F and F, that contain the most basic tests, should be excluded from this task. =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 L for details. =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 Write descriptions for all tests Many individual tests in the test suite lack descriptions (or names, or labels -- call them what you will). Many files completely lack descriptions, meaning that the only output you get is the test numbers. If all tests had descriptions, understanding what the tests are testing and why they sometimes fail would both get a whole lot easier. =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. Steffen Schwingon would welcome help with L =head2 fix tainting bugs Fix the bugs revealed by running the test suite with the C<-t> switch. Setting the TEST_ARGS environment variable to C<-taintwarn> will accomplish this. =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 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 makedef.pl and conditional compilation The script F generates the list of exported symbols on platforms which need this. 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 the Perl code. Writing things twice is bad, m'kay. It would be good to teach F<.pl> 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 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. =head2 Write TODO tests for open bugs Sometimes bugs get fixed as a side effect of something else, and the bug remains open because no one realizes that it has been fixed. Ideally, every open bug should have a TODO test in the core test suite. =head2 deparse warnings nicely Currently Deparse punts on deparsing the bitmask for warnings, which it dumps uglily as-is. Try running this: $ ./perl -Ilib -MO=Deparse -e 'use warnings "pipe"; die' Deparse.pm could use the package variables in warnings.pm that warnings.pm itself uses to convert the list passed to it into a bitfield. Deparse just needs to reverse that. =head2 test and fix Deparse with perl's test suite If you run perl's tests with the TEST_ARGS environment variable set to C<-deparse> (e.g., run C), each test file will be deparsed and the deparsed output will be run. Currently there are many failures, which ought to be fixed. There is in F a list of tests known to fail, but it is out of date. Updating it would also help. This is an incremental task. Every small bit helps. It is also a task that may never end. As new tests are added, they tickle corner cases that B::Deparse cannot yet handle correctly. This task I need a bit of perl guts knowledge. But what changes need to be made is usually easy to see by dumping op trees with B::Concise: $ ./perl -Ilib -MO=Concise -e 'foo(); print @_; die $$_' and adjusting B::Deparse to handle whatever you see B::Concise produce. This is also a good way to I how perl's op trees work. =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 Improving the code that split C into chunks, preferably with general case code added to L 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. Currently this works reasonably well in the general case, and correctly parses two or more C<=items> giving the different parameter lists for the same function, such used by C. However it fails completely where I functions are listed as a sequence of C<=items> but share the same description. All the functions from C to C have individual stub pages, with only the page for C holding the description common to all. Likewise C, C and C have stub pages, instead of sharing the body of C. Note also the current code isn't ideal with the two forms of C