From: Nicholas Clark Date: Sat, 17 Sep 2005 14:19:54 +0000 (+0000) Subject: Re-order the TODO tasks based on the skills they need, putting the X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=0bdfc961701ca2e58940f1481df64e9588138a1b;p=p5sagit%2Fp5-mst-13.2.git Re-order the TODO tasks based on the skills they need, putting the easist tasks first. I've categorised them as =head1 Tasks that only need Perl knowledge =head1 Tasks that need a little sysadmin-type knowledge =head1 Tasks that need a little C knowledge =head1 Tasks that need a knowledge of XS =head1 Tasks that need a knowledge of the interpreter =head1 Big projects Lets see if we get any takers. p4raw-id: //depot/perl@25429 --- diff --git a/pod/perltodo.pod b/pod/perltodo.pod index 5cc07d4..7f4d55f 100644 --- a/pod/perltodo.pod +++ b/pod/perltodo.pod @@ -4,122 +4,30 @@ 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 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. - http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/ - -=head1 assertions - -Clean up and finish support for assertions. See L. - -=head1 iCOW - -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. - -=head1 (?{...}) closures in regexps - -Fix (or rewrite) the implementation of the C closures. - -=head1 A re-entrant regexp engine - -This will allow the use of a regex from inside (?{ }), (??{ }) and -(?(?{ })|) constructs. - -=head1 pragmata - -=head2 lexical pragmas - -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. - -=head2 use less 'memory' - -Investigate trade offs to switch out perl's choices on memory usage. -Particularly perl should be able to give memory back. - -=head1 prototypes and functions - -=head2 _ prototype character - -Study the possibility of adding a new prototype character, C<_>, meaning -"this argument defaults to $_". - -=head2 inlining autoloaded constants - -Currently the optimiser can inline constants when expressed as subroutines -with prototype ($) that return a constant. Likewise, many packages wrapping -C libraries export lots of constants as subroutines which are AUTOLOADed on -demand. However, these have no prototypes, so can't be seen as constants by -the optimiser. Some way of cheaply (low syntax, low memory overhead) to the -perl compiler that a name is a constant would be great, so that it knows to -call the AUTOLOAD routine at compile time, and then inline the constant. - -=head2 Finish off lvalue functions - -The old perltodo notes "They don't work in the debugger, and they don't work for -list or hash slices." - -=head1 Unicode and UTF8 +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: -=head2 Implicit Latin 1 => Unicode translation - -Conversions from byte strings to UTF-8 currently map high bit characters -to Unicode without translation (or, depending on how you look at it, by -implicitly assuming that the byte strings are in Latin-1). As perl assumes -the C locale by default, upgrading a string to UTF-8 may change the -meaning of its contents regarding character classes, case mapping, etc. -This should probably emit a warning (at least). - -=head2 UTF8 caching code - -The string position/offset cache is not optional. It should be. - -=head2 Unicode in Filenames - -chdir, chmod, chown, chroot, exec, glob, link, lstat, mkdir, open, -opendir, qx, readdir, readlink, rename, rmdir, stat, symlink, sysopen, -system, truncate, unlink, utime, -X. All these could potentially accept -Unicode filenames either as input or output (and in the case of system -and qx Unicode in general, as input or output to/from the shell). -Whether a filesystem - an operating system pair understands Unicode in -filenames varies. - -Known combinations that have some level of understanding include -Microsoft NTFS, Apple HFS+ (In Mac OS 9 and X) and Apple UFS (in Mac -OS X), NFS v4 is rumored to be Unicode, and of course Plan 9. How to -create Unicode filenames, what forms of Unicode are accepted and used -(UCS-2, UTF-16, UTF-8), what (if any) is the normalization form used, -and so on, varies. Finding the right level of interfacing to Perl -requires some thought. Remember that an OS does not implicate a -filesystem. + http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/ -(The Windows -C command flag "wide API support" has been at least -temporarily retired in 5.8.1, and the -C has been repurposed, see -L.) -=head2 Unicode in %ENV -Currently the %ENV entries are always byte strings. -=head1 Regexps -=head2 regexp optimiser optional +=head1 Tasks that only need Perl knowledge -The regexp optimiser is not optional. It should configurable to be, to allow -its performance to be measured, and its bugs to be easily demonstrated. +=head2 common test code for timed bail out -=head1 POD +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 POD -> HTML conversion still sucks +=head2 POD -> 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 @@ -128,102 +36,65 @@ 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. -=head1 Misc medium sized projects - -=head2 UNITCHECK - -Introduce a new special block, UNITCHECK, which is run at the end of a -compilation unit (module, file, eval(STRING) block). This will correspond to -the Perl 6 CHECK. Perl 5's CHECK cannot be changed or removed because the -O.pm/B.pm backend framework depends on it. - -=head2 optional optimizer - -Make the peephole optimizer optional. - -=head2 You WANT *how* many - -Currently contexts are void, scalar and list. split has a special mechanism in -place to pass in the number of return values wanted. It would be useful to -have a general mechanism for this, backwards compatible and little speed hit. -This would allow proposals such as short circuiting sort to be implemented -as a module on CPAN. - -=head2 lexical aliases - -Allow lexical aliases (maybe via the syntax C. +=head2 Make Schwern poorer -=head2 IPv6 +We should have 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. -Clean this up. Check everything in core works +See F for the 3 remaining modules that need tests. -=head2 entersub XS vs Perl +=head2 Improve the coverage of the core tests -At the moment pp_entersub is huge, and has code to deal with entering both -perl and XS subroutines. Subroutine implementations rarely change between -perl and XS at run time, so investigate using 2 ops to enter subs (one for -XS, one for perl) and swap between if a sub is redefined. - -=head2 @INC source filter to Filter::Simple - -The second return value from a sub in @INC can be a source filter. This isn't -documented. It should be changed to use Filter::Simple, tested and documented. +Use Devel::Cover to ascertain the core's test coverage, then add tests that +are currently missing. +=head2 test B -=head2 bincompat functions +A full test suite for the B module would be nice. -There are lots of functions which are retained for binary compatibility. -Clean these up. Move them to mathom.c, and don't compile for blead? +=head2 A decent benchmark -=head2 Constant folding +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 +guide people attempting to optimise the guts of perl. Gisle would welcome +new tests for perlbench. -The peephole optimiser should trap errors during constant folding, and give -up on the folding, rather than bailing out at compile time. It is quite -possible that the unfoldable constant is in unreachable code, eg something -akin to C<$a = 0/0 if 0;> +=head2 fix tainting bugs -=head1 Tests +Fix the bugs revealed by running the test suite with the C<-t> switch (via +C). -=head2 Make Schwern poorer +=head2 Dual life everything -Tests for everything, At which point Schwern coughs up $500 to TPF. +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. -=head2 test B +=head2 Improving C -A test suite for the B module would be nice. +Investigate whether C could share aggregates properly with +only Perl level changes to shared.pm -=head2 common test code for timed bailout +=head2 POSIX memory footprint -Write portable self destruct code for tests to stop them burning CPU in -infinite loops. Needs to avoid using alarm, as some of the tests are testing -alarm/sleep or timers. +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. -=head1 Installation -=head2 compressed man pages -Be able to install them. This would probably need a configure test to see how -the system does compressed man pages (same directory/different directory? -same filename/different filename), as well as tweaking the F script -to compress as necessary. -=head2 Make Config.pm cope with differences between build and installed perl -Quite often vendors ship a perl binary compiled with their (pay-for) -compilers. People install a free compiler, such as gcc. To work out how to -build extensions, Perl interrogates C<%Config>, so in this situation -C<%Config> describes compilers that aren't there, and extension building -fails. This forces people into chosing between re-compiling perl themselves -using the compiler they have, or only using modules that the vendor ships. -It would be good to find a way teach C about the installation setup, -possibly involving probing at install time or later, so that the C<%Config> in -a binary distruction better describes the installed machine, when the installed -machine differs from the build machine in some significant way. -=head2 Relocatable perl +=head1 Tasks that need a little sysadmin-type knowledge -Make it possible to create a relocatable perl binary. Will need some collusion -with Config.pm. We could use a syntax of ... for location of current binary? +Or if you prefer, tasks that you would learn from, and broaden your skills +base... =head2 make HTML install work @@ -258,7 +129,43 @@ and different parameter lists having different meanings. (eg C