Home
Main website
Display Sidebar
Hide Ads
Recent Changes
View Source:
perltodo(1)
Edit
PageHistory
Diff
Info
LikePages
PERLTODO !!!PERLTODO NAME DESCRIPTION Infrastructure Configure Perl Language Perl Internals Documentation Modules Tom's Wishes Win32 Stuff Would be nice to have Possible pragmas Optimizations Vague possibilities To Do Or Not To Do Threading Compiler Recently Finished Tasks ---- !!NAME perltodo - Perl TO-DO List !!DESCRIPTION This is a list of wishes for Perl. It is maintained by Nathan Torkington for the Perl porters. Send updates to ''perl5-porters@perl.org''. 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: http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/ !!Infrastructure __Mailing list archives__ Chaim suggests contacting egroup and asking them to archive the other perl.org mailing lists. Probably not advocacy, but definitely perl6-porters, etc. __Bug tracking system__ Richard Foley ''richard@perl.org'' is writing one. We looked at several, like gnats and the Debian system, but at the time we investigated them, none met our needs. Since then, Jitterbug has matured, and may be worth reinvestigation. The system we've developed is the recipient of perlbug mail, and any followups it generates from perl5-porters. New bugs are entered into a mysql database, and sent on to perl5-porters with the subject line rewritten to include a ``ticket number'' (unique ID for the new bug). If the incoming message already had a ticket number in the subject line, then the message is logged against that bug. There is a separate email interface (not forwarding to p5p) that permits porters to claim, categorize, and close tickets. There is also a web interface to the system at http://bugs.perl.org. The current delay in implementation is caused by perl.org lockups. One suspect is the mail handling system, possibly going into loops. We still desperately need a bugmaster, someone who will look at every new ``bug'' and kill those that we already know about, those that are not bugs at all, etc. __Regression Tests__ The test suite for Perl serves two needs: ensuring features work, and ensuring old bugs have not been reintroduced. Both need work. Brent !LaVelle (lavelle@metronet.com) has stepped forward to work on performance tests and improving the size of the test suite. Coverage Do the tests that come with Perl exercise every line (or every block, or ...) of the Perl interpreter, and if not then how can we make them do so? Regression No bug fixes should be made without a corresponding testsuite addition. This needs a dedicated enforcer, as the current pumpking is either too lazy or too stupid or both and lets enforcement wander all over the map. :-) __DIE__ Tests that fail need to be of a form that can be readily mailed to perlbug and diagnosed with minimal back-and-forth's to determine which test failed, due to what cause, etc. suidperl We need regression/sanity tests for suidperl The 25% slowdown from perl4 to perl5 This value may or may not be accurate, but it certainly is eye-catching. For some things perl5 is faster than perl4, but often the reliability and extensibility have come at a cost of speed. The benchmark suite that Gisle released earlier has been hailed as both a fantastic solution and as a source of entirely meaningless figures. Do we need to test ``real applications''? Can you do so? Anyone have machines to dedicate to the task? Identify the things that have grown slower, and see if there's a way to make them faster. !!Configure Andy Dougherty maintain(eds) a list of ``todo'' items for the configure that comes with Perl. See Porting/pumpkin.pod in the latest source release. __Install HTML__ Have ``make install'' give you the option to install HTML as well. This would be part of Configure. Andy Wardley (certified Perl studmuffin) will look into the current problems of HTML installation--is 'installhtml' preventing this from happening cleanly, or is pod2html the problem? If the latter, Brad Appleton's pod work may fix the problem for free. !!Perl Language __64-bit Perl__ Verify complete 64 bit support so that the value of sysseek, or -s, or ''stat()'', or tell can fit into a perl number without losing precision. Work with the perl-64bit mailing list on perl.org. __Prototypes__ Named prototypes Add proper named prototypes that actually work usefully. Indirect objects Fix prototype bug that forgets indirect objects. Method calls Prototypes for method calls. Context Return context prototype declarations. Scoped subs lexically-scoped subs, e.g. my sub !!Perl Internals __magic_setisa__ magic_setisa should be made to update %FIELDS [[???] __Garbage Collection__ There was talk of a mark-and-sweep garbage collector at TPC2 , but the (to users) unpredictable nature of its behaviour put some off. Sarathy, I believe, did the work. Here's what he has to say: Yeah, I hope to implement it someday too. The points that were raised in TPC2 were all to do with calling ''DESTROY ()'' methods, but I think we can accommodate that by extending ''bless()'' to stash extra information for objects so we track their lifetime accurately for those that want their ''DESTROY ()'' to be predictable (this will be a speed hit, naturally, and will therefore be optional, naturally. :) [[N.B. Don't even ask me about this now! When I have the time to write a cogent summary, I'll post it.] __Reliable signals__ Sarathy and Dan Sugalski are working on this. Chip posted a patch earlier, but it was not accepted into 5.005. The issue is tricky, because it has the potential to greatly slow down the core. There are at least three things to consider: Alternate ''runops()'' for signal despatch Sarathy and Dan are discussed this on perl5-porters. Figure out how to ''die()'' in delayed sighandler Add tests for Thread::Signal Automatic tests against CPAN Is there some way to automatically build all/most of CPAN with the new Perl and check that the modules there pass all the tests? __Interpolated regex performance bugs__ while ( The qr// syntax added in 5.005 has solved this problem, but it needs more thorough documentation. __Memory leaks from failed eval/regcomp__ The only known memory leaks in Perl are in failed code or regexp compilation. Fix this. Hugo Van Der Sanden will attempt this but won't have tuits until January 1999. __Make XS easier to use__ There was interest in SWIG from porters, but nothing has happened lately. __Make embedded Perl easier to use__ This is probably difficult for the same reasons that `` XS For Dummies'' will be difficult. __Namespace cleanup__ CPP-space: restrict CPP symbols exported from headers header-space: move into CORE/perl/ API-space: begin list of things that constitute public api env-space: Configure should use PERL_CONFIG instead of CONFIG etc. __MULTIPLICITY__ Complete work on safe recursive interpreters Perl-. Sarathy says that a reference implementation exists. __!MacPerl__ Chris Nandor and Matthias Neeracher are working on better integrating !MacPerl into the Perl distribution. !!Documentation There's a lot of documentation that comes with Perl. The quantity of documentation makes it difficult for users to know which section of which manpage to read in order to solve their problem. Tom Christiansen has done much of the documentation work in the past. __A clear division into tutorial and reference__ Some manpages (e.g., perltoot and perlreftut) clearly set out to educate the reader about a subject. Other manpages (e.g., perlsub) are references for which there is no tutorial, or are references with a slight tutorial bent. If things are either tutorial or reference, then the reader knows which manpage to read to learn about a subject, and which manpage to read to learn all about an aspect of that subject. Part of the solution to this is: __Remove the artificial distinction between operators and functions__ History shows us that users, and often porters, aren't clear on the operator-function distinction. The present split in reference material between perlfunc and perlop hinders user navigation. Given that perlfunc is by far the larger of the two, move operator reference into perlfunc. __More tutorials__ More documents of a tutorial nature could help. Here are some candidates: Regular expressions Robin Berjon (r.berjon@ltconsulting.net) has volunteered. I/O Mark-Jason Dominus (mjd@plover.com) has an outline for perliotut. pack/unpack This is badly needed. There has been some discussion on the subject on perl5-porters. Debugging Ronald Kimball (rjk@linguist.dartmouth.edu) has volunteered. __Include a search tool__ perldoc should be able to 'grep' fulltext indices of installed POD files. This would let people say: perldoc -find printing numbers with commas and get back the perlfaq entry on 'commify'. This solution, however, requires documentation to contain the keywords the user is searching for. Even when the users know what they're looking for, often they can't spell it. __Include a locate tool__ perldoc should be able to help people find the manpages on a particular high-level subject: perldoc -find web would tell them manpages, web pages, and books with material on web programming. Similarly perldoc -find databases, perldoc -find references and so on. We need something in the vicinity of: % perl -help random stuff No documentation for perl function `random stuff' found The following entry in perlfunc.pod matches /random/a: =item rand EXPR =item rand Returns a random fractional number greater than or equal to C (Note: If your rand function consistently returns numbers that are too large or too small, then your version of Perl was probably compiled with the wrong number of RANDBITS.) The following pod pages seem to have /stuff/a: perlfunc.pod (7 hits) perlfaq7.pod (6 hits) perlmod.pod (4 hits) perlsyn.pod (3 hits) perlfaq8.pod (2 hits) perlipc.pod (2 hits) perl5004delta.pod (1 hit) perl5005delta.pod (1 hit) perlcall.pod (1 hit) perldelta.pod (1 hit) perlfaq3.pod (1 hit) perlfaq5.pod (1 hit) perlhist.pod (1 hit) perlref.pod (1 hit) perltoc.pod (1 hit) perltrap.pod (1 hit) Proceed to open perlfunc.pod? [[y] n Do you want to speak perl interactively? [[y] n Should I dial 911? [[y] n Do you need psychiatric help? [[y] y __Separate function manpages by default__ Perl should install 'manpages' for every function/operator into the 3pl or 3p manual section. By default. The splitman program in the Perl source distribution does the work of turning big perlfunc into little 3p pages. __Users can't find the manpages__ Make perldoc tell users what they need to add to their .login or .cshrc to set their MANPATH correctly. __Install ALL Documentation__ Make the standard documentation kit include the VMS , OS/2 , Win32, Threads, etc information. installperl and pod/Makefile should know enough to copy README .foo to perlfoo.pod before building everything, when appropriate. __Outstanding issues to be documented__ Tom has a list of 5.005_5* features or changes that require documentation. Create one document that coherently explains the delta between the last camel release and the current release. perldelta was supposed to be that, but no longer. The things in perldelta never seemed to get placed in the right places in the real manpages, either. This needs work. __Adapt www.linuxhq.com for Perl__ This should help glorify documentation and get more people involved in perl development. __Replace man with a perl program__ Can we reimplement man in Perl? Tom has a start. I believe some of the Linux systems distribute a manalike. Alternatively, build on perldoc to remove the unfeatures like ``is slow'' and ``has no apropos''. __Unicode tutorial__ We could use more work on helping people understand Perl's new Unicode support that Larry has created. !!Modules __Update the POSIX extension to conform with the POSIX 1003.1 Edition 2__ The current state of the POSIX extension is as of Edition 1, 1991, whereas the Edition 2 came out in 1996. ISO/IEC 9945:1-1996(E), ANSI/IEEE Std 1003.1, 1996 Edition. ISBN 1-55937-573-6. The updates were legion: threads, IPC , and real time extensions. __Module versions__ Automate the checking of versions in the standard distribution so it's easy for a pumpking to check whether CPAN has a newer version that we should be including? __New modules__ Which modules should be added to the standard distribution? This ties in with the SDK discussed on the perl-sdk list at perl.org. __Profiler__ Make the profiler (Devel::DProf) part of the standard release, and document it well. __Tie Modules__ !VecArray Implement array using ''vec()''. Nathan Torkington has working code to do this. !SubstrArray Implement array using ''substr()'' !VirtualArray Implement array using a file !ShiftSplice Defines shift et al in terms of splice method __Procedural options__ Support procedural interfaces for the common cases of Perl's gratuitously OOO modules. Tom objects to ``use IO::File'' reading many thousands of lines of code. __RPC__ Write a module for transparent, portable remote procedure calls. (Not core). This touches on the CORBA and ILU work. __y2k localtime/gmtime__ Write a module, Y2k::Catch, which overloads localtime and gmtime's returned year value and catches ``bad'' attempts to use it. __Export File::Find variables__ Make File::Find export $name etc manually, at least if asked to. __Ioctl__ Finish a proper Ioctl module. __Debugger attach/detach__ Permit a user to debug an already-running program. __Regular Expression debugger__ Create a visual profiler/debugger tool that stepped you through the execution of a regular expression point by point. Ilya has a module to color-code and display regular expression parses and executions. There's something at http://tkworld.org/ that might be a good start, it's a Tk/Tcl RE wizard, that builds regexen of many flavours. __Alternative RE Syntax__ Make an alternative regular expression syntax that is accessed through a module. For instance, use RE; $re = start_of_line() - if (/$re/) { print Newbies to regular expressions typically only use a subset of the full language. Perhaps you wouldn't have to implement the full feature set. __Bundled modules__ Nicholas Clark (nick@flirble.org) had a patch for storing modules in zipped format. This needs exploring and concluding. __Expect__ Adopt IO::Tty, make it as portable as Don Libes' ``expect'' (can we link against expect code?), and perfect a Perl version of expect. IO::Tty and expect could then be distributed as part of the core distribution, replacing Comm.pl and other hacks. __GUI::Native__ A simple-to-use interface to native graphical abilities would be welcomed. Oh, Perl's access Tk is nice enough, and reasonably portable, but it's not particularly as fast as one would like. Simple access to the mouse's cut buffer or mouse-presses shouldn't required loading a few terabytes of Tk code. __Update semibroken auxiliary tools; h2ph, a2p, etc.__ Kurt Starsinic is working on h2ph. mjd has fixed bugs in a2p in the past. a2p apparently doesn't work on nawk and gawk extensions. Graham Barr has an Include module that does h2ph work at runtime. __pod2html__ A short-term fix: pod2html generates absolute HTML links. Make it generate relative links. __Podchecker__ Something like lint for Pod would be good. Something that catches common errors as well as gross ones. Brad Appleton is putting together something as part of his !PodParser work. !!Tom's Wishes __Webperl__ Design a webperl environment that's as tightly integrated and as easy-to-use as Perl's current command-line environment. __Mobile agents__ More work on a safe and secure execution environment for mobile agents would be neat; the Safe.pm module is a start, but there's a still a lot to be done in that area. Adopt Penguin? __POSIX on non-POSIX__ Standard programming constructs for non-POSIX systems would help a lot of programmers stuck on primitive, legacy systems. For example, Microsoft still hasn't made a usable POSIX interface on their clunky systems, which means that standard operations such as ''alarm()'' and ''fork()'', both critical for sophisticated client-server programming, must both be kludged around. I'm unsure whether Tom means to emulate alarm( )and ''fork()'', or merely to provide a document like perlport.pod to say which features are portable and which are not. __Portable installations__ Figure out a portable semi-gelled installation, that is, one without full paths. Larry has said that he's thinking about this. Ilya pointed out that ''perllib_mangle()'' is good for this. !!Win32 Stuff __Rename new headers to be consistent with the rest__ __Sort out the__ ''spawnvp()'' __mess__ __Work out DLL versioning__ __Style-check__ !!Would be nice to have pack ``(stuff)*'' Contiguous bitfields in pack/unpack lexperl Bundled perl preprocessor Use posix calls internally where possible format BOTTOM -i rename file only when successfully changed All ARGV input should act like report HANDLE [[formats]. support in perlmain to rerun debugger lvalue functions Tuomas Lukka, on behalf of the PDL project, greatly desires this and Ilya has a patch for it (probably against an older version of Perl). Tuomas points out that what PDL really wants is lvalue ''methods'', not just subs. !!Possible pragmas (use less memory, CPU ) !!Optimizations __constant function cache__ __foreach(reverse...)__ __Cache eval tree__ Unless lexical outer scope used (mark in __rcatmaybe__ __Shrink opcode tables__ Via multiple implementations selected in peep. __Cache hash value__ Not a win, according to Guido. __Optimize away__ @_ __where possible__ __Optimize sort by {__ $a ____ $b __}__ Greg Bacon added several more sort optimizations. These have made it into 5.005_55, thanks to Hans Mulder. __Rewrite regexp parser for better integrated optimization__ The regexp parser was rewritten for 5.005. Ilya's the regexp guru. !!Vague possibilities ref function in list context This seems impossible to do without substantially breaking code. make tr/// return histogram in list context? Loop control on do{} et al Explicit switch statements Nobody has yet managed to come up with a switch syntax that would allow for mixed hash, constant, regexp checks. Submit implementation with syntax, please. compile to real threaded code structured types Modifiable $1 et al The intent is for this to be a means of editing the matched portions of the target string. !!To Do Or Not To Do These are things that have been discussed in the past and roundly criticized for being of questionable value. __Making__ ''my()'' __work on ``package'' variables__ Being able to say my($Foo::Bar), something that sounds ludicrous and the 5.6 pumpking has mocked. __``or'' testing defined not truth__ We tell people that can be used to give a default value to a variable: $children = shift 5; # default is 5 children which is almost (but not): $children = shift; $children = 5 unless $children; but if the first argument was given and is ``0'', then it will be considered false by and 5 used instead. Really we want an -like operator that behaves like: $children = shift; $children = 5 unless defined $children; Namely, a that tests defined-ness rather than truth. One was discussed, and a patch submitted, but the objections were many. While there were objections, many still feel the need. At least it was decided that ?? is the best name for the operator. __``dynamic'' lexicals__ my $x; sub foo { local $x; } Localizing, as Tim Bunce points out, is a separate concept from whether the variable is global or lexical. Chip Salzenberg had an implementation once, but Larry thought it had potential to confuse. __``class''-based, rather than package-based ``lexicals''__ This is like what the Alias module provides, but the variables would be lexicals reserved by perl at compile-time, which really are indices pointing into the pseudo-hash object visible inside every method so declared. !!Threading __Modules__ Which of the standard modules are thread-safe? Which CPAN modules? How easy is it to fix those non-safe modules? __Testing__ Threading is still experimental. Every reproducible bug identifies something else for us to fix. Find and submit more of these problems. __$AUTOLOAD__ __exit/die__ Consistent semantics for exit/die in threads. __External threads__ Better support for externally created threads. __Thread::Pool__ __thread-safety__ Spot-check globals like statcache and global GVs for thread-safety. Part done__ __ __Per-thread GVs__ According to Sarathy, this would make @_ be the same in threaded and non-threaded, as well as helping solve problems like filehandles (the same filehandle currently cannot be used in two threads). !!Compiler __Optimization__ The compiler's back-end code-generators for creating bytecode or compilable C code could use optimization work. __Byteperl__ Figure out how and where byteperl will be built for the various platforms. __Precompiled modules__ Save byte-compiled modules on disk. __Executables__ Auto-produce executable. __Typed lexicals__ Typed lexicals should affect B::CC::load_pad. __Win32__ Workarounds to help Win32 dynamic loading. __END blocks__ END blocks need saving in compiled output, now that CHECK blocks are available. ___AUTOLOAD__ _AUTOLOAD prodding. __comppadlist__ Fix comppadlist (names in comppad_name can have fake SvCUR from where newASSIGNOP steals the field). __Cached compilation__ Can we install modules as bytecode? !!Recently Finished Tasks __Figure a way out of $^(capital letter)__ Figure out a clean way to extend $^(capital letter) beyond the 26 alphabets. (${^WORD} maybe?) Mark-Jason Dominus sent a patch which went into 5.005_56. __Filenames__ Keep filenames in the distribution and in the standard module set be 8.3 friendly where feasible. Good luck changing the standard modules, though. __Foreign lines__ Perl should be more generous in accepting foreign line terminations. Mostly __done__ in 5.005. __Namespace cleanup__ symbol-space: CPP-space: stop malloc()/free() pollution unless asked __ISA .pm__ Rename and alter ISA .pm. __Done__. It is now base.pm. __gettimeofday__ See Time::!HiRes. __autocroak?__ This is the Fatal.pm module, so any builtin that does not return success automatically ''die()''s. If you're feeling brave, tie this in with the unified exceptions scheme. ----
One page links to
perltodo(1)
:
Man1p
This page is a man page (or other imported legacy content). We are unable to automatically determine the license status of this page.