3 perltodo - Perl TO-DO List
7 This is a list of wishes for Perl. It is maintained by Nathan
8 Torkington for the Perl porters. Send updates to
9 I<perl5-porters@perl.org>. If you want to work on any of these
10 projects, be sure to check the perl5-porters archives for past ideas,
11 flames, and propaganda. This will save you time and also prevent you
12 from implementing something that Larry has already vetoed. One set
13 of archives may be found at:
15 http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/
20 =head2 Mailing list archives
22 Chaim suggests contacting egroup and asking them to archive the other
23 perl.org mailing lists. Probably not advocacy, but definitely
26 =head2 Bug tracking system
28 Richard Foley I<richard@perl.org> is writing one. We looked at
29 several, like gnats and the Debian system, but at the time we
30 investigated them, none met our needs. Since then, Jitterbug has
31 matured, and may be worth reinvestigation.
33 The system we've developed is the recipient of perlbug mail, and any
34 followups it generates from perl5-porters. New bugs are entered
35 into a mysql database, and sent on to
36 perl5-porters with the subject line rewritten to include a "ticket
37 number" (unique ID for the new bug). If the incoming message already
38 had a ticket number in the subject line, then the message is logged
39 against that bug. There is a separate email interface (not forwarding
40 to p5p) that permits porters to claim, categorize, and close tickets.
42 There is also a web interface to the system at http://bugs.perl.org.
44 The current delay in implementation is caused by perl.org lockups.
45 One suspect is the mail handling system, possibly going into loops.
47 We still desperately need a bugmaster, someone who will look at
48 every new "bug" and kill those that we already know about, those
49 that are not bugs at all, etc.
51 =head2 Regression Tests
53 The test suite for Perl serves two needs: ensuring features work, and
54 ensuring old bugs have not been reintroduced. Both need work.
56 Brent LaVelle (lavelle@metronet.com) has stepped forward to work on
57 performance tests and improving the size of the test suite.
63 Do the tests that come with Perl exercise every line (or every block,
64 or ...) of the Perl interpreter, and if not then how can we make them
69 No bug fixes should be made without a corresponding testsuite addition.
70 This needs a dedicated enforcer, as the current pumpking is either too
71 lazy or too stupid or both and lets enforcement wander all over the
76 Tests that fail need to be of a form that can be readily mailed
77 to perlbug and diagnosed with minimal back-and-forth's to determine
78 which test failed, due to what cause, etc.
82 We need regression/sanity tests for suidperl
84 =item The 25% slowdown from perl4 to perl5
86 This value may or may not be accurate, but it certainly is
87 eye-catching. For some things perl5 is faster than perl4, but often
88 the reliability and extensibility have come at a cost of speed. The
89 benchmark suite that Gisle released earlier has been hailed as both a
90 fantastic solution and as a source of entirely meaningless figures.
91 Do we need to test "real applications"? Can you do so? Anyone have
92 machines to dedicate to the task? Identify the things that have grown
93 slower, and see if there's a way to make them faster.
99 Andy Dougherty maintain(ed|s) a list of "todo" items for the configure
100 that comes with Perl. See Porting/pumpkin.pod in the latest
105 Have "make install" give you the option to install HTML as well. This
106 would be part of Configure. Andy Wardley (certified Perl studmuffin)
107 will look into the current problems of HTML installation--is
108 'installhtml' preventing this from happening cleanly, or is pod2html
109 the problem? If the latter, Brad Appleton's pod work may fix the
116 Verify complete 64 bit support so that the value of sysseek, or C<-s>, or
117 stat(), or tell can fit into a perl number without losing precision.
118 Work with the perl-64bit mailing list on perl.org.
124 =item Named prototypes
126 Add proper named prototypes that actually work usefully.
128 =item Indirect objects
130 Fix prototype bug that forgets indirect objects.
134 Prototypes for method calls.
138 Return context prototype declarations.
142 lexically-scoped subs, e.g. my sub
146 =head1 Perl Internals
150 C<magic_setisa> should be made to update %FIELDS [???]
152 =head2 Garbage Collection
154 There was talk of a mark-and-sweep garbage collector at TPC2, but the
155 (to users) unpredictable nature of its behaviour put some off.
156 Sarathy, I believe, did the work. Here's what he has to say:
158 Yeah, I hope to implement it someday too. The points that were
159 raised in TPC2 were all to do with calling DESTROY() methods, but
160 I think we can accommodate that by extending bless() to stash
161 extra information for objects so we track their lifetime accurately
162 for those that want their DESTROY() to be predictable (this will be
163 a speed hit, naturally, and will therefore be optional, naturally. :)
165 [N.B. Don't even ask me about this now! When I have the time to
166 write a cogent summary, I'll post it.]
168 =head2 Reliable signals
170 Sarathy and Dan Sugalski are working on this. Chip posted a patch
171 earlier, but it was not accepted into 5.005. The issue is tricky,
172 because it has the potential to greatly slow down the core.
174 There are at least three things to consider:
178 =item Alternate runops() for signal despatch
180 Sarathy and Dan are discussed this on perl5-porters.
182 =item Figure out how to die() in delayed sighandler
184 =item Add tests for Thread::Signal
186 =item Automatic tests against CPAN
188 Is there some way to automatically build all/most of CPAN with
189 the new Perl and check that the modules there pass all the tests?
193 =head2 Interpolated regex performance bugs
197 foreach $pat (@patterns) {
203 The qr// syntax added in 5.005 has solved this problem, but
204 it needs more thorough documentation.
206 =head2 Memory leaks from failed eval/regcomp
208 The only known memory leaks in Perl are in failed code or regexp
209 compilation. Fix this. Hugo Van Der Sanden will attempt this but
210 won't have tuits until January 1999.
212 =head2 Make XS easier to use
214 There was interest in SWIG from porters, but nothing has happened
217 =head2 Make embedded Perl easier to use
219 This is probably difficult for the same reasons that "XS For Dummies"
222 =head2 Namespace cleanup
224 CPP-space: restrict CPP symbols exported from headers
225 header-space: move into CORE/perl/
226 API-space: begin list of things that constitute public api
227 env-space: Configure should use PERL_CONFIG instead of CONFIG etc.
231 Complete work on safe recursive interpreters C<Perl-E<gt>new()>.
232 Sarathy says that a reference implementation exists.
236 Chris Nandor and Matthias Neeracher are working on better integrating
237 MacPerl into the Perl distribution.
241 There's a lot of documentation that comes with Perl. The quantity of
242 documentation makes it difficult for users to know which section of
243 which manpage to read in order to solve their problem. Tom
244 Christiansen has done much of the documentation work in the past.
246 =head2 A clear division into tutorial and reference
248 Some manpages (e.g., perltoot and perlreftut) clearly set out to
249 educate the reader about a subject. Other manpages (e.g., perlsub)
250 are references for which there is no tutorial, or are references with
251 a slight tutorial bent. If things are either tutorial or reference,
252 then the reader knows which manpage to read to learn about a subject,
253 and which manpage to read to learn all about an aspect of that
254 subject. Part of the solution to this is:
256 =head2 Remove the artificial distinction between operators and functions
258 History shows us that users, and often porters, aren't clear on the
259 operator-function distinction. The present split in reference
260 material between perlfunc and perlop hinders user navigation. Given
261 that perlfunc is by far the larger of the two, move operator reference
264 =head2 More tutorials
266 More documents of a tutorial nature could help. Here are some
271 =item Regular expressions
273 Robin Berjon (r.berjon@ltconsulting.net) has volunteered.
277 Mark-Jason Dominus (mjd@plover.com) has an outline for perliotut.
281 This is badly needed. There has been some discussion on the
282 subject on perl5-porters.
286 Ronald Kimball (rjk@linguist.dartmouth.edu) has volunteered.
290 =head2 Include a search tool
292 perldoc should be able to 'grep' fulltext indices of installed POD
293 files. This would let people say:
295 perldoc -find printing numbers with commas
297 and get back the perlfaq entry on 'commify'.
299 This solution, however, requires documentation to contain the keywords
300 the user is searching for. Even when the users know what they're
301 looking for, often they can't spell it.
303 =head2 Include a locate tool
305 perldoc should be able to help people find the manpages on a
306 particular high-level subject:
310 would tell them manpages, web pages, and books with material on web
311 programming. Similarly C<perldoc -find databases>, C<perldoc -find
312 references> and so on.
314 We need something in the vicinity of:
316 % perl -help random stuff
317 No documentation for perl function `random stuff' found
318 The following entry in perlfunc.pod matches /random/a:
323 Returns a random fractional number greater than or equal to C<0> and less
324 than the value of EXPR. (EXPR should be positive.) If EXPR is
325 omitted, the value C<1> is used. Automatically calls C<srand()> unless
326 C<srand()> has already been called. See also C<srand()>.
328 (Note: If your rand function consistently returns numbers that are too
329 large or too small, then your version of Perl was probably compiled
330 with the wrong number of RANDBITS.)
331 The following pod pages seem to have /stuff/a:
332 perlfunc.pod (7 hits)
333 perlfaq7.pod (6 hits)
336 perlfaq8.pod (2 hits)
338 perl5004delta.pod (1 hit)
339 perl5005delta.pod (1 hit)
341 perldelta.pod (1 hit)
348 Proceed to open perlfunc.pod? [y] n
349 Do you want to speak perl interactively? [y] n
350 Should I dial 911? [y] n
351 Do you need psychiatric help? [y] y
352 <PELIZA> Hi, what bothers you today?
353 A Python programmer in the next cubby is driving me nuts!
354 <PELIZA> Hmm, thats fixable. Just [rest censored]
356 =head2 Separate function manpages by default
358 Perl should install 'manpages' for every function/operator into the
359 3pl or 3p manual section. By default. The splitman program in the
360 Perl source distribution does the work of turning big perlfunc into
363 =head2 Users can't find the manpages
365 Make C<perldoc> tell users what they need to add to their .login or
366 .cshrc to set their MANPATH correctly.
368 =head2 Install ALL Documentation
370 Make the standard documentation kit include the VMS, OS/2, Win32,
371 Threads, etc information. installperl and pod/Makefile should know
372 enough to copy README.foo to perlfoo.pod before building everything,
375 =head2 Outstanding issues to be documented
377 Tom has a list of 5.005_5* features or changes that require
380 Create one document that coherently explains the delta between the
381 last camel release and the current release. perldelta was supposed
382 to be that, but no longer. The things in perldelta never seemed to
383 get placed in the right places in the real manpages, either. This
386 =head2 Adapt www.linuxhq.com for Perl
388 This should help glorify documentation and get more people involved in
391 =head2 Replace man with a perl program
393 Can we reimplement man in Perl? Tom has a start. I believe some of
394 the Linux systems distribute a manalike. Alternatively, build on
395 perldoc to remove the unfeatures like "is slow" and "has no apropos".
397 =head2 Unicode tutorial
399 We could use more work on helping people understand Perl's new
400 Unicode support that Larry has created.
404 =head2 Update the POSIX extension to conform with the POSIX 1003.1 Edition 2
406 The current state of the POSIX extension is as of Edition 1, 1991,
407 whereas the Edition 2 came out in 1996. ISO/IEC 9945:1-1996(E),
408 ANSI/IEEE Std 1003.1, 1996 Edition. ISBN 1-55937-573-6. The updates
409 were legion: threads, IPC, and real time extensions.
411 =head2 Module versions
413 Automate the checking of versions in the standard distribution so
414 it's easy for a pumpking to check whether CPAN has a newer version
415 that we should be including?
419 Which modules should be added to the standard distribution? This ties
420 in with the SDK discussed on the perl-sdk list at perl.org.
424 Make the profiler (Devel::DProf) part of the standard release, and
433 Implement array using vec(). Nathan Torkington has working code to
438 Implement array using substr()
442 Implement array using a file
446 Defines shift et al in terms of splice method
450 =head2 Procedural options
452 Support procedural interfaces for the common cases of Perl's
453 gratuitously OOO modules. Tom objects to "use IO::File" reading many
454 thousands of lines of code.
458 Write a module for transparent, portable remote procedure calls. (Not
459 core). This touches on the CORBA and ILU work.
461 =head2 y2k localtime/gmtime
463 Write a module, Y2k::Catch, which overloads localtime and gmtime's
464 returned year value and catches "bad" attempts to use it.
466 =head2 Export File::Find variables
468 Make File::Find export C<$name> etc manually, at least if asked to.
472 Finish a proper Ioctl module.
474 =head2 Debugger attach/detach
476 Permit a user to debug an already-running program.
478 =head2 Regular Expression debugger
480 Create a visual profiler/debugger tool that stepped you through the
481 execution of a regular expression point by point. Ilya has a module
482 to color-code and display regular expression parses and executions.
483 There's something at http://tkworld.org/ that might be a good start,
484 it's a Tk/Tcl RE wizard, that builds regexen of many flavours.
486 =head2 Alternative RE Syntax
488 Make an alternative regular expression syntax that is accessed through
489 a module. For instance,
492 $re = start_of_line()
493 ->literal("1998/10/08")
494 ->optional( whitespace() )
496 ->remember( many( or( "-", digit() ) ) );
499 print "time is $1\n";
502 Newbies to regular expressions typically only use a subset of the full
503 language. Perhaps you wouldn't have to implement the full feature set.
505 =head2 Bundled modules
507 Nicholas Clark (nick@flirble.org) had a patch for storing modules in
508 zipped format. This needs exploring and concluding.
512 Adopt IO::Tty, make it as portable as Don Libes' "expect" (can we link
513 against expect code?), and perfect a Perl version of expect. IO::Tty
514 and expect could then be distributed as part of the core distribution,
515 replacing Comm.pl and other hacks.
519 A simple-to-use interface to native graphical abilities would
520 be welcomed. Oh, Perl's access Tk is nice enough, and reasonably
521 portable, but it's not particularly as fast as one would like.
522 Simple access to the mouse's cut buffer or mouse-presses shouldn't
523 required loading a few terabytes of Tk code.
525 =head2 Update semibroken auxiliary tools; h2ph, a2p, etc.
527 Kurt Starsinic is working on h2ph. mjd has fixed bugs in a2p in the
528 past. a2p apparently doesn't work on nawk and gawk extensions.
529 Graham Barr has an Include module that does h2ph work at runtime.
533 A short-term fix: pod2html generates absolute HTML links. Make it
534 generate relative links.
538 Something like lint for Pod would be good. Something that catches
539 common errors as well as gross ones. Brad Appleton is putting
540 together something as part of his PodParser work.
546 Design a webperl environment that's as tightly integrated and as
547 easy-to-use as Perl's current command-line environment.
551 More work on a safe and secure execution environment for mobile
552 agents would be neat; the Safe.pm module is a start, but there's a
553 still a lot to be done in that area. Adopt Penguin?
555 =head2 POSIX on non-POSIX
557 Standard programming constructs for non-POSIX systems would help a
558 lot of programmers stuck on primitive, legacy systems. For example,
559 Microsoft still hasn't made a usable POSIX interface on their clunky
560 systems, which means that standard operations such as alarm() and
561 fork(), both critical for sophisticated client-server programming,
562 must both be kludged around.
564 I'm unsure whether Tom means to emulate alarm( )and fork(), or merely
565 to provide a document like perlport.pod to say which features are
566 portable and which are not.
568 =head2 Portable installations
570 Figure out a portable semi-gelled installation, that is, one without
571 full paths. Larry has said that he's thinking about this. Ilya
572 pointed out that perllib_mangle() is good for this.
576 =head2 Rename new headers to be consistent with the rest
578 =head2 Sort out the spawnvp() mess
580 =head2 Work out DLL versioning
584 =head1 Would be nice to have
588 =item C<pack "(stuff)*">
590 =item Contiguous bitfields in pack/unpack
594 =item Bundled perl preprocessor
596 =item Use posix calls internally where possible
600 =item -i rename file only when successfully changed
602 =item All ARGV input should act like <>
604 =item report HANDLE [formats].
606 =item support in perlmain to rerun debugger
608 =item lvalue functions
610 Tuomas Lukka, on behalf of the PDL project, greatly desires this and
611 Ilya has a patch for it (probably against an older version of Perl).
612 Tuomas points out that what PDL really wants is lvalue I<methods>,
617 =head1 Possible pragmas
621 (use less memory, CPU)
625 =head2 constant function cache
627 =head2 foreach(reverse...)
629 =head2 Cache eval tree
631 Unless lexical outer scope used (mark in &compiling?).
635 =head2 Shrink opcode tables
637 Via multiple implementations selected in peep.
639 =head2 Cache hash value
641 Not a win, according to Guido.
643 =head2 Optimize away @_ where possible
645 =head2 Optimize sort by { $a <=> $b }
647 Greg Bacon added several more sort optimizations. These have
648 made it into 5.005_55, thanks to Hans Mulder.
650 =head2 Rewrite regexp parser for better integrated optimization
652 The regexp parser was rewritten for 5.005. Ilya's the regexp guru.
654 =head1 Vague possibilities
658 =item ref function in list context
660 This seems impossible to do without substantially breaking code.
662 =item make tr/// return histogram in list context?
664 =item Loop control on do{} et al
666 =item Explicit switch statements
668 Nobody has yet managed to come up with a switch syntax that would
669 allow for mixed hash, constant, regexp checks. Submit implementation
672 =item compile to real threaded code
674 =item structured types
676 =item Modifiable $1 et al
678 The intent is for this to be a means of editing the matched portions of
683 =head1 To Do Or Not To Do
685 These are things that have been discussed in the past and roundly
686 criticized for being of questionable value.
688 =head2 Making my() work on "package" variables
690 Being able to say my($Foo::Bar), something that sounds ludicrous and
691 the 5.6 pumpking has mocked.
693 =head2 "or" testing defined not truth
695 We tell people that C<||> can be used to give a default value to a
698 $children = shift || 5; # default is 5 children
700 which is almost (but not):
703 $children = 5 unless $children;
705 but if the first argument was given and is "0", then it will be
706 considered false by C<||> and C<5> used instead. Really we want
707 an C<||>-like operator that behaves like:
710 $children = 5 unless defined $children;
712 Namely, a C<||> that tests defined-ness rather than truth. One was
713 discussed, and a patch submitted, but the objections were many. While
714 there were objections, many still feel the need. At least it was
715 decided that C<??> is the best name for the operator.
717 =head2 "dynamic" lexicals
724 Localizing, as Tim Bunce points out, is a separate concept from
725 whether the variable is global or lexical. Chip Salzenberg had
726 an implementation once, but Larry thought it had potential to
729 =head2 "class"-based, rather than package-based "lexicals"
731 This is like what the Alias module provides, but the variables would
732 be lexicals reserved by perl at compile-time, which really are indices
733 pointing into the pseudo-hash object visible inside every method so
740 Which of the standard modules are thread-safe? Which CPAN modules?
741 How easy is it to fix those non-safe modules?
745 Threading is still experimental. Every reproducible bug identifies
746 something else for us to fix. Find and submit more of these problems.
752 Consistent semantics for exit/die in threads.
754 =head2 External threads
756 Better support for externally created threads.
762 Spot-check globals like statcache and global GVs for thread-safety.
763 "B<Part done>", says Sarathy.
765 =head2 Per-thread GVs
767 According to Sarathy, this would make @_ be the same in threaded
768 and non-threaded, as well as helping solve problems like filehandles
769 (the same filehandle currently cannot be used in two threads).
775 The compiler's back-end code-generators for creating bytecode or
776 compilable C code could use optimization work.
780 Figure out how and where byteperl will be built for the various
783 =head2 Precompiled modules
785 Save byte-compiled modules on disk.
789 Auto-produce executable.
791 =head2 Typed lexicals
793 Typed lexicals should affect B::CC::load_pad.
797 Workarounds to help Win32 dynamic loading.
801 END blocks need saving in compiled output, now that CHECK blocks
810 Fix comppadlist (names in comppad_name can have fake SvCUR
811 from where newASSIGNOP steals the field).
813 =head2 Cached compilation
815 Can we install modules as bytecode?
817 =head1 Recently Finished Tasks
819 =head2 Figure a way out of $^(capital letter)
821 Figure out a clean way to extend $^(capital letter) beyond
822 the 26 alphabets. (${^WORD} maybe?)
824 Mark-Jason Dominus sent a patch which went into 5.005_56.
828 Keep filenames in the distribution and in the standard module set
829 be 8.3 friendly where feasible. Good luck changing the standard
834 Perl should be more generous in accepting foreign line terminations.
835 Mostly B<done> in 5.005.
837 =head2 Namespace cleanup
839 symbol-space: "pl_" prefix for all global vars
840 "Perl_" prefix for all functions
842 CPP-space: stop malloc()/free() pollution unless asked
846 Rename and alter ISA.pm. B<Done>. It is now base.pm.
854 This is the Fatal.pm module, so any builtin that does
855 not return success automatically die()s. If you're feeling brave, tie
856 this in with the unified exceptions scheme.